![嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第1页](http://file4.renrendoc.com/view/c17b545b8e37b8f989360e34d47dbd71/c17b545b8e37b8f989360e34d47dbd711.gif)
![嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第2页](http://file4.renrendoc.com/view/c17b545b8e37b8f989360e34d47dbd71/c17b545b8e37b8f989360e34d47dbd712.gif)
![嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第3页](http://file4.renrendoc.com/view/c17b545b8e37b8f989360e34d47dbd71/c17b545b8e37b8f989360e34d47dbd713.gif)
![嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第4页](http://file4.renrendoc.com/view/c17b545b8e37b8f989360e34d47dbd71/c17b545b8e37b8f989360e34d47dbd714.gif)
![嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第5页](http://file4.renrendoc.com/view/c17b545b8e37b8f989360e34d47dbd71/c17b545b8e37b8f989360e34d47dbd715.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统及应用嵌入式系统及应用1第六章
ARM汇编语言程序设计ARM伪指令汇编程序设计第六章
ARM汇编语言程序设计ARM伪指令汇编程序设计2ARM伪指令伪指令不像机器指令那样在处理器运行期间由机器执行,而是在汇编时会被合适的机器指令代替,实现真正机器指令操作;ARM伪指令伪指令不像机器指令那样在处理器运行期间由机器执行3地址读取伪指令ADR伪指令小范围的地址读取伪指令.ADR指令将基于PC相对偏移的地址值读取到寄存器中.在汇编编译源程序时,ADR伪指令被编译器替换成一条合适的指令.通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能;指令格式:
ADR{cond}register,exper地址读取伪指令ADR伪指令4地址读取伪指令ADRL伪指令中等范围的地址读取伪指令.ADRL指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址。在汇编编译源程序时,ADRL伪指令被编译器替换成两个条合适的指令。指令格式
ADRL{cond}register,exper地址读取伪指令ADRL伪指令5地址读取伪指令LDR伪指令大范围的地址读取伪指令.LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器.指令格式
LDR{cond}register,=expr/label_expr举例
LDRR0,=0x123456
LDRR0,=DATA_BUFFER+0x10
...
LTORG
地址读取伪指令LDR伪指令 6NOP伪指令空操作伪指令,无操作,用于实现延时;举例 DELAY1
NOP
NOP
NOP
SUBSR1,R1,#1
BNEDELAY1NOP伪指令空操作伪指令,无操作,用于实现延时; DELAY7变量定义伪指令全局变量声明GBLAvariable:全局数值变量GBLLvariable:全局逻辑变量GBLSvariable:全局字符串变量局部变量声明LBLAvariable:局部数值变量LBLLvariable:局部逻辑变量LBLSvariable:局部字符串变量
变量定义伪指令全局变量声明 8变量赋值伪指令给变量复制:SETA伪指令用于给一个全局/局部的算术变量赋值.SETL伪指令用于给一个全局/局部的逻辑变量赋值.SETS伪指令用于给一个全局/局部的字符串变量赋值.
变量赋值伪指令给变量复制: 9变量定义/赋值伪指令举例 GBLLCodeDbg
CodeDbgSETL{TRUE}
...
GBLAByteNo
ByteNoSETA8
...
GBLSErrStr
ErrStrSETS"Nosemaphone."
变量定义/赋值伪指令举例 GBLLCodeDbg
Cod10RLIST伪指令
RLIST为一个通用寄存器列表定义名称:
nameRLIST{reglist}举例:
LoRegRLIST{R0-R7}RLIST伪指令 RLIST为一个通用寄存器列表定义名称:11数据定义伪指令
数据定义伪指令用于数据表定义,文字池定义,数据空间分配等:
声明一个文字池:LTORG
分配一块内存空间,并用0初始化:SPACE
分配一段字节的内存单元,并用指定的数据初始化:DCB
分配一段字的内存单元,并用指令的数据初始化:DCD和DCDU数据定义伪指令 数据定义伪指令用于数据表定义,文字池定义,数12LTORG伪指令
LTORG用于声明一个文字池(literal-pool),在使用LDR伪指令时,要在适当的地址加入LTORG声明文字池,这样就会把要加载的数据保存在文字池内,再用ARM的加载指令读出数据:
LTORG举例:
LDRR0,=0x12345678
ADDR1,R1,R0
MOVPC,LR
LTORGLTORG伪指令 LTORG用于声明一个文字池(liter13SPACE伪指令
SPACE用于分配一块内存单元,并用0初始化.%与SPACE同义:
{label}SPACEexpr举例:
DataBufSPACE1000 ;分配1000字节SPACE伪指令 SPACE用于分配一块内存单元,并用014DCB伪指令
DCB用于分配一段字节内存单元,并用伪指令中的expr初始化.一般可用来定义数据表格,或文字符串.=与DCB同义:
{label}DCBexpr{,expr}{,expr}...举例:
DISPTAB DCB0x33,0x43,0x53
DCB0x10,0x20,0x30
ERRSTR DCB"Senddataerror.",0DCB伪指令 DCB用于分配一段字节内存单元,并用伪指令中15DCD伪指令
DCD用于分配一段字内存单元,并用伪指令中的expr初始化.&与DCD同义:
{label}DCDexpr{,expr}{,expr}
举例:
Vectors
LDRPC,ResetAddr
LDRPC,UndefinedAddr
ResetAddr DCD Reset
UndefinedAddrDCDUndefined
Reset
...DCD伪指令 DCD用于分配一段字内存单元,并用伪指令中的e16汇编控制伪指令
汇编控制伪指令用于条件汇编,宏定义,重复汇编控制等:
条件汇编控制:IF,ELSE和ENDIF
宏定义:MACRO和MEND
重复汇编:WHILE及WEND汇编控制伪指令 汇编控制伪指令用于条件汇编,宏定义,重复汇编17IF、ELSE和ENDIF伪指令
IF,ELSE和ENDIF伪指令能够根据条件把一段代码包括在汇编程序内或将其排除在程序之外:
IFlogical_expr
...
ELSE
...
ENDIFIF、ELSE和ENDIF伪指令 IF,ELSE和ENDIF18MACRO和MEND伪指令
MACRO和MEND伪指令用于宏定义.MACRO标识宏定义的开始,MEND标识宏定义久的结束.用MACRO及MEND定义的一段代码,称为宏定义体:
MACRO
{$label} macroname{para1}{para2}
;宏体定义
MENDMACRO和MEND伪指令 MACRO和MEND伪指令19MACRO和MEND伪指令
举例:
MCARO
$IRQ_Label HANDLER $IRQ_Exception
EXPORT$IRQ_Lable
IMPORT$IRQ_Exception
$IRQ_Lable
SUBLR,LR,#4
STMFDSP!,{R0-R3,R12,LR}
MRSR3,STSR
STMFDSP!,{R3}
...
MENDMACRO和MEND伪指令 举例:
MCARO
$IRQ_20DCD伪指令
WHILE和WEND伪指令用于根据条件重复汇编相同的或几乎相同的一段源程序:
WHILElogical_expr
WEND举例:
WHILEno<5
noSETAno+1
...
WENDDCD伪指令 WHILE和WEND伪指令用于根据条件重21杂项伪指令
边界对齐:ALIGN段定义:AREA指令集定义:CODE16和CODE32汇编结束:END程序入口:ENTRY常量定义:EQU声明符号可以被外部引用:EXPORT和GLORBAL声明一个外部符号:IMPORT和EXTERN包含文件:GET和INCLUDE包含不被汇编的文件:INCBIN杂项伪指令 边界对齐:ALIGN22ALIGN伪指令
ALIGN伪指令通过添加补丁字节使当前位置满足一定的对齐方式:
ALIGN{expr}举例:
...
ByteBuf DCB 0x10
ALIGN4
...ALIGN伪指令 ALIGN伪指令通过添加补丁字节使当前位23AREA伪指令
AREA伪指令用于定义一个代码段或数据段.ARM汇编程序设计采用分段式设计,一个ARM源程序至少需要一个代码段,大的程序可以包含多少个代码段及数据段:
AREAsectionname{,attr}{,attr}
举例:
AREAExample,CODE,READNOLYAREA伪指令 AREA伪指令用于定义一个代码段或数据段24AREA伪指令
ALIGN:定义对齐方式CODE:定义代码段COMDEF:定义一个可包含代码和数据的通用段COMMON:定义一个通用的段DATA:定义数据段NOINIT:无需初始化READONLY:指定本段为只读,代码段的默认属性为READONLY;READWRITE:指定本段为可读可写.数据段的默认属性为READWRITE;AREA伪指令 ALIGN:定义对齐方式25CODE16和CODE32伪指令
CODE16伪指令指示汇编编译器后面的指令为16位的Thumb指令;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令;
CODE16
CODE32举例:
AREAExampleCODE,READONLY CODE32CODE16和CODE32伪指令 CODE16伪指令指示汇26END伪指令
END伪指令用于指示汇编编译器源文件已结束.每一个汇编源文件均要使用一个END伪指令,指示本源程序结束;
END举例:
... ;汇编文件内容
ENDEND伪指令 END伪指令用于指示汇编编译器源文件已结束27ENTRY伪指令
ENTRY伪指令用于指定程序的入口点:
ENTRY举例:
AREAEXample,CODE,READONLY
ENTRY
CODE32
STARTMOVR1,#0x10
...ENTRY伪指令 ENTRY伪指令用于指定程序的入口点:
28EQU伪指令
EQU伪指令为数字常量,基于寄存器的值和程序中的标号定义一个名称。*与EQU同义:
nameEQUexpr{,type}举例:
T_bitEQU0x20
ABCDEQUlabel+8EQU伪指令 EQU伪指令为数字常量,基于寄存器的值和程29EXPORT和GLOBAL伪指令
EXPORT声明一个符号可以被其它文件引用.相当于声明了一个全局变量.GLOBAL与EXPORT相同:
EXPORTsymbol
GLOBALsymbol举例:
EXPORTInitStack
GLOBALVectorsEXPORT和GLOBAL伪指令 EXPORT声明一个符号30IMPORT和EXTERN伪指令
IMJPORT伪指令指示编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号.EXTERN与IMPORT相同:
IMPORTsymbol
EXTERNsymbol举例:
IMPORTInitStack
EXTERNVectorsIMPORT和EXTERN伪指令 IMJPORT伪指令指31GET和INCLUDE伪指令
GET伪指令将一个源文件包含到当前源文件中,并将被包含的文件在具当前位置进行汇编处理INCLUDE与GFT同义:
GETfilename
INCLUDEfilename举例:
INCLUDEs3c44b0.incGET和INCLUDE伪指令 GET伪指令将一个源文件包32INCBIN伪指令
INCBIN伪指令将一个文件包含到当前源文件中,而被包含的文件不进行汇编处理:
INCBINfilename举例:
INCBINcharlib.binINCBIN伪指令 INCBIN伪指令将一个文件包含到当前33ARM汇编程序设计文件格式编写规范子程序调用数据块拷贝查表操作完整的例子ARM汇编程序设计文件格式34文件格式
文件格式 35汇编规范
标号必须在一行的顶格书写,其后面不要添加":",而指令均不能顶格书写;ARM汇编器对标识符大小写敏感,书写标号及指令时字母大小写要一致;注释使用";",注释内容由";"开始到此行结束,注释可以在一行的顶格书写;汇编规范 标号必须在一行的顶格书写,其后面不要添加":",而36汇编规范
正确的例子
...
Str1 SETS "Mystring.0"
USR_STACK EQU 64
START LDRR0,=0x11223456 ;地址送R0
MOVR1,#0
LOOP
MOVR2,#2汇编规范 正确的例子
...
Str1 SETS "M37汇编规范
不正确的例子
...
STARTMOVR0,#1
ABC: MOVR1,#2
MOVR2,#3
loop MovR2,#3
BLoop 汇编规范 不正确的例子
...
STARTMOVR0,38子程序调用
用BL指令进行调用,该指令会把返回的PC值保存在LR举例
...
BLDELAY ;调用子程序 ...
DELAY ...
MOVPC,LR ;子程序返回子程序调用 用BL指令进行调用,该指令会把返回的PC39数据比较跳转
汇编程序可以使用CMP指令进行两个数据比较,然后调用相应的ARM条件码,实现跳转;举例
CMPR5,#10
BEQDOEQUAL
...
CMPR1,R2
ADDHIR1,R1,#10
ADDLSR1,R1,#5
...
ANDSR1,R1,#0x80
BNEWAIT数据比较跳转 汇编程序可以使用CMP指令进行两个数据比较,然40循环
MOVR1,#10 ;循环次数
LOOP... ;循环体
SUBSR1,R1,#1
BNELOOP
...循环
MOVR1,#10 ;循环次数
LOOP41数据块复制
LDRR0,=DATA_DST
LDRR1,=DATA_SRC
MOVR10,#10
LOOPLDMIAR1!,{R2-R9}
STMIAR0!,{R2-R9}
SUBSR10,R10,#1
BNELOOP数据块复制
LDRR0,=DATA_DST
LD42栈操作
ARM使用存储器访问指令LDM/STM实现栈操作,用于子程序寄存器保存.注意,使用堆栈时,要先分配好堆栈空间,设置好寄存器R13(即堆栈指针SP),否则操作失败.举例
STMFDSP!,{R0-R7,LR}
...
BLDELAY
...
LDMFDSP!,{R0-R7,PC}栈操作 ARM使用存储器访问指令LDM/STM实现栈操43散转
CMPR0,#MAXINDEX
ADDLOPC,PC,R0,LSL#2
BERROR
BFUN1 ;散转表
BFUN2
BFUN3
...散转
CMPR0,#MAXINDEX
ADDLO44查表操作
...
LDRR3,=DIS_TAB
LDRR2,[R3,R5,LSL#2]
...
;下表是0~F的字模
DISR_TAB DCD0xC0,0xF9,0xA4,0x99,0x92
DCD0x82,0xF8,0x80,0x90,0x88查表操作
...
LDRR3,=DIS_TAB
45长跳转
...
ADDLR,PC,#4
LDRPC,[PC,#-4]
DCDLADR_FUN
...
或使用
LDRPC,=LADR_FUN长跳转
...
ADDLR,PC,#4
LD46一个完整的例子
ABCEQU0x12
AREAExample,CODE,READONLY
ENTRY
CODE32
ADRR0,Thumb_START+1
BXR0
CODE16
Thumb_START
MOVR1,#ABC
ADDR1,R1,#0x10
BThumb_START
END一个完整的例子 ABCEQU0x12
AREA47嵌入式系统及应用嵌入式系统及应用48第六章
ARM汇编语言程序设计ARM伪指令汇编程序设计第六章
ARM汇编语言程序设计ARM伪指令汇编程序设计49ARM伪指令伪指令不像机器指令那样在处理器运行期间由机器执行,而是在汇编时会被合适的机器指令代替,实现真正机器指令操作;ARM伪指令伪指令不像机器指令那样在处理器运行期间由机器执行50地址读取伪指令ADR伪指令小范围的地址读取伪指令.ADR指令将基于PC相对偏移的地址值读取到寄存器中.在汇编编译源程序时,ADR伪指令被编译器替换成一条合适的指令.通常,编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能;指令格式:
ADR{cond}register,exper地址读取伪指令ADR伪指令51地址读取伪指令ADRL伪指令中等范围的地址读取伪指令.ADRL指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中,比ADR伪指令可以读取更大范围的地址。在汇编编译源程序时,ADRL伪指令被编译器替换成两个条合适的指令。指令格式
ADRL{cond}register,exper地址读取伪指令ADRL伪指令52地址读取伪指令LDR伪指令大范围的地址读取伪指令.LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器.指令格式
LDR{cond}register,=expr/label_expr举例
LDRR0,=0x123456
LDRR0,=DATA_BUFFER+0x10
...
LTORG
地址读取伪指令LDR伪指令 53NOP伪指令空操作伪指令,无操作,用于实现延时;举例 DELAY1
NOP
NOP
NOP
SUBSR1,R1,#1
BNEDELAY1NOP伪指令空操作伪指令,无操作,用于实现延时; DELAY54变量定义伪指令全局变量声明GBLAvariable:全局数值变量GBLLvariable:全局逻辑变量GBLSvariable:全局字符串变量局部变量声明LBLAvariable:局部数值变量LBLLvariable:局部逻辑变量LBLSvariable:局部字符串变量
变量定义伪指令全局变量声明 55变量赋值伪指令给变量复制:SETA伪指令用于给一个全局/局部的算术变量赋值.SETL伪指令用于给一个全局/局部的逻辑变量赋值.SETS伪指令用于给一个全局/局部的字符串变量赋值.
变量赋值伪指令给变量复制: 56变量定义/赋值伪指令举例 GBLLCodeDbg
CodeDbgSETL{TRUE}
...
GBLAByteNo
ByteNoSETA8
...
GBLSErrStr
ErrStrSETS"Nosemaphone."
变量定义/赋值伪指令举例 GBLLCodeDbg
Cod57RLIST伪指令
RLIST为一个通用寄存器列表定义名称:
nameRLIST{reglist}举例:
LoRegRLIST{R0-R7}RLIST伪指令 RLIST为一个通用寄存器列表定义名称:58数据定义伪指令
数据定义伪指令用于数据表定义,文字池定义,数据空间分配等:
声明一个文字池:LTORG
分配一块内存空间,并用0初始化:SPACE
分配一段字节的内存单元,并用指定的数据初始化:DCB
分配一段字的内存单元,并用指令的数据初始化:DCD和DCDU数据定义伪指令 数据定义伪指令用于数据表定义,文字池定义,数59LTORG伪指令
LTORG用于声明一个文字池(literal-pool),在使用LDR伪指令时,要在适当的地址加入LTORG声明文字池,这样就会把要加载的数据保存在文字池内,再用ARM的加载指令读出数据:
LTORG举例:
LDRR0,=0x12345678
ADDR1,R1,R0
MOVPC,LR
LTORGLTORG伪指令 LTORG用于声明一个文字池(liter60SPACE伪指令
SPACE用于分配一块内存单元,并用0初始化.%与SPACE同义:
{label}SPACEexpr举例:
DataBufSPACE1000 ;分配1000字节SPACE伪指令 SPACE用于分配一块内存单元,并用061DCB伪指令
DCB用于分配一段字节内存单元,并用伪指令中的expr初始化.一般可用来定义数据表格,或文字符串.=与DCB同义:
{label}DCBexpr{,expr}{,expr}...举例:
DISPTAB DCB0x33,0x43,0x53
DCB0x10,0x20,0x30
ERRSTR DCB"Senddataerror.",0DCB伪指令 DCB用于分配一段字节内存单元,并用伪指令中62DCD伪指令
DCD用于分配一段字内存单元,并用伪指令中的expr初始化.&与DCD同义:
{label}DCDexpr{,expr}{,expr}
举例:
Vectors
LDRPC,ResetAddr
LDRPC,UndefinedAddr
ResetAddr DCD Reset
UndefinedAddrDCDUndefined
Reset
...DCD伪指令 DCD用于分配一段字内存单元,并用伪指令中的e63汇编控制伪指令
汇编控制伪指令用于条件汇编,宏定义,重复汇编控制等:
条件汇编控制:IF,ELSE和ENDIF
宏定义:MACRO和MEND
重复汇编:WHILE及WEND汇编控制伪指令 汇编控制伪指令用于条件汇编,宏定义,重复汇编64IF、ELSE和ENDIF伪指令
IF,ELSE和ENDIF伪指令能够根据条件把一段代码包括在汇编程序内或将其排除在程序之外:
IFlogical_expr
...
ELSE
...
ENDIFIF、ELSE和ENDIF伪指令 IF,ELSE和ENDIF65MACRO和MEND伪指令
MACRO和MEND伪指令用于宏定义.MACRO标识宏定义的开始,MEND标识宏定义久的结束.用MACRO及MEND定义的一段代码,称为宏定义体:
MACRO
{$label} macroname{para1}{para2}
;宏体定义
MENDMACRO和MEND伪指令 MACRO和MEND伪指令66MACRO和MEND伪指令
举例:
MCARO
$IRQ_Label HANDLER $IRQ_Exception
EXPORT$IRQ_Lable
IMPORT$IRQ_Exception
$IRQ_Lable
SUBLR,LR,#4
STMFDSP!,{R0-R3,R12,LR}
MRSR3,STSR
STMFDSP!,{R3}
...
MENDMACRO和MEND伪指令 举例:
MCARO
$IRQ_67DCD伪指令
WHILE和WEND伪指令用于根据条件重复汇编相同的或几乎相同的一段源程序:
WHILElogical_expr
WEND举例:
WHILEno<5
noSETAno+1
...
WENDDCD伪指令 WHILE和WEND伪指令用于根据条件重68杂项伪指令
边界对齐:ALIGN段定义:AREA指令集定义:CODE16和CODE32汇编结束:END程序入口:ENTRY常量定义:EQU声明符号可以被外部引用:EXPORT和GLORBAL声明一个外部符号:IMPORT和EXTERN包含文件:GET和INCLUDE包含不被汇编的文件:INCBIN杂项伪指令 边界对齐:ALIGN69ALIGN伪指令
ALIGN伪指令通过添加补丁字节使当前位置满足一定的对齐方式:
ALIGN{expr}举例:
...
ByteBuf DCB 0x10
ALIGN4
...ALIGN伪指令 ALIGN伪指令通过添加补丁字节使当前位70AREA伪指令
AREA伪指令用于定义一个代码段或数据段.ARM汇编程序设计采用分段式设计,一个ARM源程序至少需要一个代码段,大的程序可以包含多少个代码段及数据段:
AREAsectionname{,attr}{,attr}
举例:
AREAExample,CODE,READNOLYAREA伪指令 AREA伪指令用于定义一个代码段或数据段71AREA伪指令
ALIGN:定义对齐方式CODE:定义代码段COMDEF:定义一个可包含代码和数据的通用段COMMON:定义一个通用的段DATA:定义数据段NOINIT:无需初始化READONLY:指定本段为只读,代码段的默认属性为READONLY;READWRITE:指定本段为可读可写.数据段的默认属性为READWRITE;AREA伪指令 ALIGN:定义对齐方式72CODE16和CODE32伪指令
CODE16伪指令指示汇编编译器后面的指令为16位的Thumb指令;CODE32伪指令指示汇编编译器后面的指令为32位的ARM指令;
CODE16
CODE32举例:
AREAExampleCODE,READONLY CODE32CODE16和CODE32伪指令 CODE16伪指令指示汇73END伪指令
END伪指令用于指示汇编编译器源文件已结束.每一个汇编源文件均要使用一个END伪指令,指示本源程序结束;
END举例:
... ;汇编文件内容
ENDEND伪指令 END伪指令用于指示汇编编译器源文件已结束74ENTRY伪指令
ENTRY伪指令用于指定程序的入口点:
ENTRY举例:
AREAEXample,CODE,READONLY
ENTRY
CODE32
STARTMOVR1,#0x10
...ENTRY伪指令 ENTRY伪指令用于指定程序的入口点:
75EQU伪指令
EQU伪指令为数字常量,基于寄存器的值和程序中的标号定义一个名称。*与EQU同义:
nameEQUexpr{,type}举例:
T_bitEQU0x20
ABCDEQUlabel+8EQU伪指令 EQU伪指令为数字常量,基于寄存器的值和程76EXPORT和GLOBAL伪指令
EXPORT声明一个符号可以被其它文件引用.相当于声明了一个全局变量.GLOBAL与EXPORT相同:
EXPORTsymbol
GLOBALsymbol举例:
EXPORTInitStack
GLOBALVectorsEXPORT和GLOBAL伪指令 EXPORT声明一个符号77IMPORT和EXTERN伪指令
IMJPORT伪指令指示编译器当前的符号不是在本源文件中定义的,而是在其他源文件中定义的,在本源文件中可能引用该符号.EXTERN与IMPORT相同:
IMPORTsymbol
EXTERNsymbol举例:
IMPORTInitStack
EXTERNVectorsIMPORT和EXTERN伪指令 IMJPORT伪指令指78GET和INCLUDE伪指令
GET伪指令将一个源文件包含到当前源文件中,并将被包含的文件在具当前位置进行汇编处理INCLUDE与GFT同义:
GETfilename
INCLUDEfilename举例:
INCLUDEs3c44b0.incGET和INCLUDE伪指令 GET伪指令将一个源文件包79INCBIN伪指令
INCBIN伪指令将一个文件包含到当前源文件中,而被包含的文件不进行汇编处理:
INCBINfilename举例:
INCBINcharlib.binINCBIN伪指令 INCBIN伪指令将一个文件包含到当前80ARM汇编程序设计文件格式编写规范子程序调用数据块拷贝查表操作完整的例子ARM汇编程序设计文件格式81文件格式
文件格式 82汇编规范
标号必须在一行的顶格书写,其后面不要添加":",而指令均不能顶格书写;ARM汇编器对标识符大小写敏感,书写标号及指令时字母大小写要一致;注释使用";",注释内容由";"开始到此行结束,注释可以在一行的顶格书写;汇编规范 标号必须在一行的顶格书写,其后面不要添加":",而83汇编规范
正确的例子
...
Str1 SETS "Mystring.0"
USR_STACK EQU 64
START LDRR0,=0x11223456 ;地址送R0
MOVR1,#0
LOOP
MOVR2,#2汇编规范 正确的例子
...
Str1 SETS "M84汇编规范
不正确的例子
...
STARTMOVR0,#1
ABC: MOVR1,#2
MOVR2,#3
loop MovR2,#3
BLoop 汇编规范 不正确的例子
...
STARTMOVR0,85子程序调用
用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工现场施工防化学灾害制度
- 应急物资装备应急预案
- 医疗护理医学培训 吸痰护理技术课件
- DB6103T 87-2025企业简易注销登记服务规程
- XX村电排建设及维护合同书2025
- 个人股权抵押融资合同样本
- 临时促销服务合同
- 中小企业融资合作合同协议
- 京东商城代运营合同模板
- 个人质押贷款合同模板
- 2025年矿山开采承包合同实施细则4篇
- 2024年广东省公务员录用考试《行测》真题及解析
- 科技论文图表等规范表达
- 高考写作指导议论文标准语段写作课件32张
- 2021年普通高等学校招生全国英语统一考试模拟演练八省联考解析
- 华能火力发电机组节能降耗技术导则(2023年版)
- 基础知识3500个常用汉字附拼音
- 企业易制毒化学品管理培训
- JJF(纺织)072-2018纺织滚筒式烘干机校准规范
- 羊水栓塞的应急预案演练脚本
- 物业保洁及餐饮服务项目方案
评论
0/150
提交评论