ARM汇编语言程序设计基础课件.ppt
《ARM汇编语言程序设计基础课件.ppt》由会员分享,可在线阅读,更多相关《ARM汇编语言程序设计基础课件.ppt(68页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、XUPT 嵌入式系统嵌入式系统 原理与应用原理与应用在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确第四章第四章 ARM汇编语言程序设计基础汇编语言程序设计基础 在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确目目 录录v4.1 ARM汇编语言的程序结构汇编语言的程序结构 v4.2 ARM汇编语言程序设计汇编语言程序设计 v4.3 C与汇编混合编程与汇编混合编程v本章小结本章小结 2在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出
2、的问题也很明确4.1 ARM汇编语言的程序结构汇编语言的程序结构v本章通过一个完整的本章通过一个完整的ARM汇编例子入手,给出了汇编例子入手,给出了ARM汇编程序的基本汇编程序的基本框架,并详细介绍了编写汇编程序常用的汇编器伪指令,具备了这些基框架,并详细介绍了编写汇编程序常用的汇编器伪指令,具备了这些基础知识,学生就能自己动手编写汇编程序。础知识,学生就能自己动手编写汇编程序。v4.1.1 一个简单的一个简单的ARM汇编程序例子汇编程序例子v4.1.2 汇编器伪指令汇编器伪指令v4.1.3 汇编语言的规范汇编语言的规范在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯
3、度,由浅入深,所提出的问题也很明确4.1.1 一个简单的一个简单的ARM汇编程序例子汇编程序例子4在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v一段完整的一段完整的ARM汇编语言程序,由若干个段组成,段可以分为代码段汇编语言程序,由若干个段组成,段可以分为代码段和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到和数据段,代码段的内容为执行代码,数据段存放代码运行时需要用到的变量。的变量。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v程序框架可抽象如下:程序
4、框架可抽象如下:AREA代码段名字代码段名字,CODE,READONLYENTRYCODE32;添加用户代码添加用户代码AREA数据段名字数据段名字,DATA,READWRITE;添加用户数据添加用户数据END在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v指令和汇编器伪指令的比较指令和汇编器伪指令的比较 指令语句:在汇编后能产生目标代码的语句,指令语句:在汇编后能产生目标代码的语句,CPU可以执行并能完可以执行并能完成一定的功能,例如成一定的功能,例如MOV,ADD等;等;汇编器伪指令:在汇编后不产生目标代码的语句,仅在汇编过程中
5、汇编器伪指令:在汇编后不产生目标代码的语句,仅在汇编过程中告诉汇编器如何汇编。汇编器伪指令的作用包括:定义数据、分配存储告诉汇编器如何汇编。汇编器伪指令的作用包括:定义数据、分配存储区、定义段、定义宏、定义子程序等。一旦汇编结束,它们的使命就完区、定义段、定义宏、定义子程序等。一旦汇编结束,它们的使命就完成了。成了。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确4.1.2 汇编器伪指令汇编器伪指令v在在 ARM 的汇编程序中,有如下几种汇编器伪指令:符号定义伪指令,的汇编程序中,有如下几种汇编器伪指令:符号定义伪指令,数据定义伪指令
6、,段定义伪指令,模块控制伪指令,汇编控制伪指令,数据定义伪指令,段定义伪指令,模块控制伪指令,汇编控制伪指令,宏处理伪指令等。宏处理伪指令等。1.段定义相关伪指令段定义相关伪指令AREA语法格式:语法格式:AREA段名段名 属性属性1,属性属性2,程序程序4-1中使用如下语句定义段:中使用如下语句定义段:AREA MAIN,CODE,READONLY;定义代码段,名字为定义代码段,名字为MAINAREA NUM,DATA,READWRITE;定义数据段,名字为定义数据段,名字为NUM在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确vA
7、REA伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,伪指令用于定义一个代码段或数据段。其中,段名若以数字开头,则该段名需用则该段名需用“|”括起来,如括起来,如|1_data|。属性字段表示该代码段。属性字段表示该代码段(或数据段)的相关属性,例如:(或数据段)的相关属性,例如:CODE(定义代码段),(定义代码段),DATA(定(定义数据段),义数据段),READONLY(只读),(只读),READWRITE(读写)。多个(读写)。多个属性用逗号分隔。属性用逗号分隔。v一个汇编程序至少应该有一个代码段,由具体的设计需求,也可由多个一个汇编程序至少应该有一个代码段,由具体的设计需求
8、,也可由多个代码段和数据段组成,多个段在程序汇编链接时最终形成一个可执行的代码段和数据段组成,多个段在程序汇编链接时最终形成一个可执行的映象文件。可执行映象文件通常由以下几部分构成:映象文件。可执行映象文件通常由以下几部分构成:一个或多个代码段,代码段的属性为只读。一个或多个代码段,代码段的属性为只读。零个或多个包含初始化数据的数据段,数据段的属性为可读写。零个或多个包含初始化数据的数据段,数据段的属性为可读写。零个或多个不包含初始化数据的数据段,数据段的属性为可读写。零个或多个不包含初始化数据的数据段,数据段的属性为可读写。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一
9、定的梯度,由浅入深,所提出的问题也很明确vENTRYENTRY用于指示程序的入口,其后紧跟着第一条可执行语句。用于指示程序的入口,其后紧跟着第一条可执行语句。vCODE16/CODE32CODE16用于通知汇编器,本语句后面的指令序列为用于通知汇编器,本语句后面的指令序列为16位的位的Thumb指令。指令。CODE32用于通知汇编器,本语句后面的指令序列为用于通知汇编器,本语句后面的指令序列为32位的位的ARM指令。指令。vENDEND用于指示程序的结束,每一个汇编源程序都必须以用于指示程序的结束,每一个汇编源程序都必须以END语句结语句结束,以通知汇编器结束汇编。束,以通知汇编器结束汇编。在
10、整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.数据定义伪指令数据定义伪指令DCB(Define?Byte)语法格式(方括号内的内容为可选项):语法格式(方括号内的内容为可选项):标号标号 DCB 表达式表达式,表达式表达式 vDCB用于在内存中分配一片连续的字节单元,用于在内存中分配一片连续的字节单元,并用表达式进行初始化。每个表达式可以是并用表达式进行初始化。每个表达式可以是数字或字符串,数字的范围在数字或字符串,数字的范围在0255内,也内,也可以为算术表达式,例如:可以为算术表达式,例如:StrDCB“Hello World
11、!”num_bDCB2+3,3*5v字符串只能用字符串只能用DCB定义。定义。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确DCW(Define?Word)语法格式:标号语法格式:标号 DCW 表达式表达式 ,表达式表达式vDCW用于在内存中分配一片连续的半字单元,并用于在内存中分配一片连续的半字单元,并用指定的表达式进行初始化。这些分配的内容是用指定的表达式进行初始化。这些分配的内容是半字对齐的。其中表达式可以为程序标号或者数半字对齐的。其中表达式可以为程序标号或者数字表达式。例如:字表达式。例如:num_w DCW 0 x123
12、4,0 x5678在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确DCD(Define?Double word)语法格式:标号语法格式:标号 DCD 表达式表达式,表达式表达式 vDCD用于在内存中分配一片连续的字单元,并用用于在内存中分配一片连续的字单元,并用指定的表达式进行初始化。这些分配的内容是字指定的表达式进行初始化。这些分配的内容是字对齐的。其中表达式可以为程序标号或者数字表对齐的。其中表达式可以为程序标号或者数字表达式。例如:达式。例如:num_d DCD -5,0 x90abcdef在整堂课的教学中,刘教师总是让学生带着
13、问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确SPACE语法格式:标号语法格式:标号SPACE表达式表达式 vSPACE用于分配一片连续的存储区域并初始化为用于分配一片连续的存储区域并初始化为0。其中,表达式为。其中,表达式为要分配的字节数。例如:要分配的字节数。例如:data SPACE 1024;分配分配1024个字节空间并初始化为个字节空间并初始化为0LTORGvLTORG用于声明一个文字池,用来存放常量,特别是不符合用于声明一个文字池,用来存放常量,特别是不符合8位位图位位图数据标准的常数。其使用情景及实例见本章的数据标准的常数。其使用情景及实例见本章的4.2.
14、1节。节。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v3.宏处理伪指令宏处理伪指令MACRO和和ENDM语法格式:语法格式:宏名宏名MACRO 参数参数1,参数参数2宏体宏体ENDMvMACRO用于定义一个宏,引用宏时需使用宏名,并传递实参。用于定义一个宏,引用宏时需使用宏名,并传递实参。ENDM用于结束宏定义。用于结束宏定义。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v例如:以下定义一个宏,实现参数例如:以下定义一个宏,实现参数x与参数与参数y相加再减去参数相加
15、再减去参数z,结果放,结果放在参数在参数x中,三个参数均为存储器操作数。中,三个参数均为存储器操作数。addmMACRO x,y,zLDR R2,=xLDR R1,R2LDR R3,=yLDR R4,=zADD R1,R1,R3SUB R1,R1,R4STR R1,R2ENDM在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确4.1.3 汇编语言的规范汇编语言的规范1.语句的格式语句的格式ARM(Thumb)汇编语言的语句格式为:)汇编语言的语句格式为:标号标号 指令或伪指令指令或伪指令;注释注释v语句书写时需遵循以下规则:语句书写时需
16、遵循以下规则:所有标号必须在一行的顶格书写,其后不要添加所有标号必须在一行的顶格书写,其后不要添加“:”号;号;所有的指令均不能顶格写;所有的指令均不能顶格写;如果同一行有两条汇编语句,需要在它们之间以如果同一行有两条汇编语句,需要在它们之间以“;”隔开;如果一隔开;如果一条语句要分多行显示,需要使用条语句要分多行显示,需要使用“”放在分隔处;放在分隔处;每一条指令的助记符可以全部用大写、或全部用小写,但不能在一每一条指令的助记符可以全部用大写、或全部用小写,但不能在一条指令中大、小写混用。条指令中大、小写混用。注释使用分号注释使用分号“;”,不要在语句中间添加注释。,不要在语句中间添加注释。
17、在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确2.标号标号v在汇编语言程序设计中,可以使用各种标号表示指令或数据的地址,以在汇编语言程序设计中,可以使用各种标号表示指令或数据的地址,以增加程序的可读性。例如程序增加程序的可读性。例如程序4-1中的:中的:loop1LDRR3,R0,#4 BNEloop1;如果如果R1不为零,则转向不为零,则转向loop1处处v以下为标号命名规则:以下为标号命名规则:标号不应与指令或伪指令同名标号不应与指令或伪指令同名 标号在其作用范围内必须唯一。标号在其作用范围内必须唯一。标号区分大小写,同名的大、
18、小写标号被视为两个不同的标号。标号区分大小写,同名的大、小写标号被视为两个不同的标号。自定义的不能与系统保留字相同。自定义的不能与系统保留字相同。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确3.常量和变量常量和变量v程序中的程序中的常量常量是指其值在程序的运行过程中不能被改变的量,是指其值在程序的运行过程中不能被改变的量,变量变量是是指其值在程序的运行过程中可以改变的量。指其值在程序的运行过程中可以改变的量。vARM汇编程序支持逻辑量、数字和字符串。汇编程序支持逻辑量、数字和字符串。数字一般为数字一般为32位的整数,无符号数取值范
19、围为位的整数,无符号数取值范围为0232-1,带符号数,带符号数取值范围为取值范围为-231231-1。逻辑量只有两种取值:真或假。逻辑量只有两种取值:真或假。字符串用于在程序的运行中保存一个字符串,其长度不应超出字符串变字符串用于在程序的运行中保存一个字符串,其长度不应超出字符串变量所能表示的范围。量所能表示的范围。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确4.2 ARM汇编语言程序设计汇编语言程序设计 v程序设计的三种基本结构是顺序结构、分支结构和循环结构,以解决不程序设计的三种基本结构是顺序结构、分支结构和循环结构,以解决
20、不同的问题。在同的问题。在ARM汇编语言中采用跳转语句来实现分支与循环结构。汇编语言中采用跳转语句来实现分支与循环结构。v在进行程序设计时,首先分析该程序的流程,绘制流程图,再根据流程在进行程序设计时,首先分析该程序的流程,绘制流程图,再根据流程图编写代码。图编写代码。v4.2.1 顺序程序顺序程序v4.2.2 分支程序分支程序v4.2.3 循环程序循环程序v4.2.4 子程序子程序v4.2.5 基于查表法的程序设计基于查表法的程序设计在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确4.2.1 顺序程序顺序程序顺序程序是一种最简单的程
21、序结构,它按照语句编写的顺序从上往下执顺序程序是一种最简单的程序结构,它按照语句编写的顺序从上往下执行,直到最后退出程序。行,直到最后退出程序。v例例4-2:计算:计算100-50,结果存放到,结果存放到R1寄存器中。寄存器中。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v在在ADS中建立工程,编写以上程序,并进行汇编链接,使用中建立工程,编写以上程序,并进行汇编链接,使用AXD进行进行调试。程序调试结果:寄存器调试。程序调试结果:寄存器R1的内容为的内容为0 x32,即为十进制的,即为十进制的50,程序运行结果正确。程序运行结果
22、正确。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v缺省文字池缺省文字池vARM规定:可由一个规定:可由一个8位的常数经过循环右移偶数位(位的常数经过循环右移偶数位(0,2,4,30)得到的数据,称为)得到的数据,称为8位位图数据。只有位位图数据。只有8位位图数据可以直位位图数据可以直接采用立即数寻址方式来获取,其余的数据只能使用文字池的方式,通接采用立即数寻址方式来获取,其余的数据只能使用文字池的方式,通过存储器访问指令来加载,下面我们改变数据的大小,使得所访问立即过存储器访问指令来加载,下面我们改变数据的大小,使得所访问立即数
23、数不再是数数不再是8位位图数据。位位图数据。v例例4-3:计算:计算0 x123456-0 x123,结果存放到,结果存放到R0寄存器中。寄存器中。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v程序如下:程序如下:v汇编提示错误信息为:汇编提示错误信息为:在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v文字池是一片用于存放常量的地方,文字池是一片用于存放常量的地方,LDR指令寻址文字池,可以访问任指令寻址文字池,可以访问任意的意的32位数据。在汇编过程中,汇编器会默认的
24、在每个段的末尾开辟位数据。在汇编过程中,汇编器会默认的在每个段的末尾开辟一个文字池,下面我们采用缺省文字池的方式来重写例一个文字池,下面我们采用缺省文字池的方式来重写例4-3:v例例4-3-1:采用缺省文字池的方式实现例:采用缺省文字池的方式实现例4-3。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v调试信息:调试信息:v地址地址0 x8000存放代码段中的第一条可执行语句存放代码段中的第一条可执行语句LDR R1,=0 x123456,地址,地址0 x8018存放代码段在的最后一条可执行语句存放代码段在的最后一条可执行语句SWI
25、 0X123456,代码段的地址范围在,代码段的地址范围在0 x80000 x801b之间。之间。实线框住的部分表示汇编器自动生成的文字池。该文字池就在紧跟着代实线框住的部分表示汇编器自动生成的文字池。该文字池就在紧跟着代码段的位置,存放着三个码段的位置,存放着三个LDR访问的数据:访问的数据:0 x123456,0 x123,0 x20026。在整堂课的教学中,刘教师总是让学生带着问题来学习,而问题的设置具有一定的梯度,由浅入深,所提出的问题也很明确v自定义文字池自定义文字池v文字池的使用限制是:文字池的使用限制是:LDR指令的寻址范围是前后指令的寻址范围是前后4KB,不能使文字,不能使文字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 汇编语言 程序设计 基础 课件
限制150内