嵌入式思考题第三章.docx
- 文档编号:30554603
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:7
- 大小:18.65KB
嵌入式思考题第三章.docx
《嵌入式思考题第三章.docx》由会员分享,可在线阅读,更多相关《嵌入式思考题第三章.docx(7页珍藏版)》请在冰豆网上搜索。
嵌入式思考题第三章
嵌入式思考题(第三章)
嵌入式思考题(第三章)
1)Arm指令是有条件执行,常用的条件助记符EQ,NE,HI,LS是何意义?
条件码
助记符后缀
标志
含义
0000
EQ
Z置位
相等/是否为0
0001
NE
Z清零
不相等
1000
HI
C置位并且Z清零
无符号数大于
1001
LS
C清零或Z置位
无符号数小于或等于
2)一些指令不需要后缀“S”,也能更新条件码标志,是哪几个?
CMP,CMN,TST,TEQ(其唯一功能就是更新条件码标志)
3)第二操作数做立即数时,哪些是有效的,哪些是无效的?
立即数不能做为目标操作数的,但可以作为源操作数。
MOVAX,1234H这是正确的
MOV1234H,AX这是错误的
4)LSL、LSR、ASL、ASR、ROR、RRX的含义?
LSL:
逻辑左移(按操作数所指定的数量向左移位,低位用零填充)
LSR:
逻辑右移
ASL:
算术左移指令(每执行一次,将D通道中的数据按位左移一位最高位移到CY中,0移进最低位)
ASR:
算术右移指令
ROR:
循环右移指令(每执行一次,将D通道中的数据连同CY的内容,按位循环右移一位)
RRX:
带扩展的循环右移(按操作数所指定的数量向右循环移位,左端用进位标志位C来填充)
5)根据下面的指令,写出执行的结果:
ADDR3,R2,R1,LSR#2
R3=R2+R1>>1
LDRR0,[R1,R2,LSL#2]
将存储器地址为R1+R2<<2的字数据读入寄存器R0中
LDRR0,[R1,#4]!
将存储器地址为R1+4的字数据读入寄存器R0中,并将R1+4的值存入R1
LDRR0,[R3],-R8
将存储器地址为R3的字数据读入寄存器R0中,并将R3-R8的值存入R0
LDRR0,[R3],R8,LSL#2
将存储器地址为R3的字数据读入寄存器R0中,并将R3+R8<<2(即R3+R8*4)的值存入R0
STRBR0,[R3,-R8,ASR#2]
将寄存器R0的最低有效字节传送给R3-R8>>2(即R3-R8/4),R3和R8不变
LDREQSHR11,[R6]
(有条件地)将寄存器R6的值传送给R11,加载16位半字,带符号扩展到32位
STRHR4,[R0+R1]
将寄存器R4的值传送给地址为R0+R1的寄存器
STRDR4,[R9,#24]
将寄存器R4的值传送给地址为R9+24的寄存器,将寄存器R5的值传送给地址为R9+28的寄存器
6)根据下面的指令,写出执行的结果:
LDMIAR1,{R0,R2,R5}
((R1))->R0,((R1)+4)->R2,((R1)+8)->R5
LDMIBR1,{R0,R2,R5}
((R1)+4)->R0,((R1)+8)->R2,((R1)+12)->R5
LDMDAR1,{R0,R2,R5}
((R1))->R0,((R1)-4)->R2,((R1)-8)->R5
LDMDBR1,{R0,R2,R5}
((R1)-4)->R0,((R1)-8)->R2,((R1)-12)->R5
7)理解多寄存器寻址和堆栈寻之间的联系,分别写出堆栈寻找LDMFA、LDMED、STMEA、STMFD所对应的多寄存器寻找指令。
多寄存器寻址:
LDMIA:
每次传送后地址加4;LDMIB:
每次传送前地址加4;
LDMDA:
每次传送后地址减4;LDMDB:
每次传送前地址减4;
堆栈寻址:
LDMFA:
满递减堆栈;LDMED:
空递减堆栈;
STMFD:
满递增堆栈;STMEA:
空递增堆栈。
8)理解BIC、ORR、TST、EOR等指令的用途
BIC:
BIC(位清除)指令对Rn中的值和Operand2值的反码按位进行逻辑“与”运算。
BIC是逻辑”与非”指令,实现的BitClear的功能。
ORR:
ORR逻辑"或"操作指令指令格式为ORR{cond}{S} Rd,Rn,operand2。
ORR指令将操作数operand2 与Rn 的值按逻辑"或",结果存放到目的寄存器Rd 中。
TST:
Test测试指令用于将一个寄存器的值和一个算术值做比较。
条件标志位根据两个操作数做“逻辑与”后的结果设置。
EOR:
逻辑异或EOR(ExclusiveOR)指令将寄存器
9)利用MRS/MSR如何禁止或者使能IRQ和FIQ的中断?
在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。
与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。
1,使能IRQ中断:
ENABLE_IRQ
MRS R0, CPSR ;将CPSR寄存器内容读出到R0
BIC R0, R0,#0x80 ;清掉CPSR中的I控制位
MSR CPSR_c,R0 ;将修改后的值写回 CPSR寄存器的对应控制域
MOV PC,LR ;返回上一层函数
2,禁用IRQ中断:
DISABLE_IRQ
MRS R0CPSR ;将CPSR寄存器内容读出到R0
ORR R0, R0,#0x80 ;设置CPSR中的I控制位
MSR CPSR_c,R0 ;将修改后的值写回 CPSR寄存器的对应控制域
MOV PC,LR ;返回上一层函数
10)软中断指令SWI的立即数如何获取?
理解立即数作为中断号时,整个中断服务程序的调用过程。
(结合“ucosII已移植好的实验代码”)
1,获取immed_24操作数:
LDRR0,[LR,#-4](将链接寄存器LR的内容减去4后所获得的值作为一个地址,然后把该地址的内容装载进R0)
BICR0,R0,#0xFF000000(将R0的高8位清零,并把结果保存到R0,意思就是取R0的低24位)
2,使用参数寄存器:
在执行SWI指令之前,给R0赋予某个数值,然后在SWI异常处理子程序中根据R0值实现不同的分支处理。
11)LDR伪指令通过何种方式实现任意立即数的赋值?
1,LDRpc,=MyHandleIRQ表示将MyHandleIRQ符号放入pc寄存器中
2,LDRPC,MyHandleIRQ表示将读取存储器中MyHandleIRQ符号所表示的地址中的值,及需要多读一次存储器。
12)Thumb指令与ARM指令有哪些不同?
1,Thumb指令可以看作是ARM指令压缩形式的子集,是针对代码密度的问题而提出的,它具有16位的代码密度但是它不如ARM指令的效率高。
Thumb不是一个完整的体系结构,不能指望处理只执行Thumb指令而不支持ARM指令集。
因此,Thumb指令只需要支持通用功能,必要时可以借助于完善的ARM指令集,比如,所有异常自动进入ARM状态。
2,Thumb指令集没有协处理器指令,信号量指令以及访问CPSR或SPSR的指令,没有乘加指令及64位乘法指令等,且指令的第二操作数受到限制;除了跳转指令B有条件执行功能外,其它指令均为无条件执行;大多数Thumb数据处理指令采用2地址格式。
Thumb指令集与ARM指令的区别一般有如下几点:
跳转指令
程序相对转移,特别是条件跳转与ARM代码下的跳转相比,在范围上有更多的限制,转向子程序是无条件的转移。
数据处理指令
数据处理指令是对通用寄存器进行操作,在大多数情况下,操作的结果须放入其中一个操作数寄存器中,而不是第3个寄存器中.数据处理操作比 ARM 状态的更少,访问寄存器 R8~R15 受到一定限制。
除 MOV 和 ADD 指令访问器 R8~R15 外,其它数据处理指令总是更新 CPSR 中的 ALU 状态标志。
访问寄存器 R8~R15 的 Thumb 数据处理指令不能更新 CPSR 中的 ALU 状态标志。
单寄存器加载和存储指令
在 Thumb 状态下,单寄存器加载和存储指令只能访问寄存器 R0~R7。
批量寄存器加载和存储指令
LDM 和 STM 指令可以将任何范围为 R0~R7 的寄存器子集加载或存储。
PUSH 和 POP 指令使用堆栈指令 R13 作为基址实现满递减堆栈。
除 R0~R7 外,PUSH 指令还可以存储链接寄存器 R14,并且 POP 指令可以加载程序指令PC。
13)在非特权模式下能否对CPSR寄存器设置?
能否读取CPSR寄存器的值?
(提示:
参考实验程序有相应的代码,运行测试一下)
只有在特权模式下才允许对当前程序状态寄存器CPSR的所有控制位直接进行读/写访问,而在非特权模式下只允许对CPSR的控制位进行间接访问,但可以读取CPSR的值。
14)在非特权模式下如何使能/禁止IRQ或FIO中断?
(提示:
可以先使用SWI指令切换到管理模式)
使用SWI指令切换到管理模式。
15)程序中能不能通过MSR指令直接修改CPSR中的T位来实现ARM状态/Thumb状态的切换?
不能。
如果这样做的话不会清空流水线,是不安全的。
可以使用BX指令进行状态切换,程序跳转的同时进行状态切换,当程序发生跳转时流水线会被清空,流水线中按原来处理器状态进行取指和译码的指令(与当前处理器状态不符的指令)会被清除,也就不会引起处理器的错误。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 思考题 第三
![提示](https://static.bdocx.com/images/bang_tan.gif)