已阅读5页,还剩85页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
3 3arm微处理器的指令系统 3 3 1指令集概述3 3 2寻址方式3 3 3指令集 3 3 1指令集概述 指令长度指令集可以是以下任一种32bits长 arm状态 16bits长 thumb状态 arm7tdmi支持3种数据类型字节 8 bit 半字 16 bit 字 32 bit 字必须被排成4个字节边界对齐 半字必须被排列成2个字节边界对齐 arm指令集的特点 向后兼容 新版本增加指令 并保持指令向后兼容 load store结构 load store 从存储器中读某个值 操作完后再将其放回存储器中只对存放在寄存器的数据进行处理 对于存储器中的数据 只能使用load store指令进行存取 指令格式 指令格式在arm状态中使用 指令编码格式 cond指令执行的条件编码opcode指令操作符编码s决定指令的操作是否影响cpsr的值rd操作目标寄存器编码rn包含第一操作数的寄存器编码shifter operand表示第二操作数 条件码标志 任何数据处理指令都可以设置条件码 n z v andc 适用于除比较操作外的所有数据处理指令特殊的请求必须在汇编语言中实现 这种请求是通过把 s 增加到选择代码中指定的算术操作设置所有的标志位 n z c andv 逻辑和移位操作设置nandz 条件码标志 下表为所有可能的条件码 注意 al为默认状态 不需要单独指出 条件执行示例 一系列的指令都使用条件指令if a 0 func 1 cmpr0 0moveqr0 1 把func 函数的参数赋给r0bleqfunc置标志位 再使用不同的条件码if a 0 x 0 r0 a r1 xif a 0 x 1 cmpr0 0moveqr1 0movgtr1 1使用条件比较指令if a 4 a 10 x 0 cmpr0 4cmpner0 10moveqr1 0 桶形移位器 桶形移位器的使用 支持第二操作数的移位 逻辑移位 空位以零补充lsl 逻辑左移 字的最小位空位清零lsr 逻辑右移 字的最大位空位清零 算术移位 asr lsrasl 算术左移 算术移位的对象是带符号数 在移位过程中必须保持操作数的符号不变 若源操作数为正数 则字的高端空出的位补0 若源操作数为负数 则字的高端空出的位补1 循环移位 ror 循环右移 rotateright 从字的最低端移出的位填入字的高端空出的位 rrx 扩展为1的循环右移 rotaterightextendedby1place 操作数右移一位 空位 位 31 用原c标志填充 数据处理指令 立即数操作 移位寄存器操作数第二个操作数在与第一个操作数合成之前 是服从于移位操作的 arm指令分类 存储器访问指令 把存储器的值拷贝到寄存器中 load or把寄存器中的值拷贝到存储器中 store 数据处理指令 使用和改变寄存器的值控制流指令分支分支和链接 保存返回的地址 以恢复最先的次序软件中断指令程序状态寄存器指令协处理器指令 3 3 2寻址方式 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式 arm处理器具有9种基本寻址方式 寻址方式分类 1 寄存器寻址 2 立即数寻址 3 寄存器移位寻址 4 寄存器间接寻址 5 基址寻址 6 多寄存器寻址 7 堆栈寻址 8 块拷贝寻址 9 相对寻址 操作数的值在寄存器中 指令中的地址码字段指出的是寄存器编号 指令执行时直接取出寄存器值来操作 寄存器寻址指令举例如下 movr1 r2 将r2的值存入r1subr0 r1 r2 将r1的值减去r2的值 结果保存到r0 movr1 r2 0 xaa 寻址方式分类 寄存器寻址 立即寻址指令中的操作码字段后面的地址码部分即是操作数本身 也就是说 数据就包含在指令当中 取出指令也就取出了可以立即使用的操作数 这样的数称为立即数 立即寻址指令举例如下 subsr0 r0 1 r0减1 结果放入r0 并且影响标志位movr0 0 xff000 将立即数0 xff000装入r0寄存器 寻址方式分类 立即寻址 movr0 0 xff00 0 xff00 从代码中获得数据 寄存器移位寻址是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位 寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号 所需的操作数保存在寄存器指定地址的存储单元中 即寄存器为操作数的地址指针 寄存器间接寻址指令举例如下 ldrr1 r2 将r2指向的存储单元的数据读出 保存在r1中swpr1 r1 r2 将寄存器r1的值和r2指定的存储 单元的内容交换 寻址方式分类 寄存器间接寻址 ldrr0 r2 0 xaa 基址寻址就是将基址寄存器的内容与指令中给出的偏移量 4k 相加 减 形成操作数的有效地址 基址寻址用于访问基址附近的存储单元 常用于查表 数组操作 功能部件寄存器访问等 寄存器间接寻址是偏移量为0的基址加偏移寻址 基址寻址指令举例如下 前索引寻址 ldrr2 r3 0 x0c 读取r3 0 x0c地址上的存储单元 的内容 放入r2strr1 r0 4 先r0 r0 4 然后把r0的值寄存 到保存到r1指定的存储单元 寻址方式分类 基址寻址 ldrr2 r3 0 x0c 0 xaa 将r3 0 x0c作为地址装载数据 基址寻址指令举例如下 ldrr0 r1 4 r0 r1 r1 r1 4 后索引基址寻址 arm这种自动索引机制不消耗额外的时间ldrr0 r1 r2 r0 r1 r2 寻址方式分类 基址寻址 多寄存器寻址一次可传送几个寄存器值 允许一条指令传送16个寄存器的任何子集或所有寄存器 多寄存器寻址指令举例如下 ldmiar1 r2 r7 r12 将r1指向的单元中的数据读出到 r2 r7 r12中 r1自动加4 stmiar0 r2 r7 r12 将寄存器r2 r7 r12的值保 存到r0指向的存储 单元中 r0自动加4 寻址方式分类 多寄存器寻址 ldrr1 r2 r4 r6 0 x40000000 堆栈是一个按特定顺序进行存取的存储区 操作顺序为 后进先出 堆栈寻址是隐含的 它使用一个专门的寄存器 堆栈指针 指向一块存储区域 堆栈 指针所指向的存储单元即是堆栈的栈顶 存储器堆栈可分为两种 向上生长 向高地址方向生长 称为递增堆栈向下生长 向低地址方向生长 称为递减堆栈 寻址方式分类 堆栈寻址 寻址方式分类 堆栈寻址 0 x12345678 0 x12345678 堆栈指针指向最后压入的堆栈的有效数据项 称为满堆栈 堆栈指针指向下一个待压入数据的空位置 称为空堆栈 寻址方式分类 堆栈寻址 0 x12345678 所以可以组合出四种类型的堆栈方式 满递增 堆栈向上增长 堆栈指针指向内含有效数据项的最高地址 指令如ldmfa stmfa等 空递增 堆栈向上增长 堆栈指针指向堆栈上的第一个空位置 指令如ldmea stmea等 满递减 堆栈向下增长 堆栈指针指向内含有效数据项的最低地址 指令如ldmfd stmfd等 空递减 堆栈向下增长 堆栈指针向堆栈下的第一个空位置 指令如ldmed stmed等 寻址方式分类 堆栈寻址 多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置 如 stmiar0 r1 r7 将r1 r7的数据保存到存储器中 存储指针r0在保存第一个值之后增加 增长方向为向上增长 stmibr0 r1 r7 将r1 r7的数据保存到存储器中 存储指针r0在保存第一个值之前增加 增长方向为向上增长 寻址方式分类 块拷贝寻址 相对寻址是基址寻址的一种变通 由程序计数器pc提供基准地址 指令中的地址码字段作为偏移量 两者相加后得到的地址即为操作数的有效地址 相对寻址指令举例如下 blsubr1 调用到subr1子程序beqloop 条件跳转到loop标号处 loop movr6 1 subr1 寻址方式分类 相对寻址 3 3 3指令集 指令分类 1 存储器访问指令 把存储器的值拷贝到寄存器中 load or把寄存器中的值拷贝到存储器中 store 2 数据处理指令 使用和改变寄存器的值 3 控制流指令分支分支和链接 保存返回的地址 以恢复最先的次序 4 软件中断指令 5 程序状态寄存器指令 6 协处理器指令 7 伪指令 1 存储器访问指令 1 单寄存器数据传送 ldr str 2 多寄存器数据传送 ldm stm 3 寄存器和存储器交换指令swp 单字 32bit 半字 6bit 以及字节 8bit 传送寻址寄存器偏移地址 基址 寄存器偏移立即数偏移地址 基址 立即数常数后变址post indexing modifyaddressafteruse前变址pre indexing modifyaddressbeforeuse回写如果可能 更新基址寄存器 1 单指令传送 ldr str 单寄存器传送指令 寻址方式 例子 prer0 0 x00000000 r1 0 x00009000 mem32 0 x00009000 0 x01010101mem32 0 x00009004 0 x02020202回写型前变址寻址 ldrr0 r1 0 x4 postr0 0 x02020202 r1 0 x00009004前变址寻址 ldrr0 r1 0 x4 postr0 0 x02020202 r1 0 x00009000后变址寻址 ldrr0 r1 0 x4postr0 0 x01010101 r1 0 x00009004 数据传送指令 5 2 多寄存器数据传送指令 ldm stm load ldm 或store stm 当前可访问寄存器的任意子集使用堆栈 maintainingfulloremptystackswhichcangrowupordownmemory上下文切换 保存或重新存储工作寄存器块拷贝 在主存储器中移动大数据块寻址pre postindexingautoincrementordecrement回写到基址寄存器writebackthebaseregister 多寄存器数据传送指令的要点 多寄存器load store指令会增加中断的延迟 因为arm不会打断正在执行的指令去响应中断 而必须等到指令执行完成 一般编译器将提供一个选项以控制load store指令可以传送的最大寄存器数目 以限制最大中断延迟 多寄存器传送指令的寻址模式 注 决定rn的值是否随着传送而改变 例子 要求 保存r1 r3到内存地址0 x9000 0 x900c 并且更新基址寄存器r4pre r1 0 x00000001 r2 0 x00000002 r3 0 x00000003 r4 0 x9000执行操作 stmiar4 r1 r2 r3 执行后增加 post mem32 0 x9000 0 x00000001mem32 0 x9004 0 x00000002mem32 0 x9008 0 x00000003r4 0 x900c 多寄存器传送寻址模式 例 将存储器中的连续数据装载到寄存器 pre mem32 0 x80018 0 x03 mem32 0 x80014 0 x02 mem32 0 x80010 0 x01 r0 0 x00080010 r1 0 x00000000 r2 0 x00000000 r3 0 x00000000执行指令 ldmiar0 r1 r3 post r0 0 x0008001c r1 0 x00000001 r2 0 x00000002 r3 0 x00000003 例 完成一个存储器数据块拷贝 注 r9 存放源数据的起始地址r10 存放目标起始地址r11 存放源结束地址loop ldmiar9 r0 r7 装载32字节并更新r9指针stmiar10 r0 r7 存储32字节并更新r10指针cmpr9 r11 是否到达结束地址bneloop 不相等跳转 堆栈操作 arm使用多寄存器load store指令来完成堆栈操作 使用堆栈时 需要确定堆栈在存储空间中是向上生长 递增的 a 还是向下生长 递减的 d 满堆栈 f 是指堆栈指针指向堆栈的最后一个已使用的地址或满位置 相反 空堆栈 e 是指sp指向堆栈的第一个没有使用的地址或空位置 堆栈操作寻址方式 堆栈 arm堆栈操作通过块传送指令来完成 stmfd push 块存储 fulldescendingstack stmdb ldmfd pop 块装载 fulldescendingstack ldmia stmfdsp r4 r7 lr 8034 例 把寄存器内容放入堆栈 更新sp pre r1 0 x00000002 r4 0 x00000003 sp 0 x00080014执行指令 stmfdsp r1 r4 post r1 0 x00000002 r4 0 x00000003 sp 0 x0008000c 在寄存器和存储器之间 由一次存储器读和一次存储器写组成的原子操作 完成一个字节或字的交换 语法 swp b rd rm rn 3 单数据交换指令 swap swap指令的用法 premem32 0 x9000 0 x12345678 r0 0 x00000000 r1 0 x11112222 r2 0 x00009000执行操作 swpr0 r1 r2 post mem32 0 x9000 0 x11112222 r0 0 x12345678 r1 0 x11112222 r2 0 x00009000交换指令多用于实现操作系统中的信号量和互斥操作 该指令有修饰符b 即有字交换和字节交换两种形式 2 数据处理指令 1 数据传送指令 mov mov指令是把一个数n送到目标寄存器中 n可以是寄存器 也可以是立即数 mov指令语法 指令 cond s rd n pre r0 8 r2 5movr0 r2 lsl 2 逻辑左移两位 r2 2 5 4 post r0 20 r2 5 例 pre r0 5 r2 6movr0 r2post r0 6 r2 6 2 数据处理指令 立即数操作 移位寄存器操作数第二个操作数在与第一个操作数合成之前 是服从于移位操作的 任何数据处理指令都可以设置条件码 n z v andc 适用于除比较操作外的所有数据处理指令特殊的请求必须在汇编语言中实现 这种请求是通过把 s 增加到选择代码中指定的算术操作设置所有的标志位 n z c andv 逻辑和移位操作设置nandz 3 乘法指令集 在寄存器产生32位值 例子 乘法 乘法累加器 注意最低32 bits置于结果寄存器中 其余被忽略不支持第二立即操作数结果寄存器与源寄存器必须不同 4 控制和分支指令 在arm中有两种方式可以实现程序的跳转 一种是使用分支指令直接跳转 另一种则是直接向pc寄存器赋值实现跳转 分支指令有以下三种 1 分支指令b 2 带链接的分支指令bl 3 带状态切换的分支指令bx arm分支指令 指令编码 分支指令b bl指令编码格式 指令执行的条件码 l区别b指令 l为0 和bl指令 l为1 24位有符号立即数 偏移量 分支指令bx指令编码格式 指令执行的条件码 rm目标地址寄存器 该寄存器装载跳转地址 arm指令 分支指令 1 分支指令b 分支指令 b指令 该指令跳转范围限制在当前指令的 32m字节地址内 arm指令为字对齐 最低2位地址固定为0 指令格式如下 b cond label应用示例 bwaita 跳转到waita标号处b0 x1234 跳转到绝对地址0 x1234处 2 带链接的分支指令bl 带链接的分支指令 bl指令适用于子程序调用 使用该指令后 下一条指令的地址被拷贝到r14 即lr 连接寄存器中 然后跳转到指定地址运行程序 跳转范围限制在当前指令的 32m字节地址内 指令格式如下 bl cond label 1 当程序执行到bl跳转指令时 硬件将下一条指令的地址addr2装入lr寄存器 并把跳转地址装入程序计数器 pc 程序跳转到目标地址label继续执行 当子程序执行结束后 将lr寄存器内容存入pc 返回调用函数继续执行 应用示例 调用子程序 bllabel 3 带状态切换的分支指令 带状态切换的分支指令 bx指令 该指令可以根据跳转地址 rm 的最低位来切换处理器状态 指令格式如下 bx cond rm arm指令 分支指令 带状态切换的分支指令 bx指令 该指令可以根据跳转地址 rm 的最低位来切换处理器状态 rm的位 0 不用作地址的一部分 若rm的位 0 为1 则指令将cpsr中的标志t置位 且将目标地址的代码解释为thumb代码 若rm的位 0 为0 则rm的位 1 就不能为1 指令格式如下 bx cond rm 应用示例 adrlr0 thumbfun 1 将thumb程序的入口地址加1存入r0bxr0 跳转到r0指定的地址 并根据r0的最低位来切换处理器状态 分支和链接指令 分支子程序 r14servesasalinkregister 嵌套子程序 fulldescending 4 软件中断 swi 产生一个异常陷阱 跳转到swi硬件向量 swi处理程序可以检测swi号 从而决定采取何种操作 通过swi机制 运行在用户模式下的应用程序 可请求操作系统执行一系列特权操作 语法 swi 软件中断 swi 执行的操作 swi中断处理程序 处理软件中断的代码段称为中断处理程序 swihandler 中断处理程序是通过执行指令的地址获取软件中断号 指令地址是从lr计算出来的 swi号的确定方法 swi number andnot 0 xff000000 0 swi处理程序应用示例 swi handler 保存寄存器r0 r12和lrstmfdsp r0 r12 lr readtheswiinstructionldrr10 lr 4 makeofftop8bitsbicr10 r10 0 xff000000 r10 containstheswinumberblservice routine returnfromswihandlerldmfdsp r0 r12 pc 在swi异常中断处理程序中 取出swi指令中立即数的步骤为 首先确定引起软中断的swi指令是arm指令还是thumb指令 这可通过对spsr访问得到 然后取得该swi指令的地址 这可通过访问lr寄存器得到 接着读出该swi指令 分解出立即数 swi handlerstmfdsp r0 r3 r12 lr 现场保护mrsr0 spsr 读取spsrstmfdsp r0 保存spsrtstr0 0 x20 测试t标志位ldrnehr0 lr 2 若是thumb指令 读取指令码 16位 bicner0 r0 0 xff00 取得thumb指令的8位立即数 低8位 ldreqr0 lr 4 若是arm指令 读取指令码 32位 biceqr0 r0 0 xff000000 取得arm指令的24位立即数 低23位 ldmfdsp r0 r3 r12 pc swi异常中断返回 ne z 0eq z 1 5 程序状态寄存器访问指令 程序状态寄存器访问指令 mrs msr mrs程序状态寄存器到通用寄存器的数据传送指令msr通用寄存器到程序状态寄存器的数据传送指令 psr传送指令 mrs和msr允许传送cpsr spsr中的内容到 从一个通用寄存器中 语法 mrs rd rd msr rm rm在这里 cpsrorspsr fields fsxc 的任意组合也允许送一个立即数到psr fieldsmsr immediate用户模式下 所有位均可以被读取 但只有条件标志位 可被写 状态寄存器访问指令示例 在arm处理器中 只有msr指令可以对状态寄存器cpsr和spsr进行写操作 与mrs配合使用 可以实现对cpsr或spsr寄存器的读 修改 写操作 可以切换处理器模式 或者允许 禁止irq fiq中断等 6 协处理器指令 1 协处理器一般原理是通过增加核扩展指令集example 如mmu cache fpu等系统控制器寄存器协处理器专用arm控制数据流协处理器只包含数据处理和存贮器传送操作协处理器数据操作 cdp 这类指令是用来告诉协处理器执行某些内部操作无结果返回arm arm并不等待操作完成 6 协处理器指令 2 arm体系支持16个协处理器针对每个协处理器的指令占用arm指令集中的固定部分如果相应的协处理器不存在 将发生一个未定义指令异常 这有三种协处理器指令协处理器数据处理指令cdp 初始化协处理器数据处理操作协处理器寄存器传送指令mcr 从arm寄存器移到协处理器寄存器mrc 从协处理器寄存器移到arm寄存器协处理器存储器传送指令ldc 从存储器装载到协处理器寄存器stc 从协处理器寄存器存储到存储器 7 arm伪指令 arm伪指令不属于arm指令集中的指令 但是可以像其它arm指令一样使用 伪指令为了编程方便而定义的 在编译时这些指令将被等效的一条或多条arm指令所代替 arm伪指令有四条 分别 adr伪指令adrl伪指令ldr伪指令nop伪指令 地址表达式expr的取指范围 当地址值是字节对齐时 其取指范围为 255 255 当地址值是字对齐时 其取指范围为 1020 1020 1 arm伪指令 小范围的地址读取 adr伪指令将基于pc相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 编译源程序时 通常 编译器用一条add指令或sub指令来实现该adr伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 1 arm伪指令 小范围的地址读取 adr伪指令将基于pc相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 编译源程序时 通常 编译器用一条add指令或sub指令来实现该adr伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 应用示例 源程序 使用伪指令将程序标号delay的地址存入r0 adrr0 delay delaymovr0 r14 0 x20addr0 pc 0 x3c 0 x64movr0 r14 adr伪指令将基于pc相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 编译源程序时 通常 编译器用一条add指令或sub指令来实现该adr伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 adrr0 delay delaymovr0 r14 应用示例 源程序 编译后的反汇编代码 使用伪指令将程序标号delay的地址存入r0 地址 程序代码 1 arm伪指令 小范围的地址读取 adr伪指令将基于pc相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 编译源程序时 编译器用一条add指令或sub指令来实现该adr伪指令的功能 若不能用一条指令实现 则产生错误 编译失败 adrr0 delay delaymovr0 r14 应用示例 源程序 0 x20addr0 pc 0 x3c 0 x64movr0 r14 编译后的反汇编代码 使用伪指令将程序标号delay的地址存入r0 adr伪指令被汇编成一条指令 1 arm伪指令 小范围的地址读取 3 应用示例2 查表 adrr0 disp tab 加载转换表地址ldrbr1 r0 r2 使用r2作为参数 进行查表 disp tab dcb0 xc0 0 xf9 0 xa4 0 xb0 0 x99 0 x92 0 x82 0 xf8 2 arm伪指令 中等范围的地址读取 adrl伪指令将基于pc相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比adr伪指令可以读取更大范围的地址 编译源程序时 adrl伪指令被编译器替换成两条合适的指令 若不能用两条指令实现 则产生错误 编译失败 地址表达式expr的取指范围 当地址值是字节对齐时 其取指范围为 64k 64k 当地址值是字对齐时 其取指范围为 256k 256k adrlr0 delay delaymovr0 r14 应用示例 源程序 使用伪指令将程序标号delay的地址存入r0 adrl伪指令将基于pc相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比adr伪指令可以读取更大范围的地址 编译源程序时 adrl伪指令被编译器替换成两条合适的指令 若不能用两条指令实现 则产生错误 编译失败 2 arm伪指令 中等范围的地址读取 adrlr0 delay delaymovr0 r14 应用示例 源程序 0 x20addr0 pc 400 x24addr0 r0 ff00 0 xff68movr0 r14 编译后的反汇编代码 使用伪指令将程序标号delay的地址存入r0 地址 程序代码 adrl伪指令将基于pc相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比adr伪指令可以读取更大范围的地址 编译源程序时 adrl伪指令被编译器替换成两条合适的指令 若不能用两条指令实现 则产生错误 编译失败 2 arm伪指令 中等范围的地址读取 adrlr0 delay delaymovr0 r14 应用示例 源程序 0 x20addr0 pc 400 x24addr0 r0 ff00 0 xff68movr0 r14 编译后的反汇编代码 使用伪指令将程序标号delay的地址存入r0 adrl伪指令被汇编成两条指令 adrl伪指令将基于pc相对偏移的地址值或基于寄存器相对偏移的地址值读取到寄存器中 比adr伪指令可以读取更大范围的地址 编译源程序时 adrl伪指令被编译器替换成两条合适的指令 若不能用两条指令实现 则产生错误 编译失败 2 arm伪指令 中等范围的地址读取 3 arm伪指令 大范围的地址读取 ldr伪指令用于加载32位的立即数或一个地址值到指定寄存器 在汇编编译源程序时 ldr伪指令被编译器替换成一条合适的指令 若加载的常数未超出mov或mvn的范围 则使用mov或mvn指令代替该ldr伪指令 否则汇编器将常量放入文字池 并使用一条程序相对偏移的ldr指令从文字池读出常量 注意 1 从指令位置到文字池的偏移量必须小于4kb 2 与arm指令的ldr相比 伪指令的ldr的参数有 号 应用示例 加载常量 ldrr2 0 xff0 movr2 0 xff0ldrr0 0 xff000000 movr0 0 xff000000ldrr1 0 xfffffffe mvnr1 0 x1 ldr伪指令用于加载32位的立即数或一个地址值到指定寄存器 在汇编编译源程序时 ldr伪指令被编译器替换成一条合适的指令 若加载的常数未超出mov或mvn的范围 则使用mov或mvn指令代替该ldr伪指令 否则汇编器将常量放入文字池 并使用一条程序相对偏移的ldr指令从文字池读出常量 3 arm伪指令 大范围的地址读取 应用示例 加载地址 ldrr1 initstack initstackmovr0 lr 使用伪指令将程序标号initstack的地址存入r1 ldr伪指令用于加载32位的立即数或一个地址值到指定寄存器 在汇编编译源程序时
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026云南文山州文山市人力资源和社会保障局第三期城镇公益性岗位人员招聘6人笔试备考试题及答案详解
- 2026年辽宁锦州市图书馆公益性岗位招聘3人笔试备考试题及答案详解
- 2026二季度重庆市九龙坡区事业单位遴选35人笔试备考题库及答案详解
- 2026福建宁德霞浦公安招聘警务辅助人员40人笔试备考试题及答案详解
- 2025年三门峡陕州农村商业银行人员招聘笔试考试试题及答案详解
- 2026湖南永州市教育类急需紧缺专业人才引进62人(第二批)笔试参考题库及答案详解
- 2026中国科学院遗传与发育生物学研究所农业资源研究中心王仕琴研究团队工作人员招聘2人笔试模拟试题及答案详解
- 2026福建泉州安溪县人民法院招聘工作人员3人笔试参考题库及答案详解
- 2026福建三明学院招聘科研助理5人笔试模拟试题及答案详解
- 2026广西贺州市第六人民医院招聘合同制救护车司机2人笔试备考题库及答案详解
- 肝胆外科术后并发症护理
- 2026年荆门市东宝区社区工作者招聘考试笔试试题及答案解析
- 广铁集团校招机考题库
- 2025年广东省深圳市福田区小升初语文试卷
- TSG08-2026《特种设备使用管理规则》解读
- 2026年等离子体物理考研复试高频面试题包含详细解答
- 2025黑龙江省农业投资集团有限公司权属企业市场化选聘10人笔试参考题库附带答案详解(3卷)
- 江苏师范大学本科毕业论文开题报告格式
- 做账实操-高新技术行业会计真账实操 SOP
- GB/T 32684-2025塑料酚醛树脂游离甲醛含量的测定
- 智能化环境风险评估-洞察与解读
评论
0/150
提交评论