首页 百科知识 汇编指令实验二

汇编指令实验二

时间:2022-10-27 百科知识 版权反馈
【摘要】:(2)软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP/7.ldr伪指令将一个32位的常数或者一个地址值读取到寄存器中.当需要读取到寄存器中的数据超过了mov或者mnv指令可以操作的范围时,可以使用ldr伪指令将该数据读取到寄存器中.在汇编编译器处理源程序时,如果该常数没有超过mov或者mnv可以操作的范围,则ldr指令被这两条指令中的一条所替代

5.2 ARM汇编指令实验二

5.2.1 实验目的

(1)通过实验掌握使用ldm/stm、b、bl等指令完成较为复杂的存储区访问和程序分支.

(2)学习使用条件码,加强对CPSR的认识.

5.2.2 实验设备

(1)硬件:PC.

(2)软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP/7.

5.2.3 实验内容

(1)熟悉开发环境的使用并完成一块存储区的拷贝.

(2)完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序.

5.2.4 本实验涉及的汇编指令语法及规则

(1)ldr.

ldr伪指令将一个32位的常数或者一个地址值读取到寄存器中.当需要读取到寄存器中的数据超过了mov或者mnv指令可以操作的范围时,可以使用ldr伪指令将该数据读取到寄存器中.在汇编编译器处理源程序时,如果该常数没有超过mov或者mnv可以操作的范围,则ldr指令被这两条指令中的一条所替代;否则,该常数将被放在最近的一个文字池(literal pool)内.同时,本指令被一条基于PC的ldr指令替代.语法格式:

ldr<register>,=<expression>

其中,expression为需要读取的32位常数;register为目标寄存器.示例:

ldr r1,=0xff

ldr r0,=0xfff00000

(2)adr.

adr指令将基于PC的地址值或者基于寄存器的地址值读取到寄存器中.在汇编编译器处理源程序时,adr伪指令被编译器替换成一条合适的指令.通常,编译器用一条add指令或者sub指令来实现该伪指令的功能.如果标号超出范围或者标号在同一文件(和同一段)内没有定义,则会产生一个错误.该指令不使用文字池(literal pool).语法格式:

adr<register>,<label>

其中,register为目标寄存器;label为基于PC或者寄存器的地址表达式.示例:

label1

  mov r0,#25

  adr r2,label1

(3)ltorg.

ltorg用于声明一个文字池.语法格式:

ltorg

5.2.5 实验操作步骤

(1)实验A.

①在\Keil\ARM\Examples\EduKit2410_for_MDK\3.2_asm2目录下建立文件夹并命名为Asm2_1,参考5.1.5小节实验的操作步骤建立一个新的工程,命名为AsmTest2_1.

②参考5.1.5小节实验的步骤和实验参考程序编辑输入源代码,保存文件为asm_code1.s(源代码可以参考光盘\software\EduKit2410_for_MDK\3.2_asm2\Asm2_1中的asm_code1.s文件).

③在Project workspace工作区中右击target1→Source Group 1,在弹出菜单中选择" Add file to Group'Source Group 1'",在随后弹出的文件选择对话框中,选择刚才建立的源文件asm_code1.s.

④把光盘\software\EduKit2410_for_MDK\3.2_asm2\Asm2_1目录中的DebugINRam.ini文件拷贝到\Keil\ARM\Examples\EduKit2410_for_MDK\3.2_asm2\Asm2_1目录下.选择菜单项Project→Option for Target…,将弹出工程设置对话框,如图5-7所示.在这个工程里只需把Linker选项页的配置对话框中的R/W Base改为0x30000000即可.其他设置与5.1.5小节实验中的工程配置相同.

⑤选择菜单项Project→Build target或快捷键F7,生成目标代码.

⑥选择菜单项Debug→Start/Stop Debug Session或快捷键Ctrl+F5,即可进入调试模式.这里使用的是μVision3IDE中的软件仿真器.

⑦选择菜单项Debug→run或F5,即可运行代码.

⑧打开memory窗口,观察地址0x30000058~0x30000094的内容与地址0x300000a8~0x300000E4的内容.

⑨单步执行程序并观察和记录寄存器与memory的值变化,注意观察步骤8里面的地址的内容变化,当执行stmfd,ldmfd,ldmia和stmia指令的时候,注意观察其后面参数所指的地址段或寄存器段的内容变化.

⑩结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM指令的使用.

img167理解和掌握实验后,完成实验练习题.

(2)实验B.

①参考5.1.5小节实验的操作步骤建立一个新的工程,命名为AsmTest2_2.

②参考5.1.5小节实验的步骤和实验参考程序编辑输入源代码,保存文件为asmcode2.s(如果存在,可以跳过此步骤).

③在Project workspace工作区中右击target1→Source Group 1,在弹出菜单中选择“Add file to Group‘Source Group 1’”,在随后弹出的文件选择对话框中,选择刚才建立的源文件asmcode2.s.

④参照实验A的步骤完成目标代码的生成与调试.

⑤理解和掌握实验后,完成实验练习题.

5.2.6 实验参考程序及流程图

(1)实验A.

img168

图5-12 实验A流程图

汇编程序

img169

img170

stop

img171

(2)实验B.

img172

图5-13 实验B流程图

汇编程序

img173

img174

stop

b stop

img175

img176

本节可使用5.1节的调试脚本文件.

5.2.7 练习题

1.打开开发板光盘中的启动文件,观察启动文件中复位异常的编写及Itorg的使用及其功能.

2.新建工程,并自行编写汇编程序,分别使用ldr、str、ldmia、stmia操作,实现对某段连续存储单元写入数据,并观察操作结果.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈