汇编的使用总结

一、汇编的组成

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 目标寄存器,#(0x1<<N)

用来判断目标寄存器的第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 操作数

操作数是一个立即数,就是产生软中断的中断号

异常模式和异常源

相关推荐
Iceberg_wWzZ20 小时前
汇编知识点整理
汇编
m0_740740862 天前
汇编语法及相关指令
汇编
老薛爱吃大西瓜3 天前
关于ARM和汇编语言
汇编·arm开发
怪怪8793 天前
汇编基础语法及其示例
汇编
dot to one5 天前
C++入门 详细版
c语言·开发语言·汇编·c++
大块奶酪----6 天前
汇编与逆向(一)-汇编工具简介
汇编
€:0ͤ̀҉7 天前
汇编学习笔记(自用)
汇编·笔记·学习
撬动未来的支点11 天前
【汇编】汇编编程中的指令传参方式
汇编
一品人家11 天前
win32汇编环境,窗口程序中组合框的应用举例
汇编