嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第1页
嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第2页
嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第3页
嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第4页
嵌入式系统及应用-Chapter06-汇编语言程序设计课件_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式系统及应用嵌入式系统及应用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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论