嵌入式在线测试8
1.假设R0的内容为0x8000,寄存器R1、R2内容分别为0x33与0x55,存储器内容为空,分别执行下述每一条指令后,R0,R1,R2,R15的值各是多少?
STMIB R0! , {R1 , R2}
LDMIA R0! , {R1 , R2}
参考答案:
1.执行STMIB后R0=0x8008,存储器从地址 0X8004 开始的连续四个单元存放R1 寄存器的值 0X33,从地址 0X8008 开始的连续的四个单元存放 R2 寄存器的值 0X55,R1 和R2 寄存器的内容保持不变,R1=0x33,R2=0x55.
2.执行指令 LDMIA 时,寄存器 R0 的值变化过程如下:0X8008→0X800C→0X8010,存储器的内容不变化,寄存器 R1 的值为 0X55,寄存器 R2 的值为 0X800C 开始的四个字节的内容。
3.执行STMIB 时,PC 最开始的值为LDMIA 指令下一条指令的地址,执行完 STMIB 后 PC=PC+4,执行完 LDMIA 指令后,PC=PC+4。
2.如何辨别LDR指令是ARM的基本指令,还是伪指令?请你各举出3条数据传送LDR基本指令(前变址、回写前变址、后变址)的例子和3条LDR伪指令的例子(传立即数、传一个地址标号,传一个表达式)。
参考答案:
在基本指令LDR格式中无“=”符号;伪指令LDR格式中有“=”符号。
LDR基本指令:
前变址:LDR r0,[r1,#4]
回写