试验二ARM汇编语言程序设计

合集下载

基于arm的汇编实验报告

基于arm的汇编实验报告

竭诚为您提供优质文档/双击可除基于arm的汇编实验报告篇一:汇编实验报告实验一(1)熟悉汇编语言程序调试环境及顺序程序设计一、实验目的及要求:1.学习及掌握汇编语言源程序的书写格式和要求,明确程序中各段的功能和相互之间的关系。

2.学会使用eDIT、mAsm、LInK、Debug等软件工具。

3.熟练掌握在计算机上建立、汇编、连接、调试及运行程序的方法。

二、熟悉汇编语言程序调试环境1.汇编语言源程序的建立本例中给出的程序是要求从内存中存放的10个无符号字节整数数组中找出最小数,将其值保存在AL寄存器中。

设定源程序的文件名为Abc。

DATAsegmenTbuFDb23h,16h,08h,20h,64h,8Ah,91h,35h,2bh,7Fh cneQu$-buFDATAenDscoDesegmenTAssumecs:coDe,Ds:DATAsTART:pushDsxoRAx,AxpushAxmoVAx,DATAmoVDs,AxmoVbx,oFFseTbuFmoVcx,cnDeccxmoVAL,[bx]IncbxLp:cmpAL,[bx]JbenexTmoVAL,[bx]nexT:IncbxDeccxJnZLpmoVAh,4chInT21hcoDeenDsenDsTART键入以下命令:c:\>eDITAbc.Asm此时屏幕的显示状态如图1所示。

1图1用eDIT编辑Abc.Asm程序窗口程序输入完毕后一定要将源程序文件存入盘中,以便进行汇编及连接,也可以再次调出源程序进行修改。

2.将源程序文件汇编成目标程序文件一般情况下,mAsm汇编程序的主要功能有以下3点:(1)检查源程序中存在的语法错误,并给出错误信息。

(2)源程序经汇编后没有错误,则产生目标程序文件,扩展名为.obJ。

(3)若程序中使用了宏指令,则汇编程序将展开宏指令。

源程序建立以后,在Dos状态下,采用宏汇编程序mAsm 对源程序文件进行汇编,其操作过程如图2所示。

第4章ARM汇编语言程序设计.

第4章ARM汇编语言程序设计.

第4章ARM汇编语言程序设计本章介绍如何编写ARM和thumb汇编语言程序。

同时介绍ARM汇编编译器armasm的使用方法。

4.1伪操作ARM 汇编语言源程序中语句由指令、伪操作和宏指令组成。

在ARM中伪操作称为derective,这里为保持和国内在IBM PC汇编语言中对名词翻译的一致性derective称为伪操作;同样在ARM中宏指令被称为pseudo-instructlon,这里将其称为宏指令,宏指令也是通过伪操作定义的。

本节介绍伪操作和宏指令。

伪操作不像机器指令那样在计算机运行期间由机器执行,它是在汇编程序肘源程序汇编期间由汇编程序处理的。

宏是一段独立的程序代码。

在程序中通过宏指令调用该宏。

当程序被汇编时,汇编程序将对每个宏调用作展开,用宏定义体取代源程序中的宏指令。

本节介绍以下类型的ARM伪操作和宏指令。

●符号定义(Symbol definition伪操作。

●数据定义(Data definition)伪操作。

●汇编控制(Assembly control)伪操作。

●框架描述(Frame description)伪操作。

●信息报告(Reporting)伪操作。

●其他(Miscellaneous)伪操作。

4.1.1符号定义伪操作符号定义(Symbol definition)伪操作用于定义ARM汇编程序中的变量,对变量进行赋值以及定义寄存器名称。

包括以下伪操作。

●GBLA、GBLL及GBLS声明全局变量。

●LCLA.LcLL及LCLS 声明局部变量。

●SETA.SETL及SETS 给变量赋值。

●RLIST为通用寄存器列表定义名称。

●CN为协处理器的寄存器定义名称。

●CP为协处理器定义名称。

●DN及SN为VFP的寄存器定义名称。

FN为FPA的浮点寄存器定义名称。

1 GBLA GBLL及GBLSGBLA GBLL及GBLS伪操作用于声叫个ARM程序中的全局变量,并将其初始化。

GBLA伪操作声明一个全局的算术变量,并将其初始化成0。

02实验二 ARM汇编语言程序设计

02实验二 ARM汇编语言程序设计

实验二 ARM汇编语言程序设计一、实验目的1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程2.掌握ARM汇编指令二、实验设备1. EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆。

2. PC操作系统WIN98或WIN2000或WINXP, ADS1.2集成开发环境,仿真器驱动程序。

三、汇编语言简介1.ARM汇编的一些简要的书写规范ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。

ARM汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。

在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。

注释使用“;”号,注释的内容由“;”号起到此行结束,注释可以在一行的顶格书写。

详细的汇编语句及规范请参照ARM汇编的相关书籍、文档。

2. ARM汇编语言程序的基本结构在ARM汇编语言程序中,是以程序段为单位来组织代码。

段是相对独立的指令或数据序列,具有特定的名称。

段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。

一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。

可执行映像文件通常由以下几部分构成:◆一个或多个代码段,代码段为只读属性。

◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。

◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。

链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。

源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。

3. 简单的小例子下面是一个代码段的小例子AREA Init,CODE,READONLYENTRYLDR R0, =0x3FF5000LDR R1, 0x0fSTR R1, [R0]LDR R0, =0x3F50008LDR R1, 0x1STR R1, [R0]……END在汇编程序中,用AREA指令定义一个段,并说明定义段的相关属性,本例中定义了一个名为Init的代码段,属性为只读。

实验二_ARM汇编语言程序设计

实验二_ARM汇编语言程序设计

实验二ARM汇编语言程序设计实验目的1、了解ARM汇编语言程序的结构特点2、了解ARM汇编语言程序的编写方法3、掌握用ARM汇编语言设计简单程序实验仪器设备及软件ARM实验箱,计算机,ADS程序开发软件实验原理1、存储空间的格式ARM920将存储空间视为从0开始由字节组成的线性集合,字节0-3中保存了第一个字,字节4-7中保存了第二个字,依此类推。

字节还可以按小端格式或大端格式排列。

ARM实验箱中存储器的配置见附录C。

2、ARM的寄存器ARM状态下任何时刻都可以看到16个通过寄存器(r0-r15),1或2个状态寄存器(CPSR,SPSR),在特权模式下会切换到具体模下的寄存器组。

每个寄存器都是32位的,并且每个通用寄存器都可以作为数据处理的源数据或目标数据寄存器。

因此可以编写出更精简的程序。

3、ARM指令的条件执行状态寄存器中的N,Z,C,V是数据处理指令影响的标志。

几乎每条ARM指令可以根据状态位或状态位的逻辑运算有条件执行。

条件执行的指令后缀参考教材。

4、桶形移器ARM的桶形移位器,使ARM指令的中第二个操作数非常录活。

利用移位器,一条ARM 指令可以完成更多功能。

移位操作有:LSL 逻辑左移LSR 逻辑右移ASL 算术左移ASR 算术右移ROR 循环右移RRX 带扩展循环右称实验内容1、把内存中ramaddr开始的ramword个字清零(1)用后变址法ramaddr equ 0x31000000ramword equ 64clrrammov r0,#0mov r1,#ramwordldr r2,=ramaddrclrram1str r0,[r2],#4subs r1,r1,#1bne clrram1mov pc,lrLTORG(2)用前变址法clrrambakmov r0,#0mov r1,#ramwordldr r2,=ramaddr-4clrram2str r0,[r2,#4]!subs r1,r1,#1bne clrram2mov pc,lrLTORG2、把寄存器中,r0-r12的32位无符号32位数进行求和,和的低32位保存在r1中,高32位保存在r0中。

第四章_ARM指令系统实验

第四章_ARM指令系统实验

第四章ARM指令系统实验实验一、ARM汇编语言程序实验一、实验目的1.掌握ARM7TDMI汇编语言指令的用法,能编写简单的ARM汇编语言程序。

2.掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。

二、实验设备硬件:PC机软件:Windows98/XP/2000系统,ADS1.2集成开发环境三、实验内容使用LDR指令读取0x400031000上的数据,将数据加1,若结果小于10,则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址。

使用ADS1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(Processor Registers )监视R0、R1的值,打开存储器窗口(Memory )监视0x400031000的值。

四、实验预习要求1.仔细阅读教材第四章中ARM指令系统的内容;2.熟悉ADS1.2工程编辑和AXD调试的内容。

五、实验步骤1.启动ADS1.2,使用ARM Executable Image工程模板建立一个工程,工程名称ADS2。

2.建立ARM汇编源程序LJZ2.S,编写实验程序,然后添加到工程中。

3.设置工程连接地址RO Base 为0x400000000,RW Base 为0x400030000。

设置调试入口地址Image entry point 为0x400000000。

4.编译连接工程,选择[Project]-〉[Debug],启动AXD进行软件仿真调试。

5.打开寄存器窗口((Processor Registers )选择Current项监视R0、R1的值,打开存储器窗口(Memory )设置观察地址为0x400031000,显示方式Size为32位,监视0x400031000的值。

6.可以单步运行程序,可以设置断点/取消断点,或者全速运行程序,停止程序运行,调试时观察寄存器和0x400031000的值,运行结果分别如图4-1到4-7所示。

图4-1 Memory 窗口设置图4-2 Memory 窗口显示格式设置图4-3 Register 窗口设置图4-4 单步调试开始窗口画面图4-5 单步调试第一循环画面图4-6 单步调试第三循环画面图4-7 单步调试第十次循环结果六、实验参考程序程序清单4-1 ARM指令实验程序LJZ2.S; 文件名:LJZ2.S; 功能:使用LDR、STR指令对变量NumCount进行加1操作; 说明:使用ARMulate软件仿真调试NumCount EQU 0x40003100 ; 定义变量NumCountAREA Example2,CODE,READONLYENTRYMAIN LDR R1,=NumCount ;使用LDR伪指令装载NumCount的地址;到R0。

ARM汇编语言程序设计

ARM汇编语言程序设计
13
使用局部标号的例子:
例1 无作用范围字符 01 SUBS r0,r0,#1
BNE %B 01
;每次循环使r0=r0-1 ;跳转到01标号去执行
例2 作用范围字符为NAME
ROUT NAME
; NAME作用范围
01NAME SUBS r0,r0,#1
;每次循环使r0=r0-1
BNE %B 01NAME ;跳转到01NAME标号去执行
Labeladd add r0,r0,r1
;
Str1
SETS
“This is a string.”
BKPT ;断点
标签: welcomefun , strarm , Labeladd, Str1
指令/伪操作/伪指令: STMFD , DCB , add , SETS
操作数:其他部分
9
注意: ARM程序中,指令、伪指令、伪操作、寄存 器助记符可以全部为大写或小写,但大小写不能混合 使用。
; “Welcom to ARM world!”字符串
LDMFD
sp!,{pc}
;恢复寄存器值
7
Adrstrarm ;adrstrarm标签
DCD strarm ;保存strarm的地址
AREA constdatasec, DATA, READONLY,ALIGN=0
;数据段,名称为constdatasec, 属性为只读
ENDP ;函数main结束
EXPORT main
;导出main函数供外部调用
;引入三个C运行时库函数和ARM库
IMPORT _main
IMPORT __main
IMPORT _printf
IMPORT ||Lib$$Request$$armlib||, WEAK

arm汇编语言程序设计

arm汇编语言程序设计

ARM汇编语言程序设计
6、 DCQ(或DCQU)
语法格式: 标号 DCQ(或DCQU) 表达式 作用: DCQ(或DCQU)伪指令用于分配一片以8个字节为单位的连续存 储区域并用伪指令中指定的表达式初始化。 用DCQ分配的存储单元是字对齐的,而用DCQU分配的存储单元 并不严格字对齐。 使用示例: DataTest DCQ 100 ;分配一片连续的存储单元并初始化 为指定的值。
ARM汇编语言程序设计
1、IF、ELSE、ENDIF
语法格式: IF 逻辑表达式 指令序列1 ELSE 指令序列2 ENDIF 作用: IF、ELSE、ENDIF伪指令能根据条件的成立与否决定是否执行 某个指令序列。当IF后面的逻辑表达式为真,则执行指令序列1, 否则执行指令序列2。其中,ELSE及指令序列2可以没有,此时,当 IF后面的逻辑表达式为真,则执行指令序列1,否则继续执行后面 的指令。 IF、ELSE、ENDIF伪指令可以嵌套使用。
ARM汇编语言程序设计
1、 DCB
语法格式: 标号 DCB 表达式 作用: DCB伪指令用于分配一片连续的字节存储单元并用伪指令中指 定的表达式初始化。其中,表达式可以为0~255的数字或字符串。 DCB也可用“=”代替。 使用示例: Str DCB “This is a test!” ;分配一片连续的字节 存储单元并初始化。
ARM汇编语言程序设计
1、IF、ELSE、ENDIF 使用示例: GBLL Test ; 声明一个全局的逻辑变量,变量名为Test ⋯⋯ IF Test = TRUE 指令序列1 ELSE 指令序列2 ENDIF
ARM汇编语言程序设计
5、 DCFS(或DCFSU)
语法格式: 标号 DCFS(或DCFSU) 表达式 作用: DCFS(或DCFSU)伪指令用于为单精度的浮点数分配一片连续的字 存储单元并用伪指令中指定的表达式初始化。每个单精度的浮点数占据 一个字单元。 用DCFS分配的字存储单元是字对齐的,而用DCFSU分配的字存储单 元并不严格字对齐。 使用示例: FDataTest DCFS 2E5,-5E-7 ;分配一片连续的字存储单元 并初始化为指定的单精度数。

ARM汇编语言程序设计

ARM汇编语言程序设计

始化。
DCFD(DCFDU)用于为双精度的浮点数分配一片连续的字存储单
元并用指定 的数据初始化。
DCFS(DCFSU) 用于为单精度的浮点数分配一片连续的字存储单元并
用指定 的数据初始化。
DCQ(DCQU) 用于分配一片以8字节为单位的连续的存储单元并用
指定的数据初始化。
SPACE
用于分配一片连续的存储单元
ARM汇编语言程序设计
4、 RLIST
语法格式: 名称 RLIST {寄存器列表}
作用: RLIST伪指令可用于对一个通用寄存器列表定义名称,使用该
伪指令定义的名称可在ARM指令LDM/STM中使用。在LDM/STM指令中, 列表中的寄存器访问次序为根据寄存器的编号由低到高,而与列表 中的寄存器排列次序无关。
指令仅在汇编过程中起作用,一旦汇编
结束,伪指令的使命就完成
ARM汇编语言程序设计
伪指令的分类
符号定义伪指令 数据定义伪指令 汇编控制伪指令和宏指令 其他伪指令。
ARM汇编语言程序设计
符号定义(Symbol Definition)伪指令:
符号定义伪指令用于定义ARM汇编程序中的变量、 对变量赋值以及定义寄存器的别名等操作。常见的符号 定义伪指令有如下几种: — 用于定义全局变量的GBLA、GBLL和GBLS。 — 用于定义局部变量的LCLA、LCLL和LCLS。 — 用于对变量赋值的SETA、SETL、SETS。 — 为通用寄存器列表定义名称的RLIST。
ARM汇编语言程序设计
1、 GBLA、GBLL和GBLS
语法格式: GBLA(GBLL或GBLS) 全局变量名
作用: GBLA、GBLL和GBLS伪指令用于定义一个ARM程序中的全局变量,并 将其初始化。其中: GBLA伪指令用于定义一个全局的数字变量,并初始化为0; GBLL伪指令用于定义一个全局的逻辑变量,并初始化为F(假); GBLS伪指令用于定义一个全局的字符串变量,并初始化为空;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

STR
R1, [R0]


END
在汇编程序中,用 AREA 指令定义一个段,并说明定义段的相关属性,本例中定义
了一个名为 Init 的代码段,属性为只读。ENTRY 伪指令标识程序的入口,程序的
末尾为 END 指令,该伪指令告诉编译器源文件的结束,每一个汇编文件都要以 END
结束。
下面是一个数据段的小例子
当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形
成一个可执行文件。可执行映像文件通常由以下几部分构成:
◆ 一个或多个代码段,代码段为只读属性。
◆ 零个或多个包含初始化数据的数据段,数据段的属性为可读写。
◆ 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位
实验二 ARM 汇编语言程序设计
一、实验目的
1. 了解 ARM 汇编语言的基本框架,学会使用 ARM 的汇编语言编程 2. 掌握 ARM 汇编指令
二、实验设备
1. EL-ARM-830 教学实验箱,PentiumII 以上的 PC 机,仿真器电缆。 2. PC 操作系统 WIN98 或 WIN2000 或 WINXP, ADS1.2 集成开发环境,仿真器驱动程序。
2
MOV sp,#0x400 blockcopy
MOVS r3,r2,LSR #3 BEQ copywords
STMFD sp!,{r4-r11} octcopy
LDMIA r0!,{r4-r11} STMIA r1!,{r4-r11} SUBS r3,r3,#1 BNE octcopy
LDMFD sp!,{r4-r11}
AREA DataArea, DATA, NOINIT, ALIGN=2
DISPBUF SPACE
Байду номын сангаас
200
RCVBUF
SPACE
200


DATA 为数据段的标识。
四、实验内容
1、理解下列程序,新建工程,加入下面的程序,并观察实验结果。 实验 A:
AREA EXAMPLE, CODE, READONLY x EQU 45 y EQU 64 stack_top EQU 0x1000
三、汇编语言简介
1. ARM 汇编的一些简要的书写规范
ARM 汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有
指令均不能顶格书写。ARM 汇编对标识符的大小写敏感,书写标号及指令时字母大
小写要一致。在 ARM 汇编中,ARM 指令、伪指令、寄存器名等可以全部大写或者全
部小写,但不要大小写混合使用。注释使用“;”号,注释的内容由“;”号起到此
行结束,注释可以在一行的顶格书写。
详细的汇编语句及规范请参照 ARM 汇编的相关书籍、文档。
2. ARM 汇编语言程序的基本结构
在 ARM 汇编语言程序中,是以程序段为单位来组织代码。段是相对独立的指令
或数据序列,具有特定的名称。段可以分为代码段的和数据段,代码段的内容为执
行代码,数据段存放代码运行时所需的数据。一个汇编程序至少应该有一个代码段,
copywords ANDS r2,r2,#7 BEQ stop
wordcopy LDR r3,[r0],#4 STR r3,[r1],#4 SUBS r2,r2,#1 BNE wordcopy
stop B stop
AREA Bdata, DATA, READWRITE src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
ENTRY MOV sp,#stack_top MOV r0,#x ATR r0,[sp] MOV r0,#y LDR r1,[sp] ADD r0,r0,r1 STR r0,[sp] Stop B Stop END
实验 B AREA EXAMPLE, CODE, READONLY Num equ 20 start LDR r0, =src LDR r1, ==dst MOV r2, #Num
END
2、新建工程,并自行编写汇编程序,分别使用 LDR、STR、LDMIA、STMIA 操作,实现对 某段连续存储单元写入数据,并观察操作结果。
3
置。源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定
相同。
3. 简单的小例子
下面是一个代码段的小例子
AREA Init,CODE,READONLY
ENTRY
LDR
R0, =0x3FF5000
LDR
R1, 0x0f
STR
R1, [R0]
1
LDR
R0, =0x3F50008
LDR
R1, 0x1
相关文档
最新文档