第三章 汇编语言

2017-10-19  本文已影响0人  刀月水

指令是使计算机执行某种特定操作的二进制编码。
8086 CPU指令系统有133条指令,通常分为数据寻址方式和程序寻址方式
8086指令是不定长,一般为1~6个字节。

数据寻址方式

  1. 隐含寻址
    指令已经默认对CPU中的某个寄存器进行操作,不用在指令中指明所使用的寄存器,即隐含了规定的操作数,这样的寻址方式称为隐含寻址。

  2. 立即数寻址

  3. 寄存器寻址

  4. 存储器操作数寻址
    执行单元EU根据指令中给出的寻址方式计算出16位的偏移量,称为有效地址(EA)送到总线接口单元BIU,经过加法器生成20位实际物理地址,在存储器读写总线周期对存储器进行操作,一般在表示EA时,用 [操作数] 表示
    由于计算EA需要时间,进行总线操作比较慢,因此存储器操作寻址比前三种要慢。

注:IP只能在代码段中(CS)寻址,SP只能在堆栈段(SS)中寻址

  1. I/O端口寻址
    操作数存放在I/O端口中,指令执行时必须通过累加器(AX或AL)实现对端口的访问

程序寻址方式

段内直接寻址

  1. 短跳转:把IP的内容加上一个字节的补码数作为新的IP,往前最多跳-128个字节,往后最多跳127个字节。

  2. 近跳转:把IP的内容加上两个字节的补码数作为新的IP,往前最多跳-32768个字节,往后最多跳32767个字节。

段内间接寻址

将寄存器或存储器操作数的内容赋给IP

段间直接寻址

直接在指令中给出新的CS和IP内容

段间间接寻址

用存储器操作数的内容赋给CS和IP

8086指令格式

指令一般由1~6个字节组成,具体格式如下图:


image.png
  1. 字节1
  1. 字节2,寻址方式
000=AL/AX 100=AH/SP 001=CL/CX 101=CH/BP
010=DL/DX 110=DH/SI 011=BL/BX 111=BH/DI
  1. 字节3~字节6

DISP:存储器操作数地址偏移量,长度由MOD字段定义

DATA:指令中的立即数

8086指令系统

操作数符号表示

符号 含义
DST 目的操作数
SRC 源操作数
TARGET 循环、转移和调用指令操作数
imm 立即操作数,字节或字
acc 累加器AL或AX
reg 寄存器操作数
seg_reg 段寄存器
mem 存储器操作数
short_label 短标号(8位偏移量)
near_label 近标号(16位地址或偏移)
far_label 远标号(32位地址)

数据传送指令

  1. 通用数据传送指令 MOV DST,SRC

  2. 堆栈及堆栈操作
    堆栈是一种按先进后出(FILO)原则存取的存储器,它由堆栈指针寄存器SS:SP和RAM中的一部分组成,主要用于子程序调用或中断子程序的现场保护和恢复,以及参数传递等。
    SP的内容总是指向栈顶,即最后推入信息所在单元。

算术指令

  1. 加法指令
  1. 减法指令
  1. 乘法指令
  1. 除法指令 //除数必须为被除数一半字长
  1. 类型转换指令
  1. BCD码调整指令
    加减运算非压缩BCD码高4位的值可不为0,乘除时高4位必须是0。

逻辑指令

  1. 逻辑运算指令
  1. 移位指令

串处理指令

  1. 数据串传送指令:唯一的目的操作数和源操作数都在存储器中的指令
  1. 字符串扫描和比较指令

控制转移指令

  1. 无条件转移指令:JMP TARGET
  1. 条件转移指令
指令 含义 测试条件
JZ short_label 结果为0转移 ZF=1
JE short_label 结果相等转移 ZF=1
JNZ short_label 结果不为0则转移 ZF=0
JNE short_label 结果不相等则转移 ZF=0
JS short_label 结果为负则转移 SF=1
JNS short_label 结果非负则转移 SF=0
JNO short_label 结果不溢出则转移 OF=0
JO short_label 结果溢出则转移 OF=1
JP short_label 奇偶为1则转移 PF=1
JPE short_label 偶转移 PF=1
JNP short_label 奇偶为0则转移 PF=0
JPO short_label 奇转移 PF=0
JB short_label 有借位转移 CF=1
JNAE short_label 不大于等于转移 CF=1
JC short_label 有进位转移 CF=1
JNB short_label 无借位转移 CF=0
JAE short_label 大于等于转移 CF=0
JNC short_label 无进位转移 CF=0
A大于 B小于 E等于
JB/JNAE/JC CF=1 小于
JNB/JAE/JNC CF=0 不小于
JBE/JNA CF|ZF=1 不大于
JNBE/JA CF|ZF=0 大于
G大于 L小于 E等于
JL/JNGE SF^OF=1 小于
JNL/JGE SF^OF=0 不小于
JNLE/JG (SF^OF)|ZF=0 大于
JLE /JNG (SF^OF)|ZF=1 不大于
  1. 循环指令
  1. 子程序调用与返回

中断调用与返回

  1. 中断调用

控制类指令

  1. 标志处理指令
  1. 处理器控制指令
NOP 空操作指令 占用一个字节的机器码,不执行任何操作
HLT (Halt)停机指令 该指令使处理器处于停机状态,以便等待一次外部中断到来
WAIT 等待指令 该指令使处理器处于空转状态,也可用来等待外部中断的到来
ESC (Escape)换码指令,用作前缀 格式:ESC MEM,其中MEM指出一个存储单元,ESC指令把该存储单元的内容送到数据总线去
LOCK 封锁指令,用作前缀 该指令与其他指令联合,用来维持总线的封锁信号直到与其联合的指令执行完为止
上一篇 下一篇

猜你喜欢

热点阅读