安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt

上传人:tia****nde 文档编号:8838713 上传时间:2020-04-01 格式:PPT 页数:39 大小:316KB
返回 下载 相关 举报
安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt_第1页
第1页 / 共39页
安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt_第2页
第2页 / 共39页
安徽理工大学计算机汇编教程-ARMThumb汇编语言.ppt_第3页
第3页 / 共39页
点击查看更多>>
资源描述
2020 4 1 第17章ARM Thumb汇编语言 1 8086 8088和ARM核汇编语言程序设计 第17章ARM Thumb汇编语言 2020 4 1 第17章ARM Thumb汇编语言 2 17 2ARM指令的寻址方式 17 3ARM汇编语言的语句格式 第17章ARM Thumb汇编语言 17 1ARM指令的分类及格式 2020 4 1 第17章ARM Thumb汇编语言 3 17 1 1ARM指令的分类 ARM处理器是基于精简指令集计算机 RISC 原理设计的 指令集和相关译码机制较为简单 ARM指令归纳起来可分为以下6类 跳转指令 数据处理指令 程序状态寄存器 PSR 传输指令 内存取数 存数操作指令 协处理器指令 异常中断产生指令 2020 4 1 第17章ARM Thumb汇编语言 4 17 1 2ARM指令一般编码格式 其中各位的含义如下 1 cond bit31 bit28 指令执行的操作码 2 opcode bit24 bit21 指令操作符编码 3 S bit20 决定指令操作是否影响CPSR 4 Rn bit19 bit16 包含第一个操作数的寄存器编码 5 Rd bit15 bit12 目标寄存器编码 6 shifter operand bit11 bit0 表示第二个操作数 7 bit27 bit25为固定值001 2020 4 1 第17章ARM Thumb汇编语言 5 17 1 3ARM指令基本语法格式 一条典型的ARM指令语法格式如下所示 S 其中 opcode指令助记符 如ADD SUB等 cond指令执行条件 如EQ NE等 S决定指令的操作是否影响CPSR寄存器的值 书写时影响CPSR Rd目标寄存器 Rn包含第一个操作数的寄存器 operand2第二个操作数 2020 4 1 第17章ARM Thumb汇编语言 6 17 1 3ARM指令基本语法格式 1 第二个操作数operand2在ARM指令中灵活使用第二个操作数能够提高代码的效率 第二个操作数operand2通常有下面三种格式 立即数方式 寄存器方式 寄存器移位方式 2020 4 1 第17章ARM Thumb汇编语言 7 17 1 3ARM指令基本语法格式 1 立即数方式每个立即数由一个8位的常数循环右移偶数位得到 其中循环右移的位数由一个4位二进制的两倍表示 即立即数 8位常数imm8循环右移2 循环移位次数 立即数方式应用举例 MOVR0 1 R0 1ANDR1 R2 0 xf R2与0 x0f 结果保存在R1LDRR0 R1 4 读取R1地址上的存储单元内容 且R1 R1 4 2020 4 1 第17章ARM Thumb汇编语言 8 17 1 3ARM指令基本语法格式 2 寄存器方式在寄布器寻址方式下 操作数即为寄存器的数值 寄存器方式应用举例 MOVR3 R2 将R2的数值放到R3中ADDR0 Rl R2 R0数值等于R1的数值加上R2的数值 2020 4 1 第17章ARM Thumb汇编语言 9 17 1 3ARM指令基本语法格式 3 寄存器移位方式将寄存器的移位结果作为操作数 但寄存器的内容保持不变 移位方法如下 ASR n Rs算术右移n位 1 n 32 或寄存器Rs指定LSL n Rs逻辑左移n位 1 n 32 或寄存器Rs指定LSR n Rs逻辑右移n位 1 n 32 或寄存器Rs指定ROR n Rs循环右移n位 1 n 32 或寄存器Rs指定RRX扩展的循环右移移位的位数可以用立即数方式或者寄存器方式表示 2020 4 1 第17章ARM Thumb汇编语言 10 17 1 3ARM指令基本语法格式 2 条件码cond 2020 4 1 第17章ARM Thumb汇编语言 11 17 2ARM指令的寻址方式 17 3ARM汇编语言的语句格式 第17章ARM Thumb汇编语言 17 1ARM指令的分类及格式 2020 4 1 第17章ARM Thumb汇编语言 12 操作数的值在寄存器中 指令中的地址码字段指出的是寄存器编号 指令执行时直接取出寄存器值来操作 寄存器寻址指令举例如下 MOVR1 R2 将R2的值存入R1SUBR0 R1 R2 将R1的值减去R2的值 结果保存到R0 寻址方式分类 寄存器寻址 MOVR1 R2 0 xAA 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 13 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身 也就是说 数据就包含在指令当中 取出指令也就取出了可以立即使用的操作数 这样的数称为立即数 立即寻址指令举例如下 SUBSR0 R0 1 R0减1 结果放入R0 并且影响标志位MOVR0 0 xFF000 将立即数0 xFF000装入R0寄存器 寻址方式分类 立即寻址 MOVR0 0 xFF00 0 xFF00 从代码中获得数据 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 14 寄存器移位寻址是ARM指令集特有的寻址方式 当第2个操作数是寄存器移位方式时 第2个寄存器操作数在与第1个操作数结合之前 选择进行移位操作 寄存器移位寻址指令举例如下 MOVR0 R2 LSL 3 R2的值左移3位 结果放入R0 即是R0 R2 8ANDSR1 R1 R2 LSLR3 R2的值左移R3位 然后和R1相 与 操作 存入R1 寻址方式分类 寄存器移位寻址 MOVR0 R2 LSL 3 0 x08 0 x08 逻辑左移3位 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 15 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号 所需的操作数保存在寄存器指定地址的存储单元中 即寄存器为操作数的地址指针 寄存器间接寻址指令举例如下 LDRR1 R2 将R2指向的存储单元的数据读出保存在R1中SWPR1 R1 R2 将寄存器R1的值和R2指定的存储单元的内容交换 寻址方式分类 寄存器间接寻址 LDRR1 R2 0 xAA 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 16 基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加 形成操作数的有效地址 基址寻址用于访问基址附近的存储单元 常用于查表 数组操作 功能部件寄存器访问等 基址寻址指令举例如下 LDRR2 R3 0 x0C 读取R3 0 x0C地址上的存储单元的内容 放入R2STRR1 R0 4 先R0 R0 4 然后把R1的值寄存到保存到R0指定的存储单元 寻址方式分类 基址寻址 LDRR2 R3 0 x0C 0 xAA 将R3 0 x0C作为地址装载数据 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 17 多寄存器寻址一次可传送几个寄存器值 允许一条指令传送16个寄存器的任何子集或所有寄存器 多寄存器寻址指令举例如下 LDMIAR1 R2 R7 R12 将R1指向的单元中的数据读出到 R2 R7 R12中 R1自动加1 STMIAR0 R2 R7 R12 将寄存器R2 R7 R12的值保存到R0指向的存储单元中 R0自动加1 寻址方式分类 多寄存器寻址 LDRR1 R2 R4 R6 0 x40000010 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 18 堆栈是一个按特定顺序进行存取的存储区 操作顺序为 后进先出 堆栈寻址是隐含的 它使用一个专门的寄存器 堆栈指针 指向一块存储区域 堆栈 指针所指向的存储单元即是堆栈的栈顶 存储器堆栈可分为两种 向上生长 向高地址方向生长 称为递增堆栈向下生长 向低地址方向生长 称为递减堆栈 寻址方式分类 堆栈寻址 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 19 寻址方式分类 堆栈寻址 0 x12345678 0 x12345678 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 20 堆栈指针指向最后压入的堆栈的有效数据项 称为满堆栈 堆栈指针指向下一个待压入数据的空位置 称为空堆栈 寻址方式分类 堆栈寻址 0 x12345678 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 21 所以可以组合出四种类型的堆栈方式 满递增 堆栈向上增长 堆栈指针指向内含有效数据项的最高地址 指令如LDMFA STMFA等 空递增 堆栈向上增长 堆栈指针指向堆栈上的第一个空位置 指令如LDMEA STMEA等 满递减 堆栈向下增长 堆栈指针指向内含有效数据项的最低地址 指令如LDMFD STMFD等 空递减 堆栈向下增长 堆栈指针向堆栈下的第一个空位置 指令如LDMED STMED等 寻址方式分类 堆栈寻址 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 22 多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置 如 STMIAR0 R1 R7 将R1 R7的数据保存到存储器中 存储指针在保存第一个值之后增加 增长方向为向上增长 STMIBR0 R1 R7 将R1 R7的数据保存到存储器中 存储指针在保存第一个值之前增加 增长方向为向上增长 寻址方式分类 块拷贝寻址 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 23 相对寻址是基址寻址的一种变通 由程序计数器PC提供基准地址 指令中的地址码字段作为偏移量 两者相加后得到的地址即为操作数的有效地址 相对寻址指令举例如下 BLSUBR1 调用到SUBR1子程序BEQLOOP 条件跳转到LOOP标号处 LOOPMOVR6 1 SUBR1 寻址方式分类 相对寻址 17 2ARM指令的寻址方式 2020 4 1 第17章ARM Thumb汇编语言 24 17 2ARM指令的寻址方式 17 3ARM汇编语言的语句格式 第17章ARM Thumb汇编语言 17 1ARM指令的分类及格式 2020 4 1 第17章ARM Thumb汇编语言 25 17 3ARM汇编语言的语句格式 ARM Thumb 汇编语言的语句格式为 标号 指令或伪指令 注释 在汇编语言程序设计中 经常使用各种符号代替地址 变量和常量等 以增加程序的可读性 尽管符号的命名由编程者决定 但并不是任意的 必须遵循以下的约定 符号区分大小写 同名的大 小写符号会被编译器认为是两个不同的符号 符号在其作用范围内必须唯一 自定义的符号名不能与系统的保留字相同 符号名不应与指令或伪指令同名 17 3 1在汇编语言程序中常用的符号 2020 4 1 第17章ARM Thumb汇编语言 26 17 3 1在汇编语言程序中常用的符号 1 程序中的变量程序中的变量是指其值在程序的运行过程中可以改变的量 ARM Thumb 汇编程序所支持的变量有数字变量 逻辑变量和字符串变量 数字变量用于在程序的运行中保存数字值 但注意数字值的大小不应超出数字变量所能表示的范围 逻辑变量用于在程序的运行中保存逻辑值 逻辑值只有两种取值情况 真或假 字符串变量用于在程序的运行中保存一个字符串 但注意字符串的长度不应超出字符串变量所能表示的范围 2020 4 1 第17章ARM Thumb汇编语言 27 17 3 1在汇编语言程序中常用的符号 2 程序中的常量程序中的常量是指其值在程序的运行过程中不能被改变的量 ARM Thumb 汇编程序所支持的常量有数字常量 逻辑常量和字符串常量 数字常量一般为32位的整数 当作为无符号数时 其取值范围为0 232 1 当作为有符号数时 其取值范围为 231 231 1 逻辑常量只有两种取值情况 真或假 字符串常量为一个固定的字符串 一般用于程序运行时的信息提示 2020 4 1 第17章ARM Thumb汇编语言 28 17 3 1在汇编语言程序中常用的符号 3 程序中的变量代换程序中的变量可通过代换操作取得一个常量 代换操作符为 如果在数字变量前面有一个代换操作符 编译器会将该数字变量的值转换为十六进制的字符串 并将该十六进制的字符串代换 后的数字变量 如果在逻辑变量前面有一个代换操作符 编译器会将该逻辑变量代换为它的取值 真或假 如果在字符串变量前面有一个代换操作符 编译器会将该字符串变量的值代换 后的字符串变量 2020 4 1 第17章ARM Thumb汇编语言 29 17 3 2汇编语言程序中的表达式和运算符 表达式一般由变量 常量 运算符和括号构成 常用的表达式有数字表达式 逻辑表达式和字符串表达式 其运算次序遵循如下的优先级 优先级相同的双目运算符的运算顺序为从左到右 相邻的单目运算符的运算顺序为从右到左 且单目运算符的优先级高于其他运算符 括号运算符的优先级最高 2020 4 1 第17章ARM Thumb汇编语言 30 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的余数 2020 4 1 第17章ARM Thumb汇编语言 31 1 数字表达式及运算符 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位 2020 4 1 第17章ARM Thumb汇编语言 32 1 数字表达式及运算符 AND OR NOT 及 EOR 按位逻辑运算符以X和Y表示两个数字表达式 以上的按位逻辑运算符代表的运算如下 X AND Y表示将X和Y按位作逻辑与的操作 X OR Y表示将X和Y按位作逻辑或的操作 NOT Y表示将Y按位作逻辑非的操作 X EOR Y表示将X和Y按位作逻辑异或的操作 2020 4 1 第17章ARM Thumb汇编语言 33 2 逻辑表达式及运算符 运算符以X和Y表示两个逻辑表达式 以上的运算符代表的运算如下 X Y表示X等于Y X Y表示X大于Y X Y表示X大于等于Y XY表示X不等于Y 2020 4 1 第17章ARM Thumb汇编语言 34 2 逻辑表达式及运算符 LAND LOR LNOT 及 LEOR 运算符以X和Y表示两个逻辑表达式 以上的逻辑运算符代表的运算如下 X LAND Y表示将X和Y作逻辑与的操作 X LOR Y表示将X和Y作逻辑或的操作 LNOT Y表示将Y作逻辑非的操作 X LEOR Y表示将X和Y作逻辑异或的操作 2020 4 1 第17章ARM Thumb汇编语言 35 3 字符串表达式及运算符 LEN运算符LEN运算符返回字符串的长度 字符数 以X表示字符串表达式 其语法格式如下 LEN X CHR运算符CHR运算符将0 255之间的整数转换为一个字符 以M表示某一个整数 其语法格式如下 CHR M 2020 4 1 第17章ARM Thumb汇编语言 36 3 字符串表达式及运算符 STR运算符STR运算符将将一个数字表达式或逻辑表达式转换为一个字符串 对于数字表达式 STR运算符将其转换为一个以十六进制组成的字符串 对于逻辑表达式 STR运算符将其转换为字符串T或F 其语法格式如下 STR X其中 X为一个数字表达式或逻辑表达式 LEFT运算符LEFT运算符返回某个字符串左端的一个子串 其语法格式如下 X LEFT Y其中 X为源字符串 Y为一个整数 表示要返回的字符个数 2020 4 1 第17章ARM Thumb汇编语言 37 3 字符串表达式及运算符 RIGHT运算符与LEFT运算符相对应 RIGHT运算符返回某个字符串右端的一个子串 其语法格式如下 X RIGHT Y其中 X为源字符串 Y为一个整数 表示要返回的字符个数 CC运算符CC运算符用于将两个字符串连接成一个字符串 其语法格式如下 X CC Y其中 X为源字符串1 Y为源字符串2 CC运算符将Y连接到X的后面 2020 4 1 第17章ARM Thumb汇编语言 38 4 与寄存器和程序计数器 PC 相关的表达式及运算符 BASE运算符BASE运算符返回基于寄存器的表达式中寄存器的编号 其语法格式如下 BASE X其中 X为与寄存器相关的表达式 INDEX运算符INDEX运算符返回基于寄存器的表达式中相对于其基址寄存器的偏移量 其语法格式如下 INDEX X其中 X为与寄存器相关的表达式 2020 4 1 第17章ARM Thumb汇编语言 39 5 其他常用运算符 运算符 运算符返回某代码行所生成的可执行代码的长度 例如 X返回定义符号X的代码行所生成的可执行代码的字节数 DEF运算符DEF运算符判断是否定义某个符号 例如 DEF X如果符号X已经定义 则结果为真 否则为假
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!