山东青?u68元建网站,青岛建站seo公司,足球比赛直播雨燕,营销方案设计思路一、汇编的组成 1、汇编指令#xff08;指令集#xff09; 数据处理指令: 数据搬移指令 数据移位指令 位运算指令 算术运算指令 比较指令 跳转指令 内存读写指令 状态寄存器传送指令 异常产生指令等 2、伪指令 不是汇编指令#xff0c;但是可以起到指令的作用#xff0c;伪…一、汇编的组成 1、汇编指令指令集 数据处理指令: 数据搬移指令 数据移位指令 位运算指令 算术运算指令 比较指令 跳转指令 内存读写指令 状态寄存器传送指令 异常产生指令等 2、伪指令 不是汇编指令但是可以起到指令的作用伪指令也会占用一定内存空间 3、伪操作 不占用指令内存能够在程序编译过程中起到编译引导作用的内容 4、注释 二、汇编指令
2.1基本格式 opcode{cond}{s} Rd,Rn,shifter_operand 注释 opcode指令的功能码用来表示当前指令的作用 可以写也可以不写 cond条件码 s表示进行运算时运算的结果会影响到CPSR条件位 Rd目标寄存器 Rn第一操作寄存器 shifter_operand第二操作寄存器 2.2数据搬移指令 1、mov{条件码} 目标寄存器 操作数 将操作数搬移到目标寄存器 2、mvn{条件码} 目标寄存器 操作数 将操作数按位取反后搬移到目标寄存器 注意 操作数可以是一个寄存器也可以是一个立即数 立即数能够经过编码之后保存到指令空间中直接当作指令一部分去执行的数据。 如果想要把一个非立即数搬移到目标寄存器使用伪指令ldr格式ldr 目标寄存器数据 2.3数据移位指令 1、逻辑左移 lsl{条件码} 目标寄存器第一操作寄存器第二操作数 将第一操作寄存器的数据左移第二操作数位数结果保存到目标寄存器 2、逻辑右移 lsr{条件码} 目标寄存器第一操作寄存器第二操作数 将第一操作寄存器的数据右移第二操作数位数结果保存到目标寄存器 3、循环右移 ror{条件码} 目标寄存器第一操作寄存器第二操作数 将第一操作寄存器的数据循环右移第二操作数位数结果保存到目标寄存器 2.4位运算指令 1、与运算 and{条件码} 目标寄存器第一操作寄存器第二操作数 将第一操作寄存器的数据和第二操作数进行与运算结果保存到目标寄存器 2、或运算 orr{条件码} 目标寄存器第一操作寄存器第二操作数 将第一操作寄存器的数据和第二操作数进行或运算结果保存到目标寄存器 3、异或运算 eor{条件码} 目标寄存器第一操作寄存器第二操作数 将第一操作寄存器的数据和第二操作数进行异或运算结果保存到目标寄存器 4、按位取反 mvn{条件码} 目标寄存器第一操作寄存器第二操作数 5、按位清零 bic{条件码} 目标寄存器第一操作寄存器第二操作数 将第一操作寄存器的数据和第二操作数进行与运算结果保存到目标寄存器 2.5算术运算 1、加法运算 add{条件码}{s} 目标寄存器第一操作寄存器第二操作数 目标寄存器第一操作寄存器第二操作数 2、考虑CPSR条件位的加法运算 adc{条件码}{s} 目标寄存器第一操作寄存器第二操作数 目标寄存器第一操作寄存器第二操作数cpsr寄存器c位的值 3、减法运算 sub{条件码}{s} 目标寄存器第一操作寄存器第二操作数 目标寄存器第一操作寄存器-第二操作数 4、考虑CPSR条件位的减法运算 sbc{条件码}{s} 目标寄存器第一操作寄存器第二操作数 目标寄存器第一操作寄存器-第二操作数-cpsr寄存器c位的值 5、乘法运算 mul{条件码}{s} 目标寄存器第一操作寄存器第二操作数 目标寄存器第一操作寄存器*第二操作数 2.6比较指令 1、cmp 第一操作寄存器第二操作数 将第一操作寄存器和第二操作数进行比较 2、tst 目标寄存器#0x1N 用来判断目标寄存器的第N位是否为0 3、teq 目标寄存器第二操作数 判断目标寄存器的值是否和第二操作数相等 2.7跳转指令 1、b 标签 跳转到指定的标签下跳转后LR寄存器不保存程序返回地址 2、bl 标签 跳转到指定的标签下跳转后LR寄存器保存程序返回地址 2.8内存读写指令 ①单寄存器内存读写指令 写 1、str 目标寄存器[目标地址] 将目标寄存器中四字节数据写入到目标地址对应的内存中 2、strh 目标寄存器[目标地址] 将目标寄存器中二字节数据写入到目标地址对应的内存中 3、strb 目标寄存器[目标地址] 将目标寄存器中一字节数据写入到目标地址对应的内存中 读 1、ldr 目标寄存器[目标地址] 从目标寄存器中读取四字节数据到目标地址对应的内存中 2、ldrh 目标寄存器[目标地址] 将目标寄存器中读取二字节数据到目标地址对应的内存中 3、ldrb 目标寄存器[目标地址] 将目标寄存器中读取一字节数据到目标地址对应的内存中 ②批量寄存器内存读写指令 写 1、stm 基地址{寄存器列表} 将寄存器列表中所有寄存器的数据写入到基地址为首地址的内存中 读 1、ldm 基地址{寄存器列表} 从基地址开始往下读取数据保存到寄存器列表中的每一个寄存器中 批量寄存器地址增长方式 Ⅰ、ia后缀 先向基地址读写数据基地址再往大地址方向增长 Ⅱ、ib后缀 基地址先往大地址方向增长再向基地址读写数据 Ⅲ、da后缀 先向基地址读写数据基地址再往小地址方向增长 Ⅳ、da后缀 基地址先往小地址方向增长再向基地址读写数据 ③栈内存读写 压栈 push {寄存器列表} 出栈 pop {寄存器列表} 栈的分类 1、空栈和满栈 2、增栈和减栈 组合空增栈EA 空减栈ED 满增栈FA 满减栈FD 2.9状态寄存器传送指令 1、读状态寄存器指令 mrs 目标寄存器CPSR 读取CPSR寄存器数值保存到目标寄存器 2、修改状态寄存器 msr CPSR操作数 修改CPSR寄存器的数值为操作数 2.10软中断产生指令 1、swi 操作数 操作数是一个立即数就是产生软中断的中断号 异常模式和异常源