文档详情

第3章 ARM寻址方式与指令系统.ppt

发布:2017-06-04约3.68万字共129页下载文档
文本预览下载声明
* 举例 例1:写出执行以下计算的指令序列,其中,X,Y,Z,R,W 均为32位无符号数,两数乘积不超出32位数范围。 (1) Z?W-(X+6)-(R+9) (2) Z?(W*X)/16 例2: 假定R0、R1中的内容为带符号数,R2、R3中的内容为无符号数,写出指令实现以下判断: 若R3的内容超过R2的内容,则转去执行EXCEED. 若R1的内容超过R0的内容,则转去执行EXCEED. 若R2的内容等于零,则转去执行ZERO. 若R1的内容和R2的内容相等,则转去执行EQU. *   内容提要 思考题 Thumb指令集 ARM指令集 ARM指令格式和寻址方式 ARM编程模型 * 思考题 1.编写1+2+3+……+100的汇编程序。 2.如何实现128位数的减法,举例说明。 3.将存储器中起始地址M1处的4个字数据,移动到地址M2处。 4.参考CPSR寄存器中各标志位的含义,使处理器工作于系统模式。 5.用跳转指令实现两段程序间,来回切换。 * LDR字数据加载指令 地址addr可以是一个简单的值、或一个偏移量、或者是一个被移位的偏移量。其寻址方式有以下几种: Rn是表示基址寄存器,Rm表示变址寄存器,index表示偏移量,为12位的无符号数。 LDR Rd,[Rn] ; 把内存中地址为Rn的字数据装入寄存器Rd中; LDR Rd,[Rn,Rm] ; 将内存中地址为Rn+Rm的字数据装入寄存器Rd中; LDR Rd,[Rn,#index] ; 将内存中地址为Rn+index的字数据装入寄存器Rd中; LDR Rd,[Rn,Rm,LSL#5] ;将内存中地址为Rn+Rm×32的字数据装入寄存器Rd; LDR Rd,[Rn,Rm] !; 将内存中地址为Rn+Rm的字数据装入寄存器Rd,并将新地址Rn+Rm写入Rn; LDR Rd,[Rn,#index] !;将内存中地址为Rn+index的字数据装入寄存器Rd,并将新地址Rn+index写入Rn; LDR Rd,[Rn,Rm,LSL#5]!;将内存中地址为Rn+Rm×32的字数据装入寄存器Rd,并将新地址Rn+Rm×32写入Rn LDR Rd,[Rn],Rm ;将内存中地址为Rn的字数据装入寄存器Rd,并将新地址Rn+Rm写入Rn; LDR Rd,[Rn],#index ;将内存中地址为Rn的字数据装入寄存器Rd,并将新地址Rn+index写入Rn; LDR Rd,[Rn],Rm,LSL#5;将内存中地址为Rn的字数据装入寄存器Rd,并将新地址Rn+Rm×32写入Rn。 * LDR字数据加载指令 也可从基址上减去偏移量: LDR R0, [R1, #-1]; 针对小端模式配置,字装载(LDR) 将生成一个字对齐的地址。使用一个非字对齐的地址将有不明显和未规定的结果。实际上不能使用 LDR 从一个非对齐的地址装载一个字。 不可以用装载或存储指令来修改CPSR。要装载一个被存储的‘状态’并正确的恢复它,使用: LDR R0, [Rbase]; MOVS R15, R0; * LDR字数据加载指令 LDR R1,[R0,R2,LSR#3]! LDR R1,[R0,-R2] LDR R1, [R0] LDR R1,[R0,#0x55] LDR R1, lable LDR R1, [R0],R2,LSL #3 ;将内存中地址为R0+R2/8的字数据装入寄存器R1,并将新地址R0+R2/8写入R0。 ;将内存中地址为R0-R2的字数据装入寄存器R1,R0的值不变。 ;将内存中地址为R0的字数据装入寄存器R1,R0的值不变。 ;将内存中地址为R0+0x55的字数据装入寄存器R1,R0的值不变。 ;将内存中lable处的字数据装入寄存器R1。 ;将内存中地址为R0的字数据装入寄存器R1,且R0=R0+R2/8。 * LDRB字节数据加载指令 2. LDRB字节数据加载指令: LDR{cond}B Rd,addr; 功能:同LDR指令,但该指令只是从内存读取一个8位的字节数据而不是一个32位的字数据,并将Rd的高24位清0。 可以在这些指令上使用条件执行。但要注意条件标志要先于字节标志,LDREQB Rx, addr (不是 LDRBEQ...)。 例如: LDRB R0,[R1]; 将内存中起始地址为R1的一个字节数据装入R0中(R0高24位清0) * STR字数据存储指令 3. STR字
显示全部
相似文档