指令种类
- 数据传送指令
- 算数运算类指令
- 位操作类指令
- 串操作类指令
- 控制转移类指令
- 处理器控制类指令
数据传送类指令
传送类指令不影响标志位,**除了标志位传送指令外。**
传送指令MOV(move)
说明
把一个字节或字的操作数从源地址传送至目的地址。注意:不存在存储器向存储器的传送指令。
举例:
mov ax,es ;ax←es mov ds,ax ;ds←ax←es mov word ptr [si+2],0bh
注意:
两个操作数类型要一致.操作宽度
不允许段寄存器向段寄存器传送
操作
立即数到内存需要注意: 需要指明立即数要占多大内存 byte 表示字节 word 表示 字,寄存器不需要是因为他自带宽度属性
源操作数和目标数的长度必须一致,要么都是byte,要么都是word,个别指令除外,8位寄存器和16位寄存器相互赋值,会被系统转化成16位
段寄存器到内存需要指明宽度
段偏移的不同写法,推荐使用 [bp + si + 12 ]
交换指令XCHG(exchange)
说明
把两个地方的数据进行互换。不存在存储器向存储器的传送指令。
举例
1\. al, ah高低位交换 xchg al,ah 2.存储器 [2040]与[2050]交换 xchg ax,[2040] xchg ax,[2050] xchg ax,[2040]
注意
1.寄存器与寄存器之间可以对换数据
2.寄存器与存储器之间可以对换数据
3.不能在存储器与存储器之间对换数据
操作
寄存器到寄存器
寄存器到内存
换码指令XLAT
说明
•作用:将BX 指定的缓冲区中、AL指定的位移处的一个字节取出赋给AL 。即 : al <-- ds:[ bx + al ]
•该指令无操作数。
•用途:键盘的扫描码,需要转为ASCII 码,可以将扫描码做成表,扫描码作下标可以查到对应的ASCII 码
类似于 al = bx[al];
操作
堆栈操作指令
进栈(push reg)
说明
将标志寄存器的内容压入堆栈,同时栈顶指针SP减2
等同于 sub sp , 2 申请内存
mov [sp] , reg 吧数据存入内存
寄存器SP的值就是当前栈顶
操作
这里查看数据内存是 -d ss:fffo 是因为 sp寄存器的段基址 是 ss,sp是段偏移
8位寄存器,8位内存和还有立即数是不可以入栈的
出栈(pop reg)
说明
将栈顶单元内容送到标志寄存器,同时栈顶指针SP 加 2
等同于 mov reg, [sp] 把把数据传给变量
add sp , 2 释放内存
操作
保存所有寄存器环境
32位:pushad / popad
16位:pusha / popa
说明
将所有寄存器的值入栈或者出栈
一般用于函数,为了不影响其他函数的环境,自己先把寄存器环境入栈,自己操作完再出栈
操作
标志寄存器传送指令
标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作
•有2对4条指令
–低8位传送:LAHF和SAHF
–16位传送:PUSHF和POPF