当前位置: 首页 > news >正文

汇编基础1

1.格式

伪操作:它们不是ARM处理器实际的指令(如MOV, ADD等),而是写给汇编器看的命令,用于指导汇编器如何工作

    area reset, code, readonlycode32entry内容    end
  • area: 这是最重要的一个伪操作,用于定义一个段。程序、数据、堆栈等都需要被组织在不同的段中。
  • reset: 这是你为这个段起的名字。名字 reset 具有很强的暗示性,通常用于表示复位向量段,即CPU上电或复位后首先执行的第一段代码所在的位置。
  • code: 指定该段的属性为代码,意味着这个段包含可执行的指令。
  • readonly: 指定该段的属性为只读。对于代码段来说,这通常是默认且必须的。
  • code32: 表示后续指令使用 32位的 ARM 指令集。
  • thumb: 表示后续指令使用 16位的 Thumb 指令集

2.指令

2.1 mov

MOV{S}<c> <Rd>, #<const>
MOV{S}<c> <Rd>, <Rm>

mov r0, #0x8 //r0赋值为0x8
mov r1, r0    //r1赋值为r0即0x8
mov r3, #31    //r3赋值为31mov r0 #1
mov r6, r0, lsl #31    //将r0左移31位然后赋值给r6
mov r7, r0, lsl r3

2.2 add(加法)

立即数作为第二操作数: ADD{S}<c> <Rd>, <Rn>, #<const>
寄存器作为第二操作数寄存器: ADD{S}<c> <Rd>, <Rn>, <Rm>{, <shift>}
寄存器作为第二操作数移位量: ADD{S}<c> <Rd>, <Rn>, <Rm>, <type> <Rs>

add r6, r0, #0xF0 //r6 = r0 + 0xf0
add r7, r0, r1    //r7 = r0 + r1
add r7, r0, r1, lsl #1 // r7 = r0 + (r1 << 1)
add r8, r0, r1, lsl r2

注意

  • {, <shift>} 其中{}代表可选择,“,”表示在使用时需要在Rm后添加“,” ,shift 移位量(立即数)
  • add r0, #3, #2 :为什么没有这种形式,C语言int a = 1 + 2; 编译阶段计算, 不需要在机器指令中体现 

2.3 sub(减法)

用法同加法

2.4 ldr(加载)

LDR<c> <Rt>, <label>

ldr r0, =0xfff0

2.5 mvn(按位取反)

MVN{S}<c> <Rd>, #<const>
MVN{S}<c> <Rd>, <Rm>{, <shift>}
MVN{S}<c> <Rd>, <Rm>, <type> <Rs>

示例:
mvn r0 , #0xffffffff // r0 = 0x0

2.6 bic(指定位置清0)

BIC{S}<c> <Rd>, <Rn>, #<const>
BIC{S}<c> <Rd>, <Rn>, <Rm>{, <shift>}
BIC{S}<c> <Rd>, <Rn>, <Rm>, <type> <Rs>

示例:
bic r0, #(1 << 2)    //第二位清0
bic r0, #4           //0x0100 ,即第四位清0

orr:指定位置一

用法同bic

3.循环

循环三要素

  • 循环结束条件
  • 推动循环趋向终结的语句
  • 循环的循环体

3.1 b指令(标记位)

示例
ldr	r0, =0x0fffmov r1, #0xf00mov r2, #0xf000cmp r0, r1bge greater    //r0大于r1,执行greaterblt lessgreatermovge r3, r0b finish
lessmovlt r3, r1

3.2 循环

示例:从1加到100的和mov r0, #0mov r1, #0
loopadd r1, r1, r0add r0, r0, #1cmp r0, #100ble loop        //r0小于等于100, 就执行loop 
http://www.dtcms.com/a/372824.html

相关文章:

  • CSS @scope与12个降低css冲突方法
  • pytorch 中是如何实现embeding 的
  • 【.Net技术栈梳理】02-核心框架与运行时(GC管理)
  • 洗完头后根据个人需求选择合适的自然风干 | 电吹风 (在保护发质的同时,也能兼顾到生活的便利和舒适。)
  • 人才教育导向下:老年生活照护实训室助力提升学生老年照护服务能力
  • Typescript入门-类型断言讲解
  • 使用Pycharm进行远程ssh(以Featurize为例)
  • 云原生:微服务与Serverless指南
  • 时序数据库选型指南:大数据与物联网时代下的深度剖析与 Apache IoTDB 实践
  • Python 实现 HTML 转 Word 和 PDF
  • 亚马逊长尾关键词怎么找?从传统运营到DeepBI的智能策略演进
  • 打造高效Jenkins CICD环境全解析
  • 学习笔记:MYSQL(4)
  • Vue的响应式底层原理:Proxy vs defineProperty
  • Jenkins运维之路(初识流水线)
  • 内窥镜冷光源
  • Linux设备内存不足如何处理
  • 【JavaSE】复习总结
  • uview使用u-popup组件当开启遮罩层禁止下层页面滚动。uniapp弹框禁止页面上下滚动。
  • 爱普生喷墨打印机所有指示灯同时闪烁,不工作,怎么解决?
  • 这是一款没有任何限制的免费远程手机控制手机的软件
  • 【LCA 树上倍增】P9245 [蓝桥杯 2023 省 B] 景区导游|普及+
  • 【计算机网络】计算机网络英文名词速查
  • C++之queue类的代码及其逻辑详解
  • 36.Java序列化与反序列化是什么
  • 进阶向:HTTP性能优化实战
  • 对计算机网络模型的理解
  • 【Linux】MySQL数据目录迁移步骤(含流程图踩坑经验)
  • LangChain: Evaluation(评估)
  • 在电路浪涌测试中,TVS(瞬态电压抑制二极管)的防护效果确实会受到陪测设备中去耦网络(Decoupling Network,DN)的显著影响