第四章复习(修改)

更新时间:2024-01-28 18:28:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. ARM处理器的工作状态?如何进入工作状态?

答:有两种,ARM(32位字对齐)和Thumb(16位半字对齐)。 当ARM微处理器执行32位的ARM指令集时,工作在ARM状态;当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。 进入ARM:当操作数状态位(位0)为0,执行BX指令可以从Thumb到ARM切换;进入Thumb:当操作数状态位(位0)为1,执行BX指令可以从ARM到Thumb切换。 2. ARM处理器支持的7种运行模式?

答:7种模式:用户模式usr、快速中断模式fiq、外部中断模式irq、管理模式svc、系统模式sys、数据终止模式abt、未定义指令中止模式und。

3. 大端格式和小端格式

答:大端格式和小端格式是ARM处理器数据存储格式。小端格式是低地址存放低字节数据,高地址存放高字节数据。如十六制数据从高到低11223344,设最低低字节(32位)0x20000000。则在0x20000000存放44,0x200000001存放33,0x200000002存放22,0x20000003存放11。即每8位为一个字节,就是说上面16进制为4个字节。每四个字节存放一字数据。 4. ARM状态下寄存器组织 答:1.通用寄存器R0—R15; 2.状态寄存器; 5. 程序状态寄存器格式。

答:程序状态寄存器有CPSR和SPSR,格式为: N Z C V 保留位

6. Thumb状态下寄存器组织与ARM状态下寄存器组织的异同; 答:1.ARM和Thumb状态下的R0—R7一样的; 2.在Thumb中没有R8—R12; 3.ARM 中的R13对应Thumb中的SP; 4.ARM 中的R14对应Thumb中的LR; 5.ARM 中的R15对应Thumb中的PC; 6.ARM 和Thumb中的CPSR和SPSR是一样的; 7. ARM的异常分类及优先级

答:有七种异常并且优先级从高到低为:1.复位;2.数据中止;3.fiq;4.irq;5.指令预取;6.未定义指令;7.软件中断。 8. ARM异常的响应(四步)

答:1.将下一条指令的地址赋给LR,以便程序从异常返回时能从正确的位置执行;

2.将CPSR 的值复制给SPSR; 3.对CPSR进行位操作;

具体为:3.1设置模式位M[4:0],使处理器进入相应的模式; 3.2设置中断标志位M[6],禁止fiq中断;

I F T M4 M3 M2 M1 M0 3.3当进入Reset或者fiq时,还要设置中断标志位M[7],禁止irq中断。

4.PC强制赋值,使程序从相应的异常向量地址开始执行中断处理程序。

9. ARM异常返回(四步)

答:1.将那些被修改过的寄存器出栈; 2.将LR的值减去偏移量赋给PC;

3.恢复程序状态寄存器的状态,即SPSR_mode复制给CPSR; 4.清除那些被修改过的中断禁止位。 10. ARM指令的寻址方式(7种);

答:1.立即寻址;2.寄存器寻址;3.间接寻址;4.基址变址寻址;5.多寄存器寻址;6.堆栈寻址;7.相对寻址。 11. 能够说明寻址指令的含义; 12. MOV与LDR/STR的区别;

答: MOV经常用于在ARM内核中寄存器和寄存器之间或者与立即数之间传递;

LDR把存储器中的数据加载到内核中; STR把内核中的数据存储到存储器中。 13. MRS和MSR指令的用法;

答:MRS R,CPSR/SPSR状态寄存器到通用寄存器的数据传送指令; 用法:1.异常或者进程切换时需要保存C/SPSR的值,读出程序状态寄存器的值然后保存;

2.需要改变C/SPSR的值时,将值给通用寄存器,修改后再写回状态寄存器。

MSR CPSR/SPSR,R通用寄存器到状态寄存器的数据传送指令; 用于恢复或者改变程序状态寄存器的内容。

14. 加法、减法、乘法指令、跳转指令、数据交换指令、移位指令; 答:ADDS,ADC(带进位),SUBS,SBC(带进位),MUL R0,R1,R2;R0=R1*R2 SMULL R0,R1,R2,R3 ;R0=R2*R3的低32位;

R1=R2*R3的高32位;

SWAP R0,R1,[R2] ;将R2所指存储器中的内容给R0。同时,将R1的字数据给了R2所指存储器的单元。还有SWAPB字节交换。 1.有符号加法运算结束后CPSR寄存器值为0x60000013,分析CPSR状态。

答:CPSR寄存器的值化为二进制:0110 0000 0000 0000 0000 0000 0001 0011,故N=0;Z=1;C=1;V=0;I=F=T=0;M[4:0]=10011。 所以结果为零,允许irq和fiq中断,并且为执行了ARM指令,C=0运算结果没有产生进位,V=0计算结果未溢出,处理器模式为管理模式。

2.用ARM汇编指令写出实现64位加法和64位减法的代码段,使用的寄存器请自行分配。

答:R1,R2存放一个数的高32和低32;R6,R7存放另一个高32和低32的数。则加法:

ADDS R7,R7,R2;加S是因为要让这个操作影响标志位

ADC R6,R1,R6;高32位的加法。 减法:

SUBS R2,R2,R7;低位减法 SBC R1,R1,R6

3、编写一程序,查找存储器从0x30000000开始的100个字节中为0的数目,将其结果存到0x30000012中。 答: MOV R0,#0x3000 0000;将地址赋给R0 MOV R5,#0 MOV R3,0X30000012

START: LDR R1,[R0],#1;将字节数据存入R1中

CMP R1,#0;看R1和0是否相等 ADDEQ R5,R5,#1 CMP R0,#0x3000 0064 BNE START STR R5,[R3] END

4:仅置位C标志,保留N、Z、V标志,其他位不变。 答:

MRS R0,CPSR;将CPSR中的内容传给R0

ORR R0,R0,#0x20000000;将C位置一,其他位不变

MSR CPSR_f,R0;将值在传送给CPSR,其中的f为被修改的位,[31:24]为条件标志位,用f表示。

5假设R0的内容为0x8000,寄存器R1、R2的内容分别为0x01,0x10,存储器中所有存储单元的内容均为0xff。连续执行下述两条指令后,存储器及寄存器的内容如何变化?

STMIB R0!,{R1,R2}; LDMIA R0!,{R1,R2}

答:注意:这里R1<—[R0]的意思是以R0内容为地址所指的存储器值赋给R1。

IB是操作完成前地址先加4;

并且STM操作是将多寄存器的内容保存在存储器中。 STMIB R0!,{R1,R2};存储器中地址为0x8004的内容是0x01

;存储器中地址为0x8008的内容是0x10 ;此时R0的地址为0x8008

IA是操作完成后地址再加4;

LDM是将存储器中的内容分别加载到多个寄存器中。 LDMIA R0!,{R1,R2};存储器中位置为0x8008的内容赋给R1

;存储器中位置为0x800C的内容赋给R2

6.[0x9000-0x9003]=0x12345678, R0=0x00000000, R1=0x11112222 R2=0x00009000;

执行 SWP R0, R1, [R2]; R0=? R1=? R2=?[R2]单元字数据=?

答:R0=0x12345678;R1=0x11112222;R2=0x00009000;[R2]的值0x11112222。

说明:这里进行交换的是寄存器R0和以R2内容为地址的存储器

中的值。

执行 SWPB R0, R1, [R2]; R0=? R1=? R2=?[R2]字节数据=?

答:R0=0x00000078;R1=0X11112222;R2=0x00009000;[R2]的值为0x00000022。

本文来源:https://www.bwwdw.com/article/msqw.html

Top