在ARMv6T2以及ARMv7架構擴展了Thumb指令集,其中加入了 IT
指令,進一步增強了代碼的緊湊性。
Thumb中有一個比較有意思的指令——IT
,這條指令用于根據指定的條件來執(zhí)行后面相繼的四條指令。當然,Thumb-2中大部分算術邏輯指令都含有帶條件執(zhí)行的特征,不過Thumb-2是32位的。如果你需要更緊湊的指令,那么使用Thumb結合ThumbEE來做帶條件的指令執(zhí)行還是不錯的選擇。Thumb本身不具備帶條件指令執(zhí)行的特性。
IT指令的描述為:IT{<x>{<y>{<z>}}} <firstcond>
其中,<x>
表示第二條指令的條件;<y>
表示第三條指令的條件;<z>
表示第四條指令的條件。<firstcond>
是條件操作數,表示第一條指令的條件。
<x>
、<y>
、<z>
的標識其實就兩種符號——T
或 E
。T
表示 Then,表示相應的指令所滿足的條件與 <firstcond>
一致;E
表示 Else,表示相應的指令所滿足的條件與 <firstcond>
完全相反。因此,對于第一條指令而言,總是為 T
的,因此不需要在 IT
指令中顯示給出,它直接對應于 <firstcond>
的條件。
另外,在 IT塊 中不能再使用 IT
指令。即,相繼的四條指令中不允許再出現(xiàn) IT
指令。
下面給出一些示例代碼:
//
// hi.s
// test
//
// Created by zenny_chen on 13-5-8.
// Copyright (c) 2013年 zenny_chen. All rights reserved.
//
.text
.align 4
.globl _Thumb2Test, _Thumb2Test2
.thumb
.thumb_func
_Thumb2Test:
eor r1, r1, r1
eor r2, r2, r2
eor r3, r3, r3
eor r12, r12, r12
cmp r1, #0
itete eq
moveq r1, #10
movne r2, #20
moveq r3, #30
movne r12, #50
stmia r0, {r1-r3, r12}
bx lr
.thumb_func
_Thumb2Test2:
mov r1, #1
eor r2, r2, r2
eor r3, r3, r3
eor r12, r12, r12
cmp r1, #0
ittet gt
movgt r1, #10
movgt r2, #20
movle r3, #30 // 這里只能用le(表示小于等于),而不能用lt(表示小于)
movgt r12, #50
stmia r0, {r1-r3, r12}
bx lr
下面是調用上述 Thumb2Test 和 Thumb2Test2 函數的Objective-C源文件。由于基于iOS系統(tǒng),因此會有一些框架性的代碼~文章來源:http://www.zghlxwxcb.cn/news/detail-728069.html
//
// ViewController.m
// test
//
// Created by zenny_chen on 13-5-8.
// Copyright (c) 2013年 zenny_chen. All rights reserved.
//
#import "ViewController.h"
@interface ViewController ()
@end
extern void Thumb2Test(int p[4]);
extern void Thumb2Test2(int p[4]);
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
int a[4];
Thumb2Test(a);
NSLog(@"a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d", a[0], a[1], a[2], a[3]);
Thumb2Test2(a);
NSLog(@"a[0] = %d, a[1] = %d, a[2] = %d, a[3] = %d", a[0], a[1], a[2], a[3]);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
大家可以嘗試編譯運行,看看輸出什么結果~??文章來源地址http://www.zghlxwxcb.cn/news/detail-728069.html
到了這里,關于ARM處理器架構的Thumb指令集中關于IT指令的使用的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!