汇编语言(四)——8086/8088的指令系统

3.3 80x86的指令系统

指令格式: 操作码 操作数
ADD AL,10H
操作码:指明CPU要执行什么样的操作,有以下几种

数据传送、算术运算、逻辑运算、串操作、控制转移、处理机控制

操作数:指明参与操作的数据或数据所在的地方,操作数有以下三种来源。

  • 立即数操作数:操作数在指令中。 MOV AL,9
  • 寄存器操作数:操作数在寄存器中。 MOV AL,BL
  • 存储器操作数或内存操作数:操作数在内存单元中。 MOV AL,[2000H]

操作数类型

  • 指令中有寄存器操作数,有寄存器操作数决定类型。
  • 指令操作数中无寄存器,则由内存操作数的类型决定。
  • 指令中无类型的依据,需对存储器操作数加类型说明。

执行速度

由快到慢:寄存器操作数 -》 立即数操作数 -》 存储器操作数

3.3.1 数据传送指令

  • 通用数据传送指令:MOV、PUSH、POP、XCHG、XLAT
  • 地址传送指令:LEA、LDS、LES
  • 标志寄存器传送指令:LAHF、SAHF、PUSHF、POPF
  • 类型转换指令:CBW、CWD

通用数据传送指令

  • 传送指令: MOV DST,SRC
    执行操作:(DST)《- (SRC)
    注意:1.两个操作数的类型要相同;2.DST、SRC不可同时为段寄存器;3.立即数不能直接送段寄存器;4.DST不能是立即数和CS;5.DST、SRC不能同时为存储器寻址;6.指令指针IP,不能作为MOV指令的操作数;7.不影响标志位。

  • 进栈指令: PUSH SRC
    执行操作:(SP)<- (SP)-2 ((SP)+1,(SP))<-(SRC)

  • 出栈指令:POP DST
    执行操作:(DST)《-((SP)+1,(SP)) (SP)《- (SP)+ 2
    堆栈:‘后进先出’的存储区,段地址存放在SS中,SP在任何时候都指向栈顶,进出栈后自动修改SP。
    注意:1.该操作以字为单位;2.该堆栈是栈顶在高位(即底下),栈底在低位(即上面),这点和C语言差别很大。

  • 所有寄存器进栈指令:PUSHA
    功能:16位通用寄存器依次进栈,次序为AX、CX、DX、BX,指令执行前的SP、BP、SI、DI。执行后(SP)-16 —> (SP),SP仍指向栈顶。

  • 所有寄存器出栈指令:POPA
    功能:16位通用寄存器依次出栈,次序为DI、SI、BP、SP,指令执行前的BX、DX、CX、AX。执行后(SP)+16 —> (SP),SP仍指向栈顶。
    注意:8086CPU不保证对栈的操作不会超界。

  • 交换指令:XCHG OPR1,OPR2
    执行操作:(OPR1)《-》(OPR2)
    注意:必须有一个操作数为寄存器

  • 换码指令:XLAT 或 XLAT OPR
    执行操作:(AL)《- ((BX)+(AL))
    功能:用于代码的转换,例如把字符扫描转换成ASCII码。

地址传送指令

  • 有效地址送寄存器指令:LEA REG,SRC
    执行操作: (REG)《— SRC的有效地址

  • 指针送寄存器和DS指令: LDS REG,SRC
    执行操作: (REG)《—(SRC)
    (DS)《— (SRC + 2)
    相继二字 —》 寄存器、DS

  • 指针送寄存器和ES指令:LES REG,SRC
    执行操作: (REG)《— (SRC)
    (ES)《— (SRC + 2)
    相继二字 —》 寄存器、ES
    注意:低位字给寄存器、高位字给ES(DS)

标志寄存器传送指令

  • 标志送AH指令: LAHF
    执行操作: (AH)《—(FLAGS的低字节)

  • AH送标志寄存器指令: SAHF
    执行操作: (FLAGS的低字节)《——(AH)

  • 标志进栈指令: PUSHF
    执行操作: (SP)《—(SP)- 2
    ((SP)+ 1,(SP))《—(FLAGS)

  • 标志出栈指令: POPF
    执行操作:(FLAGS)《—((SP)+ 1,(SP))
    (SP)《—(SP)+ 2

类型转换指令

  • CBW AL—》AX(AL中的内容符号拓展到AX)
  • CWD AX—》(DX,AX)(AX中的内容符号拓展到DX:AX)

3.3.2 算术指令

加法指令

  • ADD DST,SRC (加法指令)

  • ADC DST,SRC (带进位加法指令)

  • INC OPR(加1指令)

减法指令

  • SUB DST,SRC(减法指令)

  • SBB DST,SRC(带借位减法指令)

  • DEC OPR(减1指令)

  • NEG OPR(求补指令)

  • CMP OPR1,OPR2(减法指令)(注:此指令不保存结果,只是根据结果设置标志位)

乘法指令

  • MUL SRC(无符号数乘法指令)

  • IMUL SRC(带符号数乘法指令)
    以上在执行操作的时候:

  • 字节操作数: (AX)《— (AL)*(SRC)

  • 字操作数: (DX,AX)《— (AX)*(SRC)
    注:SRC不可为立即数

除法指令

  • DIV SRC(无符号数除法指令)

  • IDIV SRC(带符号数除法指令)(注:余数的符号和被除数的符号相同)
    以上在执行操作的时候:

  • 字节操作数: (AL)《— (AX)/(SRC)的商
    (AH)《—(AX)/(SRC)的余数

  • 字操作数: (AX)《— (DX,AX)/(SRC)的商
    (DX)《—(DX,AX)/(SRC)的余数
    注:SRC不可为立即数

逻辑指令

逻辑运算指令

  • NOT OPR(逻辑非指令)

  • AND DST,SRC(逻辑与指令)

  • OR DST,SRC(逻辑或指令)

  • XOR DST,SRC(异或指令)

  • TEST OPR1,OPR2(测试指令)(测试某位是0是1)(两个操作数相与的结果不保存,只根据其特征置条件码)

移位指令和循环移位指令

  • SHL OPR,CNT(逻辑左移)
    在这里插入图片描述
  • SHR OPR,CNT(逻辑右移)
    在这里插入图片描述
  • SAL OPR,CNT(算术左移)(同逻辑左移)
    在这里插入图片描述
  • SAR OPR,CNT(算术右移)
    在这里插入图片描述
  • ROL OPR,CNT(循环左移)
    在这里插入图片描述
  • ROR OPR,CNT(循环右移)
    在这里插入图片描述
  • RCL OPR,CNT(带进位循环左移)
    在这里插入图片描述
  • RCR OPR,CNT(带进位循环右移)
    在这里插入图片描述
    注:但CNT = 1时只移一位,CNT > 1 时,可以将位移次数置于AL。

串处理指令

设置方向标志指令

  • CLD:DF 《— 0 使得在执行串处理时指令可使地址自动增量

  • STD:DF 《— 1 使得在执行串处理时指令可使地址自动减量

串处理指令

  • MOVS:MOVSB(字节) MOVSW(字)
    REP MOVS
    在此之前,应先:
    1.源串首地址(或末地址) —》 SI;
    2.目的串首地址(或末地址) —》DI;
    3.串长度 —》 CX;
    4.建立方向标志。

  • STOS:存入串指令 STOSB(字节) STOSW(字)

  • LODS:从串取指令 LODSB(字节) LODSW(字)

  • CMPS:CMPS SRC,DST CMPSB(字节) CMPSW(字)
    相等 ZF = 1;不等 ZF = 0;

  • SCAS:SCAS DST SCASB(字节) SCASW(字)
    把AL / AX 的内容与由目的变址寄存器指向的在附加段中的一个字节或字进行比较。

串重复前缀

  • REP:重复操作指导计数器(CX)的值为 0 为止

  • REPE / REPZ:相等 / 为零则重复(常和CMPS / SCAS 配合使用)

  • REPNE / REPNZ:不相等 / 不为零则重复(常和CMPS / SCAS 配合使用)

处理机控制与杂项操作指令

标志处理指令

  • CLC:CF《— 0
  • STC:CF 《— 1
  • CMC:CF《— Not(CF)
  • CLD:DF 《— 0
  • STD:DF《— 1
  • CLI:IF 《— 0
  • STI:IF《— 1

其他处理机控制与杂项操作指令

  • NOP: 空操作指令
    不执行任何操作,但占用一个字节存储单元,常用于程序调试

  • HLT:暂停操作

附上思维导图

主体部分
汇编语言(四)——8086/8088的指令系统_第1张图片
指令概述
汇编语言(四)——8086/8088的指令系统_第2张图片
数据传送指令
汇编语言(四)——8086/8088的指令系统_第3张图片
算术指令
汇编语言(四)——8086/8088的指令系统_第4张图片
逻辑指令
汇编语言(四)——8086/8088的指令系统_第5张图片
串处理指令
汇编语言(四)——8086/8088的指令系统_第6张图片
处理机控制与杂项操作指令
汇编语言(四)——8086/8088的指令系统_第7张图片

你可能感兴趣的:(汇编语言)