




已阅读5页,还剩65页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言程序设计 主要内容 汇编语言程序的格式汇编程序语句的行格式 预定义寄存器与内建常量 ARM伪指令ARM伪操作 指示符 ARM汇编语言编程举例 1 两种常见的ARM编译开发环境 ADS SDTIDE开发环境 它由ARM公司开发 使用了CodeWarrior公司的编译器集成了GNU开发工具的IDE开发环境 它由GNU的汇编器as 交叉编译器gcc 和链接器ld等组成 ARM汇编程序语法格式 简单的ARM程序 ADS 文件名 TEST1 S 功能 实现两个寄存器相加 说明 使用ARMulate软件仿真调试AREAExample1 CODE READONLY 声明代码段Example1ENTRY 标识程序入口CODE32 声明32位ARM指令STARTMOVR0 0 设置参数MOVR1 10LOOPBLADD SUB 调用子程序ADD SUBBLOOP 跳转到LOOPADD SUBADDSR0 R0 R1 R0 R0 R1MOVPC LR 子程序返回END 文件结束 使用 进行注释 标号顶格写 实际代码段 声明文件结束 文件名 TEST1 S 功能 实现两个寄存器相加 说明 text arm 声明32位ARM指令 start MOVR0 0 设置参数 MOVR1 10LOOP BLADD SUB 调用子程序ADD SUB BLOOP 跳转到LOOP ADD SUB ADDSR0 R0 R1 R0 R0 R1 MOVPC LR 子程序返回 end 文件结束 GNU编译环境 ARM汇编程序语法格式 1 预定义的寄存器R0 R15或者r0 r15 sp LR PC等 2 内建变量 TRUE FALSE PCor 当前指令的地址 ENDIAN 如果汇编器在大端方式 值为big 否则值为little CODESIZE 如果正在汇编Thumb代码 值为16 否则值为32 ARM汇编语句格式 ADS汇编器ARM汇编语句的格式如下 symbol instruction directive pseudo instruction comment 说明 1 symbol 符号 在ARM汇编语言中 符号在指令和伪指令中用作地址标号 在一些伪操作中用作变量或常量 符号的使用有以下一些规则 符号必须从一行的行头开始 符号由大小写字母 数字以及下划线组成 但不能包含空格 符号区分大小写 ADS汇编器 局部标号以数字开头 其他符号都不能以数字开头 符号在作用范围内是唯一的 即在其作用范围内不能有同名的符号 程序中的符号不能与系统的内部变量或系统预定义的符号同名 程序中的符号通常不要与指令助记符或伪操作同名 ADS汇编器 2 instruction 指令 在ARM汇编语言中 指令不能从一行的行头开始 在一行语句中 指令的前面必须有空格或符号 3 directive 伪操作 4 pseudo instruction 伪指令 5 comment 语句的注释 在ARM汇编语言中 注释以分号 开头 注释的结尾即为一行的结尾 注释也可单独占用一行 ADS汇编器 关于ARM汇编语句 需要说明的有以下几点 1 指令 伪指令以及伪操作的助记符可全部使用大写字母 也可全部使用小写字母 但不能在一个助记符中既有大写字母又有小写字母 2 在程序中 语句之间最好适当地插入空行 这样可提高源代码的可读性 3 如果一条语句很长 为提高可读性 可使用 将其分成若干行进行书写 在 后面不能再有其他字符 包括空格和制表符 ADS汇编器 ADS汇编器 返回symbols ADS汇编器 ARM伪指令不属于ARM指令集中的指令 是为了编程方便而定义的 伪指令可以像其它ARM指令一样使用 但在编译时这些指令将被等效的ARM指令代替 ARM伪指令有四条 分别为ADR伪指令 ADRL伪指令 LDR伪指令 NOP伪指令 ARM汇编语言的伪指令 ARM伪指令 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 在汇编编译器编译源程序时 ADR伪指令被编译器替换成一条合适的指令 通常 编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 ADR cond register expr ADR伪指令格式 指令执行的条件码 加载的目标寄存器 地址表达式 地址表达式expr的取指范围 当地址值不是字对齐时 其取指范围为 255 255 当地址值是字对齐时 其取指范围为 1020 1020 ARM伪指令 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 在汇编编译器编译源程序时 ADR伪指令被编译器替换成一条合适的指令 通常 编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 ADRR0 Delay DelayMOVR0 r14 应用示例 源程序 使用伪指令将程序标号Delay的地址存入R0 0 x20ADDr0 pc 0 x3c 0 x64MOVr0 r14 ARM伪指令 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 在汇编编译器编译源程序时 ADR伪指令被编译器替换成一条合适的指令 通常 编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 ADRLR0 Delay DelayMOVR0 r14 应用示例 源程序 编译后的反汇编代码 使用伪指令将程序标号Delay的地址存入R0 地址 程序代码 ARM伪指令 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 在汇编编译器编译源程序时 ADR伪指令被编译器替换成一条合适的指令 通常 编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 ADRLR0 Delay DelayMOVR0 r14 应用示例 源程序 0 x20ADDr0 pc 0 x3c 0 x64MOVr0 r14 编译后的反汇编代码 使用伪指令将程序标号Delay的地址存入R0 ADR伪指令被汇编成一条指令 ARM伪指令 小范围的地址读取 ADR伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 在汇编编译器编译源程序时 ADR伪指令被编译器替换成一条合适的指令 通常 编译器用一条ADD指令或SUB指令来实现该ADR伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 应用示例2 查表 ADRR0 DISP TAB 加载转换表地址LDRBR1 R0 R2 使用R2作为参数 进行查表 DISP TABDCB0 xC0 0 xF9 0 xA4 0 xB0 0 x99 0 x92 0 x82 0 xF8 ARM伪指令 中等范围的地址读取 ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比ADR伪指令可以读取更大范围的地址 在汇编编译器编译源程序时 ADRL伪指令被编译器替换成两条合适的指令 若不能用两条指令实现 则产生错误 编译失败 ADRL cond register expr ADRL伪指令格式 指令执行的条件码 加载的目标寄存器 地址表达式 地址表达式expr的取指范围 当地址值不是字对齐时 其取指范围为 64K 64K 当地址值是字对齐时 其取指范围为 256K 256K ARM伪指令 中等范围的地址读取 ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比ADR伪指令可以读取更大范围的地址 在汇编编译器编译源程序时 ADRL伪指令被编译器替换成两条合适的指令 若不能用两条指令实现 则产生错误 编译失败 ADRLR0 Delay DelayMOVR0 r14 应用示例 源程序 使用伪指令将程序标号Delay的地址存入R0 ARM伪指令 中等范围的地址读取 ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比ADR伪指令可以读取更大范围的地址 在汇编编译器编译源程序时 ADRL伪指令被编译器替换成两条合适的指令 若不能用两条指令实现 则产生错误 编译失败 ADRLR0 Delay DelayMOVR0 r14 应用示例 源程序 0 x20ADDr0 pc 400 x24ADDr0 r0 0 0 x68MOVr0 r14 编译后的反汇编代码 使用伪指令将程序标号Delay的地址存入R0 地址 程序代码 ARM伪指令 中等范围的地址读取 ADRL伪指令将基于PC相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比ADR伪指令可以读取更大范围的地址 在汇编编译器编译源程序时 ADRL伪指令被编译器替换成两条合适的指令 若不能用两条指令实现 则产生错误 编译失败 ADRLR0 Delay DelayMOVR0 r14 应用示例 源程序 0 x20ADDr0 pc 400 x24ADDr0 r0 0 0 x68MOVr0 r14 编译后的反汇编代码 使用伪指令将程序标号Delay的地址存入R0 ADRL伪指令被汇编成两条指令 尽管第2条指令并没有意义 ARM伪指令 大范围的地址读取 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器 在汇编编译源程序时 LDR伪指令被编译器替换成一条合适的指令 若加载的常数未超出MOV或MVN的范围 则使用MOV或MVN指令代替该LDR伪指令 否则汇编器将常量放入文字池 并使用一条程序相对偏移的LDR指令从文字池读出常量 LDR cond register expr LDR伪指令格式 指令执行的条件码 加载的目标寄存器 基于PC的地址表达式或外部表达式 ARM伪指令 大范围的地址读取 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器 在汇编编译源程序时 LDR伪指令被编译器替换成一条合适的指令 若加载的常数未超出MOV或MVN的范围 则使用MOV或MVN指令代替该LDR伪指令 否则汇编器将常量放入文字池 并使用一条程序相对偏移的LDR指令从文字池读出常量 应用示例 源程序 LDRR1 InitStack InitStackMOVR0 LR 使用伪指令将程序标号InitStack的地址存入R1 ARM伪指令 大范围的地址读取 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器 在汇编编译源程序时 LDR伪指令被编译器替换成一条合适的指令 若加载的常数未超出MOV或MVN的范围 则使用MOV或MVN指令代替该LDR伪指令 否则汇编器将常量放入文字池 并使用一条程序相对偏移的LDR指令从文字池读出常量 应用示例 源程序 编译后的反汇编代码 LDRR1 InitStack InitStackMOVR0 LR 0 x60LDRR1 0 xb4 0 x64MOVR0 LR 0 xb4DCD0 x64 使用伪指令将程序标号InitStack的地址存入R1 地址 程序代码 ARM伪指令 大范围的地址读取 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器 在汇编编译源程序时 LDR伪指令被编译器替换成一条合适的指令 若加载的常数未超出MOV或MVN的范围 则使用MOV或MVN指令代替该LDR伪指令 否则汇编器将常量放入文字池 并使用一条程序相对偏移的LDR指令从文字池读出常量 应用示例 源程序 编译后的反汇编代码 LDRR1 InitStack InitStackMOVR0 LR 0 x60LDRR1 0 xb4 0 x64MOVR0 LR 0 xb4DCD0 x64 使用伪指令将程序标号InitStack的地址存入R1 LDR伪指令被汇编成一条LDR指令 并在文字池中定义了一个常量 该常量为InitStack标号的地址 ARM伪指令 大范围的地址读取 LDR伪指令用于加载32位的立即数或一个地址值到指定寄存器 在汇编编译源程序时 LDR伪指令被编译器替换成一条合适的指令 若加载的常数未超出MOV或MVN的范围 则使用MOV或MVN指令代替该LDR伪指令 否则汇编器将常量放入文字池 并使用一条程序相对偏移的LDR指令从文字池读出常量 注意 1 从指令位置到文字池的偏移量必须小于4KB 2 与ARM指令的LDR相比 伪指令的LDR的参数有 号 LDRr0 42 MOVR0 42LDRr1 0 x55555555 LDRR1 PC offsetto LiteralPool1 LDRr2 0 xFFFFFFFF MVNR2 0 ARM伪指令 空操作伪指令 NOP伪指令在汇编时将会被代替成ARM中的空操作 比如可能是 MOVR0 R0 指令等 NOP可用于延时操作 NOP NOP伪指令格式 应用示例 延时子程序 DelayNOP 空操作NOPNOPSUBSR1 R1 1 循环次数减一BNEDelay 如果循环没有结束 跳转Delay继续MOVPC LR 子程序返回 伪操作 伪操作在源程序中的作用是为完成汇编程序作各种准备工作的 由汇编程序在源程序的汇编期间进行处理 仅在汇编过程中起作用 功能 1 定义数据结构和为数据分配空间 2 文件分隔成逻辑上的一个或者多个区域 3 错误报告和汇编列表控制4 符号定义5 条件汇编和重复汇编 与代码有关的指示符 伪操作 与数据定义有关的指示符 伪操作 符号定义的指示符汇编控制指示符 与代码有关的指示符 AREAname attr attr 属性列表CODE DATAREADONLYREADWRITE AREAExample1 CODE READONLY 声明代码段Example1ENTRY 标识程序入口CODE32 声明32位ARM指令STARTMOVR0 0 设置参数MOVR1 10LOOPBLADD SUB 调用子程序ADD SUBBLOOP 跳转到LOOPADD SUBADDSR0 R0 R1 R0 R0 R1MOVPC LR 子程序返回END 与数据定义有关的指示符 lableDATA 是定义数据的标号 在代码段中的数据的地址 AREAtest CODEThumb Code code codeMOVpc lrThumb DataDATA 必须同行DCB2 5 8 DCB分配一个或多个存储器中的字节 并且定义初始运行时的存储器内容 label DCBexpression expression 例如 定义一个以非0结束的字符串 Str1DCB thisistest 定义数值 Data1DCB1 2 3 128 255范围内的一个整数或者带引号的字符串 Data2DCB1 2 3DCW4 会自动插入一个字节 Data3DCB1 2 3 4 5DCWU 100 4 每个数据占两个字节 不需要对齐 Data1DCD 100 2 512Data2DCDlabel6 DCB127Data3DCDU 100 2 512 SPACE 分配数据区并使初值为0data1 127 分配127个字节内容为0的存储区 AREATest CODE READONLYStartLDRr0 Test1DCB1ALIGN 在默认参数情况下 表示对齐到4字节边界ALIGN16 对齐到16字节边界Test1MOVr1 0 xff 符号定义指示符 声明并初始化全局变量的GBLA GBLL和GBLS声明并初始化局部变量的LCLA LCLL和LCLS 局部变量只能在一个宏中声明设置变量值的SETA SETL和SETS给符号名一个数值常数EQUnum2EQU25 给符号num2指定值25声明全局符号的EXPORT GLOBAL声明其他文件定义的符号IMPORT EXTERN 使用举例 GBLATest1 声明变量Test1并初始化为0Test1SETA0 xff 设置变量的值GBLLTest2 声明逻辑变量Test2并初始化为 FALSE Test2SETL TRUE 设置变量的值IFTest2 test2codeENDIFGBLSTest3 声明字符串变量Test3并初始化为空串Test3SETS Version1 0 设置变量的值 EXPORT GLOBAL声明一个符号 这个符号在别的目标文件或者库文件中可以被引用 通过连接器去分辨AREATestSub CODE READONLYEXPORTDosub 函数名Dosub能被外部模块使用 Dosubsubr1 r2 r1 IMPORT EXTERN指示符提供给汇编器一个名字 这个名字不是当前汇编文件定义的 汇编控制指示符 信息报告伪操作 ADS汇编器 GNU汇编程序中的标号 标号只能由a z A Z 0 9 等字符组成 当标号为0 9的数字时为局部标号 局部标号可以重复出现 使用方法如下 标号f 在引用的地方向前的标号 标号b 在引用的地方向后的标号使用局部符号的例子 符号后的语句为注释 1 subsr0 r0 1 每次循环使r0 r0 1bne1f 跳转到1标号去执行局部标号代表它所在的地址 因此也可以当作变量或者函数来使用 comment标号指令或者伪操作注释 GNU汇编程序示例 文件 hello S section rodata 只读数据段 align2 strhello ascii Helloworld n 0 text align2 globalmain typemain functionmain stmfdsp lr 保存返回地址ldrr0 strhellotemp 取字符串的地址作为参数blprintf 调用printf打印ldmfdsp pc 恢复返回地址 strhellotemp word strhello 存储字符串 strhello的地址 常量编译控制伪操作 ADS汇编器 举例 byte1 2 0b01 0 x34 072 s word21 0 x1 10033 0 x77FF2255 int17 0 x77889933src long1 2 3 4 5 6 7 汇编程序代码控制伪操作 ADS汇编器 宏及条件编译控制伪操作 ADS汇编器 macroHANDLERHandleLabelstmdbsp r0 r11 ip lr pushr0 r11 ip lr ldrr0 HandleLabelldrr1 r0 movlr pcbxr1 callinterruptroutine ldmiasp r0 r11 ip lr popr0 r11 ip lr subspc r14 4 interruptret endm 其他伪操作 ADS汇编器 ADS汇编格式和GNU汇编格式常用移植1 注释行以 或 代替 2 伪操作符替换INCLUDE替换成 INCLUDETCLK2EQUPB25替换成 equTCLK2 PB25EXPORT替换成 globalIMPORT替换成 externDCD替换成 longIF DEF 替换成 IFDEFELSE替换成 ELSEENDIF替换成 ENDIF OR 替换成 SHL 替换成 textAREABlock DATA READWRITE dataCODE32 armCODE16 thumbLTORG ltorg fill 汇编程序中的常数 十进制数以非0数字开头 如 123和9876 二进制数以0b开头 其中字母也可以为大写 八进制数以0开始 如 0456 0123 十六进制数以0 x开头 如 0 xabcd 0X123f 字符串常量需要用引号括起来 中间也可以使用转义字符 如 Youarewelcome n 当前地址以 表示 在汇编程序中可以使用这个符号代表当前指令的地址 表达式 在汇编程序中的表达式可以使用常数或者数值 表示取负数 表示取补 表示不相等 其他的符号如 跟C语言中的用法相似 表达式和运算符 表达式一般由变量 常量 运算符和括号构成 常用的表达式有数字表达式 逻辑表达式和字符串表达式 其运算次序遵循如下的优先级 优先级相同的双目运算符的运算顺序为从左到右 相邻的单目运算符的运算顺序为从右到左 且单目运算符的优先级高于其他运算符 括号运算符的优先级最高 1 数字表达式及运算符数字表达式一般由数字常量 数字变量 数字运算符和括号构成 与数字表达式相关的运算符如下 及 MOD 以上的算术运算符分别代表加 减 乘 除和取余数运算 例如 以X和Y表示两个数字表达式 则 X Y表示X与Y的和 X Y表示X与Y的差 X Y表示X与Y的乘积 X Y表示X除以Y的商 X MOD Y表示X除以Y的余数 ROL ROR SHL 及 SHR 移位运算符以X和Y表示两个数字表达式 以上的移位运算符代表的运算如下 X ROL Y表示将X循环左移Y位 X ROR Y表示将X循环右移Y位 X SHL Y表示将X左移Y位 X SHR Y表示将X右移Y位 AND OR NOT 及 EOR 按位逻辑运算符以X和Y表示两个数字表达式 以上的按位逻辑运算符代表的运算如下 X AND Y表示将X和Y按位作逻辑与的操作 X OR Y表示将X和Y按位作逻辑或的操作 NOT Y表示将Y按位作逻辑非的操作 X EOR Y表示将X和Y按位作逻辑异或的操作 2 逻辑表达式及运算符逻辑表达式一般由逻辑量 逻辑运算符和括号构成 其表达式的运算结果为真或假 与逻辑表达式相关的运算符有两类 关系运算和逻辑运算 运算符以X和Y表示两个逻辑表达式 以上的运算符代表的运算如下 X Y表示X等于Y X Y表示X大于Y X Y表示X大于等于Y XY表示X不等于Y LAND LOR LNOT 及 LEOR 运算符以X和Y表示两个逻辑表达式 以上的逻辑运算符代表的运算如下 X LAND Y表示将X和Y作逻辑与的操作 X LOR Y表示将X和Y作逻辑或的操作 LNOT Y表示将Y作逻辑非的操作 X LEOR Y表示将X和Y作逻辑异或的操作 3 字符串表达式及运算符字符串表达式一般由字符串常量 字符串变量 运算符和括号构成 编译器所支持的字符串最大长度为512字节 常用的与字符串表达式相关的运算符如下 4 与寄存器和程序计数器 PC 相关的表达式及运算符BASE运算符 返回基于寄存器的表达式中寄存器的编号 BASE X 其中 X为与寄存器相关的表达式 INDEX运算符 返回基于寄存器的表达式中相对于其基址寄存器的偏移量 INDEX X 其中 X为与寄存器相关的表达式 5 其他常用运算符 运算符 返回某代码行所生成的可执行代码的长度 X 返回定义符号X的代码行所生成的可执行代码的字节数 DEF运算符 判断是否定义某个符号 DEF X 如果符号X已经定义 则结果为真 否则为假 4 3ARM汇编语言编程举例 汇编器介绍ARM汇编语言模块子程序调用条件执行装入常数到寄存器装入地址到寄存器装入和存储多个寄存器指令 在ARM汇编程序中 以程序段为单位组织代码 段是相对独立的指令或者数据序列 具有特定的名称 段可分为代码段和数据段 代码段的内容为执行代码 数据段存放代码运行时需要用到的数据 一个汇编程序至少应该有一个代码段 当程序较长时可以分割成多个代码段和数据段 多个段在程序编译连接时最终形成一个可执行的映像文件 ARM汇编语言模块 例4 1AREAexample CODE READONLYENTRYRun1MOVr1 20MOVr2 15SUBr1 r1 r2MOVr0 0 x18LDRr1 0 x20026SWI0 x123456END 汇编语言子程序调用及返回 子程序的调用在ARM汇编语言中 子程序调用是通过BL指令来完成的 BL指令的语法格式如下 BLsubname其中 subname是被调用的子程序的名称 子程序的返回在返回调用子程序时 转移链接指令保存到LR寄存器 r14 中的值需要拷贝回程序寄存器PC r15 例4 2加4个参数的值 用r0返回结果AREAaddsubrout CODE READONLYENTRYRun1MOVr0 101MOVr1 321MOVr2 43MOVr3 55BLaddfunMOVr0 0 x18LDRr1 0 x20026SWI0 x123456AddfunADDr0 r0 r1ADDr0 r0 r2ADDr0 r0 r3MOVpc lrEND 条件分支 通过使用ARM指令的条件执行 能够减少代码中分支指令的条数 每次分支的出现 要重新填充处理器的流水线要花费多个处理器周期时间 functiongcd integera integerb while ab doif a b thena a belseb b aendifendwhileresult a gcdCMPr0 r1BEQendBLTlessSUBr0 r0 r1BgcdlessSUBr1 r1 r0Bgcdend只用分支指令的条件执行 gcdCMPr0 r1SUBGTr0 r0 r1SUBLTr1 r1 r0BNEgcd 装入常数到寄存器 1 用MOV和MVN指令直接装入常数2 用LDRRd const伪指令装入常数 装入地址到寄存器 1 用ADR和ADRL伪指令直接装入地址跳转表思想 例4 72 用LDRRd label伪指令装入地址数据块和字符串的复制 跳转表思想 在程序设计中 有时为使程序完成一定的功能 需要调用一系列子程序中的一个 而决定究竟调用哪一个由程序的计算值确定 跳转表是解决该问题的有效方案 跳转表是利用程序计数器PC在通用寄存器文件中的可见性来实现的 如下例所示 例AREAStrCopy CODE READONLYENTRYstartLDRr1 srcstrLDRr0 dststrBLstrcopystopMOVr0 0 x18LDRr1 0 x20026SWI0 x123456strcopyLDRBr2 r1 1STRBr2 r0 1CMPr2 0BNEstrcopyMOVpc lrAREAStrings DATA READWRITEsrcstrDCB Firststring source 0dststrDCB Secondstring destination 0END AREASort CODE READONLYENTRYstartMOVr4 0LDRr6 srcADDr6 r6 lenouterLDRr1 srcinnerLDRr2 r1 LDRr3 r1 4 CMPr2 r3STRGTr3 r1 STRGTr2 r1 4 ADDr1 r1 4CMPr1 r6BLTinner ADDr4 r4 4CMPr4 lenSUBLEr6 r6 4BLEouterstopMOVr0 0 x18LDRr1 0 x20026SWI0 x123456AREAArray DATA READWRITEsrcDCD2 4 10 8 14 1 20lenEQU7 4END 分析该程序的功能 装入和存储多个寄存器指令 AREABclockData DATA READWRITESrcDCD1 2 3 4 5 6 7 8 9dstDCD0 0 0 0 0 0 0 0 0 写程序完成从源数据src到目标数据区dst的复制 用LDM和STM指令做块复制AREABblock CODE READONLYnumEQU11ENTRYstartldrr0 sr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省德州市宁津县第一中学2025-2026学年高一上学期开学考试政治试卷(含答案)
- 羽毛球拍制造知识培训课件
- 羽毛球培训理论知识课件
- 文化产业材料供应计划及保障措施
- 2025年骨科手术常见并发症预防措施评估答案及解析
- 仓储物流安防项目服务质量保障措施
- 香港友邦加裕智倍保课件
- 设备等级评定管理办法
- 财务票据核销管理办法
- 财政专户开户管理办法
- 人教版2024-2025学年九年级英语下册教学计划(及进度表)
- 《磁感应强度-磁通量》课件
- 高中主题班会 《铭记历史强国有我》课件-高一上学期爱国主义教育主题班会
- 2024年秋季新北师大版七年级上册数学全册教案设计
- 2025至2030年土壤检测仪器项目投资价值分析报告
- 标准预防及安全注射
- 儿童体适能教学 课件 (20期)
- 本质安全的概念和意义
- 《玉米病虫害及防治》课件
- 临床医疗胃食管反流病指南
- 《铁路工务维修现场实战技巧》课件 任务3.12 钢轨钻孔作业
评论
0/150
提交评论