【MASM汇编语言快速入门】8086MASM机器指令速查

x86 机器指令速查

文中缩写对照:
为了方便表示和理解,文中采用了一些缩写,在此写出供同学们对照查阅:
下文的mem指内存单元,reg指寄存器,imm指立即数
m8/m16 指 8比特(字节)长度/16比特(字)长度的内存单元
r8/r16 指 8比特(字节)长度/16比特(字)长度的寄存器
i8/i16 指 8比特(字节)长度/16比特(字)长度的立即数
dest指目的操作数,src指源操作数

1. 数据传送指令

mov dest, src

(1) 功能: dest << src

(2) 不允许:

mem << mem

seg(段寄存器) << imm

cs << reg/mem

imm << any

seg << seg

数据宽度不同的传送

xchg dest, src

(1) 功能: dest <–> src (交换数据)

(2) 不允许:

mem <–> mem

xlat

(1) 功能: al << ds:[bx+al]

(2) 用途: 将一种编码转换为另一种编码 如数字0-9转为七段显示码

​ 例: 主存中建立字节表格, 表格内容是要转换的目标编码,首地址存放于bx,需要转换的码偏移地址设为al,设置好之后执行xlat

(3) 注意: al只有8b,所以表格最大长度为 2^8 = 64bit

2. 堆栈操作指令

push r16/m16/seg

(1) 功能: sp << sp - 2, ss:[sp] << r16/m16/seg

(2) 用途/说明: 将操作数入栈; 栈底高地址, 栈顶低地址, 入栈sp减小

pop r16/m16/seg

(1) 功能: r16/m16/seg << ss:[sp], sp << sp + 2

(2) 用途: 将栈顶出栈到指定地方

3. 标志传送指令

lahf

(1) 功能: ah << flags低字节

sahf

(1) 功能: flags低字节 << ah

pushf

(1) 功能: sp << sp - 2, ss:[sp] << flags (flags进栈)

popf

(1) 功能: flags << ss:[sp], sp << sp + 2 (栈顶出栈至flags)

4. 标志位操作

注: * = c/d/i => cf(进位标志)/df(方向标志)/if(允许可屏蔽中断标志)

cl*

(1) 功能: * << 0

st*

(1) 功能: * << 1

cmc

(1) 功能: cf << ~cf (cf取反)

5. 地址传送指令

lea r16, mem

(1) 功能: r16 << mem的有效地址

例: lea bx, [bx+si+0f62h] == mov bx, bx+si+0f62h (当然不允许这么写哈,但是这个意思)

lds/les r16, mem

(1) 功能: r16 << mem, ds/es << mem+2 (地址加2! 不是值加2)

6. 算术运算指令

add a, b

(1) 功能: a << a + b 并置标志位

(2) 不允许:

add imm, imm

add mem, mem

adc a, b

(1) 功能: a << a + b + cf 并置标志位

(2) 不允许:

add imm, imm

add mem, mem

inc r/m

(1) 功能: r/m << r/m + 1 并置标志位

sub a, b

(1) 功能: a << a - b 并置标志位

(2) 不允许:
sub imm, imm

sub mem, mem

sbb a,b

(1) 功能: a << a - b - cf 并置标志位

(2) 不允许:

sbb imm, imm

sbb mem, mem

dec r/m

(1) 功能: r/m << r/m - 1 并置标志位

neg r/m

(1) 功能: 求r/m的补码 == 0 - r/m

cmp a, b

(1) 功能: a - b 并置标志位 (与sub不同的是cmp不会改变a的值而sub会)

(2) 用途: 用于测试条件, 一般用于条件转移指令之前, 和test用途差不多

mul/imul x8

(1) 功能: ax << al * x

(x = r8/m8)

(mul为无符号乘, imul为有符号乘)

mul/imul x16

(1) 功能: (dx||ax) << ax * x16

(x16 = r16/m16)

((dx||ax)是指把dx和ax拼起来)

div/idiv x8

(1) 功能: al << ax / x 的商, ah << ax / x 的余数 (低商高余)

(x8 = r8/m8)

div/idiv x16

(1) 功能: ax << (dx||ax) / x

(x16 = r16/m16)

((dx||ax)是指把dx和ax拼起来)

7. 符号扩展指令

cbw

(1) 功能: al 符号扩展到 ax

符号扩展和机组的那个一样

cwd

(1) 功能: ax符号扩展到 (dx||ax)

((dx||ax)是指把dx和ax拼起来)

8. 位操作指令

所有的双操作数逻辑运算指令俊设置cf=of=0,并根据结果设置sf,zf,pf(奇偶标志)

and dest, src

(1) 功能: dest << dest && src

or dest, src

(1) 功能: dest << dest || src

xor dest, src

(1) 功能: dest << dest 异或 src

not r/m

(1) 功能: r/m << ~r/m (按位取反)

test dest, src

(1) 功能 dest && src

(2) 用途: 用于测试条件, 一般用于条件转移指令之前, 和cmp用途差不多

9. 移位指令

shl/r r/m, 1/cl

(1) 功能: r/m 逻辑左/右移 1/cl位 (移动位数大于1时要放到cl里面)

sal/r r/m, 1/cl

(1) 功能: r/m 算术左/右移 1/cl位 (移动位数大于1时要放到cl里面)

rol/r r/m, 1/cl

(1) 功能: r/m 循环左/右移 1/cl位 (移动位数大于1时要放到cl里面)

rcl/r r/m, 1/cl

(1) 功能: r/m 带进位(cf)循环左/右移 1/cl位 (移动位数大于1时要放到cl里面)

10. 控制转移指令

jmp label/r16/m16

(1) 功能: ip << label/r16/m16

(2) 扩展:

jmp short ptr xxx 跳转范围-128~127

jmp near ptr xxx 跳转范围-32768~32767

jmp far ptr xxx 这个不止会修改ip还会修改cs, 由于代码段过长,可能导致一个段放不下的跳转

jcc label

(1) 功能:满足条件"cc"则跳转到label,否则执行下一条指令

条件转移指令中的条件

11. 循环指令

loop 和 jcxz

(1) 功能

jcxz label                    	;cx == 0 则转移
loop label					  	;cx << cx - 1; 若cx != 0, 跳转到label, 否则顺序执行
loopz label					  	;cx << cx - 1; 若cx != 0 && zf == 1, 跳转到label, 否则顺序执行
loopnz label 					;cx << cx - 1; 若cx != 0 && zf == 0, 跳转到label, 否则顺序执行

(2)用法: cx为0直接跳出循环,否则循环循环体cx次

循环指令的典型应用

12. 子程序指令

call label/r16/m16

(1) 功能: sp << sp - 2, ss:[sp] << ip, ip << xxx

(2) 扩展

call short ptr xxx 跳转范围-128~127

call near ptr xxx 跳转范围-32768~32767

call far ptr xxx 这个不止会修改ip还会修改cs, 由于代码段过长,可能导致一个段放不下的跳转

ret

(1) 功能: ip << ss:[sp], sp << sp+2

(2) 扩展:

带参数返回ret imm16

功能: ip << ss:[sp], sp << sp+2, sp << sp + imm16

用途: 废除若干执行call指令以前入栈的参数

13. 中断指令

int imm8

(1) 功能: 产生imm8号中断

iret

(1) 功能: 中断返回

into

(1) 功能: 若of=1则产生4号中断, 否则顺序执行

14. 处理机控制指令

nop

(1) 功能: xchg ax, ax

(2) 用途: 不执行有意义的操作,占用1B的存储单元, 并空消耗一个周期

lock

(1) 功能: 封锁总线, 使得别的处理机不能控制总线

hlt

(1) 功能: 使得cpu暂停, 直到遇到复位信号或中断

esc imm6, r/m

(1) 功能: 将执行权交给浮点处理器, imm6是浮点处理器的操作码, r/m是浮点处理器的操作数

wait

(1) 功能: cpu进入等待状态直到测试引脚为低电平

(2) 用途: 用于与浮点处理器进行同步(cpu快, 浮点慢), 浮点处理器处理完会给cpu发信号,这时cpu可以继续执行指令

  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值