(完整版)《ARM嵌入式系统结构与编程》第三章课后答案

更新时间:2023-08-03 06:26:46 阅读: 评论:0

第3章 ARM指令集寻址方式
1.在指令编码中,条件码占几位,最多有多少个条件,各个条件是如何形成的?
答:条件码占4位,最多有15个条件
方位五行
操作码
条件助记符
标志
含义
0000
EQ
Z=1
相等
0001
NE
Z=0
不相等
0010
CS/HS
C=1
无符号数大于或等于
0011
CC/LO
C=0
无符号数小于
0100
MI
N=1
负数
0101
PL
N=0
正数或零
0110
VS
V=1
溢出
0111
销售激励方案
VC
V=0
没有溢出
1000
HI
C=1,Z=0
无符号数大于
人生三境界1001
LS
C=0,Z=1
无符号数小于或等于
1010
GE
N=V
有符号数大于或等于
1011
LT
N!=V
有符号数小于
1100志愿活动策划书
GT
Z=0,N=V
有符号数大于
1101
LE
Z=1,N!=V
有符号数小于或等于
1110
AL
任何
无条件执行 (指令默认条件)
1111
NV
任何
从不执行(不要使用)
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逻辑左移 :
LSR逻辑右移 :
ASR算术右移 :
ROR循环右移 :
RRX带扩展的循环右移:
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:堆栈指针指向下一个要放入数据的空位置,且由低地址向高地址生成。
空递减堆栈ED:堆栈指针指向下一个要放入数据的空位置,且由高地址向低地址生成。
9.分析协处理器加载/存储指令的寻址方式种的内存地址索引格式中不同的汇编语法格式下内存地址的计算方法。
答:协处理器加载/存储指令的寻址方式种的内存地址索引格式中,索引格式类似于LDR/S
TR指令寻址中的立即数作为地址偏移量的形式。Addressing_mode中的偏移量为8位立即数的汇编语法格式有以下3种:
前变址不回写形式:[<Rn>,#+/-<imm_offt8>*4 ]
第一个内存地址编号为基地址寄存器Rn值加上/减去imm_offt8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。
前变址回写形式:    [<Rn>,#+/-<imm_offt8>*4]!
第一个内存地址编号为基地址寄存器Rn值加上/减去imm_offt8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结束本次数据传输为止。当指令执行时,生成的地址值将写入基址寄存器。
后变址回写形式:  [<Rn>],#+/-<imm_offt8>*4
内存地址为基址寄存器Rn的值,当存储器操作完成后,将基地址寄存器Rn值加上/减去imm_offt8的4倍,后续的每一个地址是前一个内存地址加4,直到协处理器发出信号,结
束本次数据传输为止。最后将Rn值加上/减去imm_offt8的4倍写回到基址寄存器Rn(更新基地址寄存器)。
1. 写出下列指令的机器码,并分析指令操作功能。
家常红烧鲫鱼MOV    R0,R1
MOV    R1,,0X198
ADDEQS R1,R2,,0xAB
CMP    R2,#0Xab
LDR    R0,[R1,#4]
北京落户积分细则STR        R0,[R1,R1,LSL #2]!
LDRH    R0,[R1,#4]
LDRSB    R0,[R2,#-2]!
STRB    R1,[R2,#0Xa0]
LDMIA    R0,{R1,R2,R8}
STMDB    R0!,{R1-R5,R10,R11}
STMED    SP!{R0-R3,LR}
答:机器码部分略。
MOV    R0,R1            ;R0《-----R1
MOV    R1,,0X198        ;R0《----0X198
ADDEQS R1,R2,,0xAB    ;当Z=1时,R1《---R2+0xAB 并影响标志位
CMP    R2,#0Xab            ;R2-0xAB,并影响标志位
LDR    R0,[R1,#4]          ;R0《---【R1+4】
STR        R0,[R1,R1,LSL #2]!    ;【R1+R1*4】《---R0,R1=R1+R1*4
LDRH    R0,[R1,#4]          ;R0《---【R1+4】半字,R0的高16位清零
LDRSB    R0,[R2,#-2]!          ;R0《---【R2-2】字节,R0有符号扩展为32位,R2=R2-2
STRB    R1,[R2,#0Xa0]        ;【R2+0Xa0】《----R1低8位,
LDMIA    R0,{R1,R2,R8}
;将内存单元【R0】~【R+11】以字为单位读取到R1,R2,R8中
STMDB    R0!,{R1-R5,R10,R11}
将寄存器R1~R5,R10,R11的值以字为单位依次写入【R0】中,每写一个字之前R0=R0-4
STMED    SP!{R0-R3,LR}
将寄存器R0~R3,LR的的值以字为单位依次写入【SP】中,每写一个字之后SP=SP-4
手工制作小兔子灯笼

本文发布于:2023-08-03 06:26:46,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1106255.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指令   地址   寄存器   方式   堆栈
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图