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

汇编常用语法

  1. GNU汇编语句

    [lable:] instruction [@comment]

    lable 表示标号,表示地址位置,可选.

    instruction即指令,也就是汇编指令或伪指令。

    comment 就是注释内容。

  2. 用户使用.section 伪操作来定义一个段,汇编系统预定义了一些段名:

.text :代码段,只读的代码信息。

.data :初始化的数据段,初始化的全局变量和局部静态变量。

.bss :未初始化的数据段,未初始化的全局变量和局部静态变量,使用动态的变量来初始化。

.rodata :只读数据段,const修饰的static 变量都,以及一些字面量。

我们当然可以自己使用.section 来定义一个段,每个段以段名开始,以下一段名或者文件结尾结束,比如:

.section .section_name @定义了一个testsection段。

3. 伪指令:对会汇编过程进行控制的代码,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编陈旭提供汇编信息。相当于c语言关键字,汇编代码种全大写的很可能是伪指令,或者宏。

(1)伪指令只会存在汇编语言中,在其他代码中叫语句。

(2)伪指令,不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。

例如,.global,.byte, .section都是伪指令

4. 汇编中的函数定义:

函数名:函数体返回语句5. 常见的指令:
处理器(cpu)内部数据传输指令:
指令目的描述
movR0R1将R1复制到R0
MRSR0CPSR将特殊寄存器CPSR里面的数据复制到R0中
MSRCPSRR1将R1里面的数据复制到特殊寄存器CPSR中

存储器访问指令:外设寄存器属于存储器的一种,

指令描述
LDR Rd, [Rn, #offset]从存储器Rn+offset的位置读取数据存放到Rd中。
STR Rd, [Rn, #offset]将Rd中的数据写入到存储器中的Rn+offset位置。

压栈和出栈指令:

指令描述
PUSH <req list>将寄存器列表存入栈中。
POP <req list>从栈中恢复寄存器列表。

跳转指令:

(1)直接跳转指令B,BL,BX等

(2)直接向PC寄存器里面写入数据。

算术运算指令:

ADD, ADC (带进位),SUB(减法),MUL(乘法),UDIV(无符号除法),SDIV(有符号除法)

逻辑运算指令:与或非异或。

http://www.dtcms.com/a/171361.html

相关文章:

  • Spring的数据库编程
  • Linux:web服务
  • Warp调度器:藏在显卡里的时间管理大师
  • 【vue3】黑马程序员前端Vue3小兔鲜电商项目【八】
  • Flowable7.x学习笔记(十九)归还我的待办
  • ARM寻址方式
  • 【时时三省】(C语言基础)怎样定义和引用一维数组
  • 【Redis】Redis常用命令
  • 排序功法入门指南【江湖算法笔记】
  • 13.Excel:分列
  • 【论文阅读】LLMOPT:一种提升优化泛化能力的统一学习框架
  • Cona编译问题
  • 工程师 - What is EMF?
  • 工程师 - 小米汽车尾部主动扩散器
  • 文章记单词 | 第64篇(六级)
  • 湖仓一体架构解析:如何平衡数据灵活性与分析性能?
  • 五一作业-day01
  • 从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 3 |混合定位实战:Wi-Fi RTT / LoRa / BLE RSSI AoA 多源融合
  • Python3与Dubbo3.1通讯解决方案(dubbo-python)
  • java技术总监简历模板
  • device_create_sys_dev_entry
  • YOLOv7细节解读
  • 虚函数 vs 纯虚函数 vs 静态函数(C++)
  • 在Qt Creator中使用CUDA
  • 25.5.4数据结构|哈夫曼树 学习笔记
  • mysql中int(1) 和 int(10) 有什么区别?
  • 基于python的task--时间片轮询
  • 【Redis】哈希(hash)与列表(list)
  • 【赵渝强老师】TiDB的MVCC机制
  • 【MySQL数据库】用户管理