内容发布更新时间 : 2025/7/4 15:39:03星期一 下面是文章的全部内容请认真阅读。
6
上边程序中ORR指令执行时需要使用LDR指令加载后的R4寄存器,因此造成了ORR指令的等待。
编译器以及汇编程序员可以通过重新设计代码的顺序或者其他办法来减少互锁的数量。
第3章 ARM指令集寻址方式
1.在指令编码中,条件码占几位,最多有多少个条件,各个条件是如何形成的? 答:条件码占4位,最多有15个条件 操作码 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 条件助记符 标志 EQ NE CS/HS CC/LO MI PL VS VC HI LS GE LT GT LE AL NV Z=1 Z=0 C=1 C=0 N=1 N=0 V=1 V=0 C=1,Z=0 C=0,Z=1 N=V N!=V Z=0,N=V Z=1,N!=V 任何 任何 含义 相等 不相等 无符号数大于或等于 无符号数小于 负数 正数或零 溢出 没有溢出 无符号数大于 无符号数小于或等于 有符号数大于或等于 有符号数小于 有符号数大于 有符号数小于或等于 无条件执行 (指令默认条件) 从不执行(不要使用)
2. 指令条件码中,V标志位在什么情况下才能等于1? 答:V—溢出标志位 对于加减法运算指令,当操作数和运算结果为二进制补码表示的带符号数时,V=1表示符号
6
7
位溢出,其他指令通常不影响V位。
3. 在ARM指令中,什么是合法的立即数?判断下面各立即数是否合法,如果合法则写出在指令中的编码格式(也就是8位常数和4位移位数) 0x5430 0x108 0x304 0x501 0xfb10000 0x334000 0x3FC000 0x1FE0000 0x5580000 0x7F800 0x39C000 0x1FE80000
答:立即数必须由1个8位的常数通过进行32位循环右移偶数位得到,其中循环右移的位数由一个4位二进制的两倍表示。即一个8位的常数通过循环右移2*rotate_4位(即0,2,4,。。。30)得到 0X5430
0000,0000,0000,0000,0101,0100,0011,0000 非法立即数 0X108
0000,0000,0000,0000,0000,0001,0000,1000 0x42循环右移30位 (rotate_4=0xF) 0X304
0000,0000,0000,0000,0000,0011,0000,0100 0xC1循环右移30位 (rotate_4=0xF) 0x501
0000,0000,0000,0000,0000,0101,0000,0001 非法立即数 0xfb10000
0000,1111,1011,0001,0000,0000,0000,0000 非法立即数 0x334000
0000,0000,0011,0011,0100,0000,0000,0000 0Xcd 循环右移18位(rotate_4=0x9) 0x3FC000
0000,0000,0011,1111,1100,0000,0000,0000 0XFF 循环右移18位(rotate_4=0x9) 0x1FE0000
0000,0001,1111,1110,0000,0000,0000,0000 非法立即数 0x5580000
0000,0101,0101,1000,0000,0000,0000,0000 非法立即数 0x7F800
0000,0000,0000,0111,1111,1000,0000,0000 非法立即数 0x39C000
0000,0000,0011,1001,1100,0000,0000,0000 0XE7循环右移18位(rotate_4=0x