汇编的使用总结

一、汇编的组成

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 操作数

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

异常模式和异常源

相关推荐
资料,小偿2 天前
4.1.2基于51单片机汇编语言出租车计价器proteus仿真出租车计价器,汇编语言51单片机
汇编·51单片机·proteus
ol木子李lo4 天前
Visual studio 2022高亮汇编(ASM)语法方法
汇编·ide·windows·visual studio
资料,小偿5 天前
4.1.1基于51单片机汇编语言出租车计价器可切换白天黑夜,可修改价格
汇编·51单片机·proteus
embrace995 天前
【C语言学习】数据在内存中存储
java·c语言·开发语言·汇编·c++·学习·算法
T.Ree.11 天前
汇编_mov指令
汇编
CC-NX12 天前
32位汇编:实验12动态链接库
汇编
资料,小偿12 天前
4.101基于8086国旗图案proteus8.9,8086彩灯图案流水灯图案,国期图案仿真,四个开关四种模式。近期本人原创
汇编·proteus
资料,小偿15 天前
4.29.3五种波形发生器8086波形发生器,锯齿波脉冲波正弦波三角波直流信号含调试视频➕18页5000字原创报告软件流程图proteus8.9近期原创的,
汇编·proteus
T.Ree.15 天前
汇编_读写内存
开发语言·汇编·c#
量子炒饭大师16 天前
【一天一个计算机知识】—— 【编程百度】翻译环境与运行环境
c语言·汇编·c++·gitee·机器翻译