常用汇编指令

常用汇编指令1 数据传送指令 movmover1 r2 r1 r2 mover1 4096 r1 4096 2 伪指令 ldr 用于将一个大于八位的数据装入寄存器 ldrr1 0x r1 0x ldrr1 label 获取绝对地址 即 label 的地址 label 3 内存访问指令 当 ldr 后面没有

1、数据传送指令 mov
move r1,r2 /r1=r2/
move r1,#4096 /r1=4096/

2、伪指令ldr 用于将一个大于八位的数据装入寄存器
ldr r1,=0x /r1=0x/
ldr r1,=label /获取绝对地址,即label的地址/
label:
  ……



3、内存访问指令(当ldr后面没有=时为内存访问指令)
读取指令:ldr
ldr r1 ,[r2,#4] /将内存地址为r2+4的数据读取到r1中,相当于C语言中的操作*/
ldr r1,[r2],#4 /将内存地址为r2的数据读取到r1中,再将地址加4,r2=r2+4/
ldr pc,_irq /pc=(_irq)将标号中的内容放入pc中
_irq:
  .word do_swi





4、批量内存访问指令 ldm stm
格式:ldm {cond}

{!} {^}

   stm {cond}

{!} {^}

格式说明:
1){cond}:表示指令的执行条件,根据cpsr寄存器中的条件标志位决定是否执行该条指令,每条ARM指令包含4bit的条件码域,
可以定义16个执行条件,具体如下表:
在这里插入图片描述 2)

表示地址变化模式,具体如下:

在这里插入图片描述
3) 中保存内存的地址,如果后面加上!,指令执行完成后,rn的值会更新,等于下一个内存的地址,否则保持初始值。
4)表示寄存器列表,对于ldm指令,从所对应的内存块中读取数据写入这些寄存器,对于stm把这些寄存器的值写入
对应的内存块中。如果寄存器地址连续,可以写成r1-rx的格式,不连续的用逗号隔开。^符号有两种含义:如果有pc寄存器,
它表示指令执行后,spsr寄存中的值将自动复制到cpsr寄存器中–这通常用于中断处理函数的返回;如果没有pc寄存器,那^表示操作的是
用户模式下的寄存器,而不是当前特权模式下的寄存器。
5)指令中与的对应关系为:编号低的寄存器对应内存中低地址单元,编号高的寄存器对应内存中高地址单元,具体如下:
在这里插入图片描述
















扩展:

ldmfd

add r1,r2,#1 /r1=r2+1/

减指令:sub

sub r1,r2,#1 /r1=r2-1/

乘指令:mul

mul r1,r2,#4 /r1=r24*/

6、程序状态寄存器访问指令
msr cpsr, r0 /* s<-r,r0的值复制到cpsr中*/

mrs r0,cpsr /r<-s,将cpsr的值复制到r0中/

7、相对跳转指令 b bl
1)这两条指令的区别在于bl除了跳转以外,还将返回地址(bl的下一条指令地址)保存在lr寄存器中
2)这两条指令的跳转范围是当前指令前后32M范围内
3)他们是位置无关的指令,相对跳转
e.g:
b fun1
fun1:
  bl fun2
fun2:
  …








8、其他指令
比较指令:cmp

cmp r1,r2 /*根据对比的结果设置cpsr寄存器的标志位,参考ARM指令条件码表

逻辑指令

位与:and(相当于&)

and r0,r1,#0xff /r0=r1&0xff/

位或:orr(相当于|)

orr r0,r1,#0xff /r0=r1|0xff/

清零:bic

bic r0,r0,#0x03 /将r0中的第一位和第二位清零/

测试:tst

tst r0,#0x20 /测试第六位是否为0,为0则将cpsr的Z位置1/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179029.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午3:59
下一篇 2026年3月26日 下午3:59


相关推荐

  • wireshark过滤规则及使用方法

    wireshark过滤规则及使用方法Wireshark基本语法,基本使用方法,及包过滤规则:1.过滤IP,如来源IP或者目标IP等于某个IP例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168.1.107 // 都能显示来源IP和目标IPLinux上运行的wireshark图形窗口截图示例,

    2022年7月13日
    24
  • Mac周边环境 goBASIC语言HelloWorld

    Mac周边环境 goBASIC语言HelloWorld

    2022年1月7日
    44
  • 门电路逻辑符号大全(三态门,同或门,异或门,或非门,与或非门, 传输门,全加器,半加器等)

    门电路逻辑符号大全(三态门,同或门,异或门,或非门,与或非门, 传输门,全加器,半加器等)原文地址 https blog csdn net qiuchangyong article details 相关文章 1 逻辑门 百度百科 https baike baidu com item E9 80 BB E8 BE 91 E9 97 A8 逻辑符号图册 https baike baidu com pic E9

    2026年3月16日
    2
  • booth算法

    booth算法booth 算法 1 booth 算法是什么 2 一个关于 Booth 算法的文章 3 一个关于 Booth 算法的文章 4 乘数按三位一组进行划分 5 Radix 4Booth 乘法器 1 booth 算法是什么 将乘数看作从最低位开始的一串二进制数字 Booth 算法的基本思路是 对于具有连续 0 和 1 的组 需要产生的部分积较少 对于乘数中每个 0 仅需要将前面的累加的部分积向右移动一位 举一个简单的例子 比如说计算 00 在这里首先将乘数 00 改写为 0 00000010

    2026年3月20日
    2
  • centos7.4安装docker_pythondocker

    centos7.4安装docker_pythondocker前言当我们在一台电脑上搭建了python3.6的环境,下次换台电脑,又得重新搭建一次,设置环境变量等操作。好不容易安装好,一会提示pip不是内部或外部命令,一会又提示pip:commandno

    2022年7月31日
    11
  • c++ stl 优先队列_低优先级队列要等几局

    c++ stl 优先队列_低优先级队列要等几局priority_queue文章目录priority_queuepriority_queue的使用priority_queue在OJ中的使用数组中第k个最大元素priority_queue模拟实现push的模拟实现pop模拟实现迭代器区间构造函数模拟实现size的模拟实现empty的模拟实现top的模拟实现swap的模拟实现仿函数typename仿函数的变异玩法翻译:优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元

    2026年2月21日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号