8086的指令有6大类,分别是:数据传送指令、算术运算指令、逻辑运算和移位指令、控制转移指令和处理器控制指令。接下来,分为六个模块为大家总结。
| 指令名 |
要点 |
| MOV |
理解为移动move就好;若要在存储单元之间或段寄存器之间移动,则要通过通用寄存器作为媒介。 |
| PUSH |
每次PUSH之前,注意SP的值,要先修改SP (SP <-- SP–2) |
| POP |
每执行一次POP,SP <-- SP+2 |
| XCHG |
读为X,change就记住啦。就是交换值。 |
| XLAT |
意思是“转换表”,这个要结合例题比较好理解, 强烈建议看书,或者百度。 |
| IN |
input指令:即连接端口时使用的指令。 注意:当端口地址为两位16进制数,可以直接input。但是当地址为四位16进制数,要先将端口号送入DX寄存器,再IN。 |
| OUT |
即将AX/AL中的数据写到端口去。 |
| LEA |
Load effective address,从名字看出,就是取地址的偏移量 |
| LDS |
这个有一点复杂。即将源操作数对应的双字节,低字节送到目标操作数,高字节放到DS。 |
| LAHF |
即Load AH from Flags,把标志位都放到AH去。 |
| SAHF |
这个和LAHF是反过来的,把AH的值写道标志位去。 |
| POPF |
就是pop到flags去。 |
| 类别 |
要点 |
| 加法 |
ADD、ADC(会加上CF)、INC(increase)、DAA(加法的十进制调整,自动的) |
| 减法 |
SUB、SBB(会减去CF)、DEC(decrease)、NEG(取负)、DAS(加法的十进制调整,自动的) |
| 乘法 |
MUL(只对无符号数)、IMUL(处理带符号数) 注意:这里默认是源操作数和累加器AL/AX相乘
|
| 除法 |
DIV(只对无符号数)、IDIV(对有符号数)相除以后,8位商在AL,余数在AH;16位商在AX,余数在DX
|
| 类别 |
内容 |
| 逻辑运算 |
NOT(取反)、AND(与)、OR(或)、XOR(异或) |
| 算术移位 |
SHL/SAL:即shift left、 ShR:shift right;注意SAR是算术右移,即符号位不变
|
| 循环移位 |
ROL/ROR:就是循环的移位,但不包含CF。RCL/RCR则包含了CF。 |
| 指令 |
要点 |
| CMPS |
即比较compare,源串减去目的串,结果反应在符号位上,不影响原来的值。 |
| SCAS |
即扫描scan,用来搜索数据。执行前,必须先存在AL/AX中。和CMPS的区别,应该就是会自动指向下一个待搜索的字符串。 |
| LODS |
把数据放到AL或AX,同时修改SI,指向下一个元素 |
| STOS |
把AL或AX的数据放到目标串,同时修改DI,指向下一个元素。 |
| 类别 |
要点 |
| 普通 |
JMP(就是jump到某个位置)、CALL(即调用子程序)、RET(过程返回) |
| 条件转移 |
 |
| 循环控制 |
LOOP(每执行一次CX-1)、LOOPNE/LOOPNZ(当结果为0,或CX=0时,才跳出) |
| 对象 |
要点 |
| CF |
CLC(置0);CMC(取反);STC(置1) |
| DF |
CLD(置0);STD(置1) |
| IF |
CLI(置0);STI(置1) |
相关文章: