chapter4ARM7TDMI汇编语言程序设计.pptx
《chapter4ARM7TDMI汇编语言程序设计.pptx》由会员分享,可在线阅读,更多相关《chapter4ARM7TDMI汇编语言程序设计.pptx(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、12023/3/23第4章 目录q1.汇编语言的基本概念q2.ARM汇编程序的组成与结构q3.汇编语言程序设计的基本方法q4.汇编语言和C语言交叉编程第1页/共64页22023/3/23第4章 目录q1.汇编语言的基本概念q2.ARM汇编程序的组成与结构q3.汇编语言程序设计的基本方法q4.汇编语言和C语言交叉编程第2页/共64页32023/3/234.1 汇编语言的基本概念 u语言语言 -信息的传播载体。信息的传播载体。u计算机语言计算机语言 -计算机可以识别、理解的语言。计算机可以识别、理解的语言。计算机语言的用途 :描述操作和数据。数据-用于描述问题模型;操作-用于描述问题处理方法和步骤
2、;第3页/共64页42023/3/234.1 汇编语言的基本概念 程程序序设设计计语语言言是是专专门门为为计计算算机机编编程程所所配配置置的的语语言言。它它们们按按照照形形式式与与功功能能的的不不同同可可分为三类,即机器语言、汇编语言和高级语言。分为三类,即机器语言、汇编语言和高级语言。1.1.机器语言机器语言 机机器器语语言言(Machine Machine LanguageLanguage)是是由由0 0和和1 1二二进进制制代代码码表表示示和和存存储储的的指指令令与与数数据据。它它的的特特点点是是能能被被机机器器直直接接识识别别与与执执行行;程程序序所所占占内内存存空空间间较较少少。其其
3、缺缺点点是是难难认认、难记、难编、易错。难记、难编、易错。第4页/共64页52023/3/232.2.汇编语言汇编语言 汇编语言(汇编语言(Assembly LanguageAssembly Language)是一种面向)是一种面向物理层操作的计算机语言,是一种采用助记符表示物理层操作的计算机语言,是一种采用助记符表示指令的程序设计语言;指令的程序设计语言;汇编语言中使用汇编语言中使用助记符助记符来表示指令的操作码和来表示指令的操作码和操作数,用操作数,用标号或符号标号或符号代表地址、常量或变量。代表地址、常量或变量。从机器角度看:汇编语言是一种面向物理层操作的计算机语言。不同的处理器类型,具
4、有不同的汇编语言。使用汇编语言编写程序能够直接利用硬件系统的特性(如寄存器、标志、中断系统等),可直接对位、字节、字寄存器或存储单元、I/O端口进行处理,同时也能直接使用CPU指令系统提供的各种寻址方式,编制出高质量的程序,这样的程序不但占用内存空间少,而且执行速度快。第5页/共64页62023/3/232.汇编语言-源程序示例 AREA Init,CODE,READONLY ENTRYStart LDR R0,=0 x40000500 MOV R1,#0 x55 STR R1,R0 LDR R0,=0 x40000504 MOV R1,#0 xAA STR R1,R0 END第6页/共64页
5、72023/3/232.汇编语言-上机过程 设计、编辑汇编语言源程序;汇编、连接、下载到目标系统;调试运行;第7页/共64页82023/3/233.高级语言高级语言 高级语言(高级语言(High Level LanguageHigh Level Language)是脱离具体机器(即独立于机器)的通用语)是脱离具体机器(即独立于机器)的通用语言,不依赖于特定计算机的结构与指令系统。言,不依赖于特定计算机的结构与指令系统。第8页/共64页92023/3/23第4章 目录q1.汇编语言的基本概念q2.ARM汇编程序的组成与结构q3.汇编语言程序设计的基本方法q4.汇编语言和C语言交叉编程第9页/共6
6、4页102023/3/234.2 ARM汇编程序的组成与结构;文件名:文件名:TEST1.S;功能:实现字符串拷贝功能功能:实现字符串拷贝功能;说明:使用说明:使用ARMulate软件仿真调试软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段声明代码段Example1 num EQU 20 ;设置拷贝字的个数设置拷贝字的个数 ENTRY ;标识程序入口标识程序入口 CODE32 ;声明声明32位位ARM指令指令STARTLDRR0,=src ;R0指向源数据块指向源数据块LDRR1,=dst ;R1指向目的数据块指向目的数据块MOVR2,#num ;R2需要拷贝的
7、数据个数需要拷贝的数据个数 wordcopyLDRR3,R0,#4;从源数据块中取一个字,放入从源数据块中取一个字,放入R3中,中,;R0=R0+4STRR3,R1,#4;将将R3中的数据存入中的数据存入R1指向的存储指向的存储;单元中,单元中,R1=R1+4SUBSR2,R2,#1;R2计数器减计数器减1BNEwordcopy;如果如果R2不为不为0,则转向,则转向wordcopy处处使用“;”进行注释标号顶格写程序代码段第10页/共64页112023/3/23stopMOVR0,#0 x18;程序运行结束返回编译器调试环境程序运行结束返回编译器调试环境LDRR1,=0 x20026SWI0
8、 x123456 AREA BlockData,DATA,READWRITE;数据段的名字数据段的名字BlockDataSrcDCD1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4DstDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0AREA|.extra|,NOINIT,READWRITE;未初始数据段的名字未初始数据段的名字.extradataSPACE1024END;文件结束文件结束 声明文件结束第11页/共64页122023/3/234.2 ARM汇编程序的组成与结构 u段:ARM汇编程序由段组成(程序段、数据段);段是
9、由汇编器伪指令AREA定义的相对独立程序块;段的属性:READONLY(只读)或READWRITE(读写)分别用于定义一个代码段或数据段;第12页/共64页132023/3/234.2 ARM汇编程序的组成与结构 u标识符(标号):(用途)用来表示指令的地址、数据的地址、变量、过程名和常量;(组成)标号是一个自行设计的字母数字串,通常以字母开头,由字母、数字、下划线等组成;(注意1)标号不能与寄存器名、指令助记符、伪指令(操作)助记符等“关键字”同名;(注意2)标号必须在一行的开头书写,不能留空格;第13页/共64页142023/3/234.2.1 汇编器伪指令 ARM汇编语言程序中,有一些特
10、殊的指令助记符,称为汇编器伪指令。它们无论表示形式或其在程序中所处的位置,都与指令相似,但二者之间有着重要的区别。指令是供CPU执行的操作命令,每条指令对应CPU的一种特定操作,在用户代码运行期间执行;而汇编器伪指令是供汇编器处理的命令,在汇编过程中由汇编器进行处理,例如定义数据、分配存储区、定义段、定义宏等;汇编以后,汇编器伪指令不产生与之对应的目标代码。第14页/共64页152023/3/234.2.1 汇编器伪指令AREACODE16、CODE32ENTRYENDEQUDCB、DCW、DCDSPACELTORGALIGN第15页/共64页162023/3/234.2.1 汇编器伪指令-A
11、REA用途:段声明;格式:AREA,其中:段名-用户定义的标识符;段属性-CODE/DATA读写属性-READONLY/READWRITE第16页/共64页172023/3/23;文件名:文件名:TEST1.S;功能:实现字符串拷贝功能功能:实现字符串拷贝功能;说明:使用说明:使用ARMulate软件仿真调试软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段声明代码段Example1 num EQU 20 ;设置拷贝字的个数设置拷贝字的个数 ENTRY ;标识程序入口标识程序入口 CODE32 ;声明声明32位位ARM指令指令STARTLDRR0,=src ;R0
12、指向源数据块指向源数据块LDRR1,=dst ;R1指向目的数据块指向目的数据块MOVR2,#num ;R2需要拷贝的数据个数需要拷贝的数据个数 wordcopyLDRR3,R0,#4;从源数据块中取一个字,放入从源数据块中取一个字,放入R3中,中,;R0=R0+4STRR3,R1,#4;将将R3中的数据存入中的数据存入R1指向的存储指向的存储;单元中,单元中,R1=R1+4SUBSR2,R2,#1;R2计数器减计数器减1BNEwordcopy;如果如果R2不为不为0,则转向,则转向wordcopy处处第17页/共64页182023/3/23stopMOVR0,#0 x18;程序运行结束返回编
13、译器调试环境程序运行结束返回编译器调试环境LDRR1,=0 x20026SWI0 x123456 AREA BlockData,DATA,READWRITE;数据段的名字数据段的名字BlockDataSrcDCD1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4DstDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0AREA|.extra|,NOINIT,READWRITE;未初始数据段的名字未初始数据段的名字.extradataSPACE1024END;文件结束文件结束 第18页/共64页192023/3/234.2.1 汇编器伪
14、指令-CODE16/32用途:声明后续行是16位的Thumb或是32位的ARM指令;格式:CODE16(CODE32)代码示例:code16 add r0,r1 ;Thumb指令 code32 add r0,r1 ;ARM指令第19页/共64页202023/3/23;文件名:文件名:TEST1.S;功能:实现字符串拷贝功能功能:实现字符串拷贝功能;说明:使用说明:使用ARMulate软件仿真调试软件仿真调试 AREAExample1,CODE,READONLY ;声明代码段声明代码段Example1 num EQU 20 ;设置拷贝字的个数设置拷贝字的个数 ENTRY ;标识程序入口标识程序入
15、口 CODE32 ;声明声明32位位ARM指令指令STARTLDRR0,=src ;R0指向源数据块指向源数据块LDRR1,=dst ;R1指向目的数据块指向目的数据块MOVR2,#num ;R2需要拷贝的数据个数需要拷贝的数据个数 wordcopyLDRR3,R0,#4;从源数据块中取一个字,放入从源数据块中取一个字,放入R3中,中,;R0=R0+4STRR3,R1,#4;将将R3中的数据存入中的数据存入R1指向的存储指向的存储;单元中,单元中,R1=R1+4SUBSR2,R2,#1;R2计数器减计数器减1BNEwordcopy;如果如果R2不为不为0,则转向,则转向wordcopy处处第2
16、0页/共64页212023/3/234.2.1 汇编器伪指令-ENTRY用途:声明程序的入口,编译程 序会把这个入口的地址定义为系统复位后的程序的起始点;格式:ENTRY代码示例:AREA Init,CODE,READONLY ENTRY CODE32Start LDR R0,=0 x40000500 LDR R1,#0 xFF STR R1,R0 END第21页/共64页222023/3/234.2.1 汇编器伪指令-END用途:声明汇编源程序的结束(末行);格式:END代码示例:AREA Init,CODE,READONLY ENTRYCODE32Start LDR R0,=0 x3FF5
17、000 LDR R1,#0 xFF STR R1,R0 END第22页/共64页232023/3/234.2.1 汇编器伪指令-EQU用途:声明程序的入口;格式:EQU代码示例:AREA Init,CODE,READONLYZQL_V EQU 0 x40000500 ENTRYCODE32Start LDR R0,=ZQL_V LDR R1,#0 xFF STR R1,R0 END第23页/共64页242023/3/234.2.1 汇编器伪指令-DCB用途:在程序存储区预存字节数据;格式:DCB 代码示例:AREA Init,CODE,READONLYZQL_DB DCB 0 x01,0 x0
18、4,0 x09,0 x10,0 x19 ENTRYCODE32Start LDR R0,=ZQL_DB LDR R2,R0,R1 END备注:DCB也可用“=”代替;第24页/共64页252023/3/234.2.1 汇编器伪指令-DCW用途:在程序存储区预存半字数据(2B);格式:DCW 代码示例:AREA Init,CODE,READONLYZQL_DW DCW 0 x01,0 x04,0 x09,0 x10,0 x19 ENTRYCODE32Start LDR R0,=ZQL_DW LDR R2,R0,R1,LSL#1 END备注:DCW预存的数据在存储器中半字对齐存放;第25页/共64
19、页262023/3/234.2.1 汇编器伪指令-DCD用途:在程序存储区预存字数据(4B);格式:DCD 代码示例:AREA Init,CODE,READONLYZQL_DD DCD 0 x01,0 x04,0 x09,0 x10,0 x19 ENTRYCODE32Start LDR R0,=ZQL_DD LDR R2,R0,R1,LSL#2 END备注:DCD预存的数据在存储器中字对齐存放;DCD也可用“&”代替;第26页/共64页272023/3/234.2.1 汇编器伪指令-SPACE用途:在存储区预留初值为0 x00的空间;格式:SPACE 代码示例:AREA Init,CODE,R
20、EADONLYZQL_DD DCD 0 x01,0 x04,0 x09,0 x10,0 x19 ENTRYCODE32Start LDR R0,=ZQL_DD LDR R2,R0,R1,LSL#2 Buff SPACE 4096 END第27页/共64页282023/3/234.2.1 汇编器伪指令-LTORG用途:声明一个文字池的位置;格式:LTORG文字池的起源与应用:用于预存放任何32bit的数据常量,供LDR加载指令使用,实现对任意立即数的访问;解释:立即数包含在32bit的指令码中,必须是8位图立即数,这就限制了立即数的取值;ARM汇编语言提供了LDR加载指令附加文字池的方法,文字池
21、中可以存放任意的32bit数,LDR加载指令相对寻址文字池,以实现对任意立即数的访问。第28页/共64页292023/3/23汇编过程中,汇编器会默认地在每一个程序段的末尾填加一个文字池。需要注意的是,文字池不能远离文字池使用者(LDR指令),因为LDR指令的寻址范围是指令位置的前后4KB。如果用户程序比较大,则可能使程序段的末尾超出4KB范围,此时需要在程序中的适当位置,使用LTORG伪指令显式声明文字池。一般总可以在LDR伪指令前后4KB的范围内找到分支指令,文字池可声明在分支(B)指令之后的紧邻位置,不会影响代码的正常执行,因为B指令总是会将程序的执行转移到其它地方的。第29页/共64页
22、302023/3/23u缺省文字池AREA default,CODE,READONLYENTRYCODE32startLDRR1,=0 xABCDEFLDRR2,=0 x101ADDR3,R1,R2B ;汇编器默认的文字池位置 ;常数0 xABCDEF、0 x101即存放于此END 地址 机器指令码 汇编指令 注释start0 xe59f1008ldrr1,0 x00008010;=#0 x00abcdef000080040 xe59f2008ldrr2,0 x00008014;=#0 x00000101000080080 xe0813002addr3,r1,r20000800c0 xeaff
23、fffeb0 x800c;(start+0 xc)000080100 x00abcdefdcd0 x00abcdef.000080140 x00000101dcd0 x00000101.第30页/共64页312023/3/23u自定义文字池AREA default,CODE,READONLYENTRYCODE32startLDR R1,=0 xABCDEF ;文字池使用处LDR R2,=0 x101ADD R3,R1,R2B branch ;其它汇编代码branch ;其它汇编代码other SPACE 4096END ;默认文字池位置超远!?汇编器缺省文字池位于程序段的末尾,如果程序段较长,
24、这个缺省的文字池和LDR指令的距离有可能超出了4KB,那么LDR指令不能正确加载数据。AREA default,CODE,READONLYENTRYCODE32startLDR R1,=0 xABCDEF ;文字池使用者LDR R2,=0 x101ADD R3,R1,R2B branchLTORG;显示声明文字池位置显示声明文字池位置;其它汇编代码branch;其它汇编代码other SPACE 4096ENDstart0 xe59f1008ldrr1,0 x00008010;=#0 x00abcdef000080040 xe59f2008ldrr2,0 x00008014;=#0 x0000
25、0101000080080 xe0813002addr3,r1,r20000800c0 xea000001bbranch000080100 x00abcdefdcd0 x00abcdef.000080140 x00000101dcd0 x00000101.branch0 xe1a01001movr1,r10000801c0 xeafffff7bstartother0 x00000000dcd0 x00000000 .000080240 x00000000dcd0 x00000000 .000080280 x00000000dcd0 x00000000 .第31页/共64页322023/3/23
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- chapter4ARM7TDMI 汇编语言 程序设计
限制150内