? 小端存储器系统: 在小端格式中,高位数字存放在高位字节中。因此存储器系统字节0连接到数据线7~0。
? 大端存储器系统: 在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线31~24。
7. 分析带有存储器访问指令(LDR)的流水线运行情况,并用图示说明流水线的运行机制。 答:存储器访问指令LDR 流水线举例
取指的存储器访问和执行的数据路径占用都是不可同时共享的资源,对于多周期指令来说,如果指令复杂以至于不能在单个时钟周期内完成执行阶段,就会产生流水线阻塞。 对存储器的访问指令LDR是非单周期指令
LDR指令的执行,访问存储器,回写寄存器(占用了3个周期)。造成了MOV指令的执行被阻断。
8. 简述ARM9的5级流水线每一级所完成的功能和实现的操作。 答:ARM920在指令操作上采用5级流水线 .
取指:从指令Cache中读取指令。 译码:对指令进行译码,识别出是对哪个寄存器进行操作并从通用寄存器中读取操作数。 执行:进行ALU运算和移位操作,如果是对存储器操作的指令,则在ALU中计算出要访问的存储器地址。
存储器访问:如果是对存储器访问的指令,用来实现数据缓冲功能(通过数据Cache)。 寄存器回写:将指令运算或操作结果写回到目标寄存器中。
9. 什么叫流水线互锁?应如何来解决,举例说明。
答:互锁:当前指令的执行需要前面指令的执行结果,但前面的指令没有执行完毕,引起流水线的等待。互锁发生时,硬件会停止指令的执行,直到数据准备好。
上边程序中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表示符号
位溢出,其他指令通常不影响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=0x9) 0x1FE80000
0001,1111,1110,1000,0000,0000,0000,0000 非法立即数
4.分析逻辑右移,算术右移,循环右移,带扩展的循环右移它们间的差别。 答:LSL逻辑左移 :
3100
LSR逻辑右移 :
3100
ASR算术右移 :
310
ROR循环右移 :
310
RRX带扩展的循环右移:
31C0
5.ARM数据处理指令具体的寻址方式有哪些,如果程序计数器PC作为目标寄存器,会产生什么结果?
答:数据处理指令寻址方式具体可分为5种类型:
1)第二操作数为立即数2)第二操作数为寄存器3)第二操作数为寄存器移位方式且移位的位数为一个5位立即数4)第二操作数为寄存器移位方式且移位数值放在寄存器中5)第二操作数位寄存器进行RRX移位得到。如果PC (R15)用作目标寄存器,指令会产生不可预知的结果。
6.在Load/Store指令寻址中,字,无符号字节的Load/Store指令寻址和半字,有符号字节寻址,试分析它们之间的差别。 答:在Load/Store指令寻址中,
字,无符号字节的Load/Store指令寻址中共有以下3种内存地址构成格式:
1)Addressing_mode 中的偏移量为立即数 2)Addressing_mode 中的偏移量为寄存器的值 3)Addressing_mode 中的偏移量通过寄存器移位得到
半字,有符号字节的Load/Store指令寻址中共有以下2种内存地址构成格式:
1)Addressing_mode 中的偏移量为立即数 2)Addressing_mode 中的偏移量为寄存器的值
7.块拷贝Load/Store指令在实现寄存器组合连续的内存单元中数据传递时,地址的变化方式有哪几种类型,并分析它们的地址变化情况。
答:批量Load/Store指令在实现寄存器组合连续的内存单元中数据传递时,地址的变化方式有以下4种类型:
? 后增IA (Increment After) :每次数据传送后地址加4; ? 先增IB (Increment Before) :每次数据传送前地址加4 ; ? 后减DA (Decrement After) :每次数据传送后地址减4 ; ? 先减DB (Decrement Before) :每次数据传送前地址减4 ;
8.栈操作指令地址的变化方式有哪几种类型,并分析它们的地址变化情况,从而得出栈操作指令寻址和块拷贝Load/Store指令之间的对应关系。
答:根据堆栈指针的指向位置不同和堆栈的生长方向不同,共有4种类型的堆栈工作方式: 满递增堆栈FA:堆栈指针指向最后压入的数据,且由低地址向高地址生成。 满递减堆栈FD:堆栈指针指向最后压入的数据,且由高地址向低地址生成。
空递增堆栈EA:堆栈指针指向下一个要放入数据的空位置,且由低地址向高地址生成。