微机原理第3章 指令系统和寻址方式

3.1指令系统概述

每条指令由两部分组成:操作码字段和地址码字段。
指令中用于确定操作数存放地址的方法,称为寻址方式。如果地址码字段直接给出了操作数,这种寻址方式叫立即寻址;如果地址码字段指出了操作数所在的寄存器编号,叫寄存器寻址;如果操作数存放在存储器中,则地址码字段通过各种方式给出存储器地址,叫存储器寻址

3.2 8088/8086CPU的寻址方式

3.2.1 数据寻址方式

操作数及操作结果存放的地点有三处:
指令的地址码字段中;
寄存器中;
存储器的数据段、堆栈段或附加数据段中。

与其对应的三种操作数是:立即操作数、寄存器操作数和存储器操作数
寻找这些操作数有三种基本寻址方式:
立即寻址方式、寄存器寻址方式和存储器寻址方式。
其中,存储器寻址又包括多种寻址方式。下面分别介绍这些寻址方式。

1.立即寻址方式 Immediate Addressing

操作码 数字表达式
(这个数字表达式的值可以是一个8位整数,也可以是一个16位整数。)

例:
MOV AX,267
MOV AL,10010011B AND 0FEH
MOV AL,PORT1
(PORT1是一个用EQU定义的变量名,属于常数)
在这里插入图片描述

2.寄存器寻址方式 Register Addressing

操作码 寄存器名

例:
MOV AX,BX
MOV AL,BL

3.Memory Addressing

1)直接寻址方式 Direct Addressing

操作码 地址表达式 (或[地址表达式])
操作码 [数字表达式]

例:
MOV AX,[1000H]
这种寻址方式默认的段寄存器是DS。

2)寄存器间接寻址方式 Register indirect addressing

操作码 [基址寄存器名或变址寄存器名]
BX、BP称为基址寄存器,SI、DI称为变址寄存器

例:
MOV AX,[BX]
在这里插入图片描述

3)寄存器相对寻址 Register Relative Addressing

① 操作码 变量名[基址寄存器名或变址寄存器名]
或 操作码 [变量名+基址寄存器名或变址寄存器名]
② 操作码 符号名[基址寄存器名或变址寄存器名]
或 操作码 [基址寄存器名或变址寄存器名+符号名]
③ 操作码 [基址寄存器名或变址寄存器名±数字表达式]

例:
MOV AL,TABLE[SI]
MOV AL,[TABLE+SI]

4)基址变址寻址 Based ndexed Addressing

[基址寄存器名][变址寄存器名]
或 [基址寄存器名+变址寄存器名]

例:
MOV AX,[BX] [SI]
MOV AX,[BX+SI]

5) 相对基址变址寻址 Relative based indexed addressing

① 变量名[基址寄存器名][变址寄存器名]
或 变量名[基址寄存器名+变址寄存器名]
或 [变量名+基址寄存器名+变址寄存器名]
② 符号名[基址寄存器名][变址寄存器名]
或 符号名[基址寄存器名+变址寄存器名]
或 [符号名+基址寄存器名+变址寄存器名]
③ [基址寄存器名+变址寄存器名±数字表达式]

例:
MOV AL,TABLE[BX][SI]
MOV AL,TABLE[BX+SI]
MOV AL,[TABLE+BX+SI]

3.3 8088/8086CPU的指令系统

3.3.1 数据传送指令

四类传送指令:通用传送指令、累加器专用传送指令、地址传送指令和标志传送指令

1.通用传送指令

在这里插入图片描述

MOV七个注意:
① 目的操作数不能是立即寻址方式。
② 源操作数与目的操作数不能同时为存储器寻址方式,即两个内存单元之间不能直接传送数据。
③ 立即数不能直接送段寄存器,即段寄存器只能通过寄存器或存储单元传送数据。
④ 两个段寄存器之间不允许直接传送数据。
⑤ 不允许给CS、IP、PSW三个寄存器传送数据,即这3个寄存器的值用户无权改变。
⑥ 源操作数和目的操作数必须字长相等。
⑦ MOV指令不影响标志位。
在这里插入图片描述

2.累加器专用传送指令

1) IN输入指令

汇编格式:IN AL,I/O口地址表达式
或 IN AX,I/O口地址表达式

2) OUT输出指令

汇编格式: OUT 地址表达式,AL
或 OUT 地址表达式,AX

3) XLAT换码指令

汇编格式:XLAT或XLAT 地址标号
执行的操作:(AL)←((BX)+(AL))

3.地址传送指令

在这里插入图片描述

4.标志传送指令S

在这里插入图片描述

3.3.2 算数运算指令

1.加法指令

在这里插入图片描述

  1. ADD加法指令
    汇编格式:ADD 目的操作数,源操作数
    执行的操作:(目的操作数)←源操作数+目的操作数
  2. ADC带进位加法指令
    汇编格式:ADC 目的操作数,源操作数
    执行的操作:(目的操作数)←源操作数+目的操作数+CF
  3. INC增量指令
    汇编格式:INC 操作数
    执行的操作:(操作数)←操作数+1

PSW中的标志位共有9位,其中最主要的是ZF、SF、CF、OF四位。
ZF表示结果是否为零,
SF表示结果的符号位,
CF表示最高有效位是否有向更高位的进位,OF表示结果是否溢出。

2.减法指令

在这里插入图片描述

  1. SUB减法指令
    汇编格式:SUB 目的操作数,源操作数
    执行的操作:(目的操作数)←目的操作数-源操作数
  2. SBB带借位减法指令
    汇编格式:SBB 目的操作数,源操作数
    执行的操作:(目的操作数)←目的操作数-源操作数-CF
  3. DEC减量指令
    汇编格式:DEC 操作数
    执行的操作:(操作数)←操作数-1
  4. NEG求补指令
    汇编格式:NEG 操作数
    执行的操作:(操作数)←0-操作数
    只有当操作数为0时求补运算的结果使CF=0,其他情况则均为1;只有当操作数为-128或-32 768时使OF=1,其他情况则均为0。
  5. CMP比较指令
    汇编格式:CMP 目的操作数,源操作数
    执行的操作:目的操作数-源操作数。

3. 乘法指令

  1. MUL无符号数乘法指令
    汇编格式:MUL 源操作数
    执行的操作:若为字节操作 (AX)←(AL)×源操作数
    若为字操作 (DX), (AX)←(AX)×源操作数
  2. IMUL有符号数乘法指令
    汇编格式:IMUL 源操作数
    执行的操作:与MUL相同,只是处理的数据是有符号数,而MUL处理的数据是无符号数。

4. 除法指令

  1. DIV无符号数除法指令
    汇编格式:DIV 源操作数
    执行的操作:若为字节操作:(AL)←(AX)/源操作数的商
    (AH)←(AX)/源操作数的余数
    若为字操作: (AX)←(DX、AX)/源操作数的商
    (DX)←(DX、AX)/源操作数的余数
    商和余数均为无符号数。
  2. IDIV有符号数除法指令
    汇编格式:IDIV 源操作数
    执行的操作:与DIV相同,只是操作数是有符号数,商和余数均为有符号数,余数符号同被除数符号。

5. 符号扩展指令

  1. CBW字节转换为字指令
    汇编格式:CBW
    执行的操作:将(AL)的符号扩展到(AH)中去。如果(AL)的最高有效位为0,则(AH)=00H;如(AL)的最高有效位为1,则(AH)=0FFH。
  2. CWD字转换为双字指令
    汇编格式:CWD
    执行的操作:将(AX)的符号扩展到(DX)中去。如果(AX)的最高有效位为0,则(DX)=00H;如(AX)的最高有效位为1,则(DX)=0FFH。
    == 这两条指令都不影响标志位。==

6. 十进制调整指令

  1. 压缩的BCD码调整指令
    ● DAA:加法的十进制调整指令
    汇编格式: DAA
    执行的操作:调整(AL)中的二进制BCD码的和。调整方法如下:
    若AF=1或者(AL)的低4位是在AH~FH之间,则(AL)加06H,且自动置AF=1;
    若CF=1或者(AL)的高4位是在AH~FH之间,则(AL)加60H,且自动置CF=1。
    使用本条指令之前,需将十进制数先用ADD或ADC指令相加,和存入AL中。

DAS:减法的十进制调整指令
汇编格式:DAS
执行的操作:调整(AL)中的差。调整方法如下:
若AF=1,则(AL)减06H;
若CF=1,则(AL)减60H。
说明:
① 本条指令对PSW中的OF标志无定义,会影响其他所有标志位。
② 使用本条指令之前,需将十进制数BCD码用SUB或SBB指令相减,差存入(AL)中。

3.3.3 逻辑运算和移位运算

1.逻辑运算指令

在这里插入图片描述
在这里插入图片描述

2.移位指令

1) 逻辑移位指令

SHL逻辑左移指令
汇编格式:SHL 除立即数及段寄存器之外的操作数,移位次数
执行的操作:将操作数逻辑左移指定次数

SHR逻辑右移指令
汇编格式:SHR 除立即数及寄存器之外的操作数,移位次数
执行的操作:将操作数逻辑右移指定次数,如图3.10(b)所示。

2) 算术移位指令

SAL算术左移指令
汇编格式:SAL 除立即数及段寄存器之外的操作数,移位次数
执行的操作:将操作数算术左移指定次数

SAR算术右移指令
汇编格式:SAR 除立即数及段寄存器之外的操作数,移位次数
执行的操作:将寻址到的操作数算术右移指定次数

  1. 小循环移位指令
    循环移位按是否与“进位”位CF一起循环的情况,又分为小循环(自身循环)和大循环(包括CF一起)两种。
    ● ROL循环左移指令
    汇编格式:ROL 除立即数和段寄存器之外的操作数,移位次数
    执行的操作:操作数循环左移指定次数
    ● ROR循环右移指令
    汇编指令:ROR 除立即数和段寄存器之外的操作数,移位次数
    执行的操作:操作数循环右移指定次数
  1. 大循环移位指令
    ● RCL带进位循环左移指令
    汇编格式:RCL 除立即数和段寄存器之外的操作数,移位次数
    执行的操作:操作数循环左移指定次数
    ● RCR带进位循环右移指令
    汇编格式:RCR 除立即数和段寄存器之外的操作数,移位次数
    执行的操作:操作数循环右移指定次数

3.3.4 串操作指令

1. 串传送指令

每条串传送指令都可传送一个字节或一个字。如果加上前缀REP可实现重复传送,传送一个字节块或一个字块,具体格式如下:
REP MOVS/LODS/STOS

  1. MOVS指令
    MOVS 目的操作数,源操作数
  1. LODS指令
    LODS 源操作数存储器寻址方式
    执行的操作:
    (1) 若字节: AL←((DS):(SI))
    若 字: AX←((DS):(SI))
    (2) 若字节: (SI)←(SI)±1 (DF=0用“+”,否则用“-”)
    若 字: (SI)←(SI)±2 (DF=0用“+”,否则用“-”)
  1. STOS指令
    STOS目的操作数
    执行的操作:
    (1) 若字节: ((ES):(DI))←AL
    若 字: ((ES):(DI))←AX
    (2) 若字节: (DI)←(DI)±1 (DF=0用“+”,否则用“-”)
    若 字: (DI)←(DI)±2 (DF=0用“+”,否则用“-”)

2. 串比较指令

● REPE/REPZ
该前缀的含义是:当相等/为零时重复比较。
汇编格式:REPE/REPZ CMPS/SCAS

  1. CMPS指令
    CMPS 源操作数存储器寻址方式,目的操作数存储器寻址方式执行的操作:
    (1) ((DS):(SI))-((ES):(DI))
    (2) 若字节是(SI)←(SI)±1,(DI)←(DI)±1时,则方向标志位DF=0用“+”,否则用“-”;若字是(SI)←(SI)±2(DI)(DI)±2时,则方向标志位DF=0用“+”,否则用“-”。
  1. SCAS指令
    SCAS目的操作数
    执行的操作:
    (1) 若字节是:(AL)-((ES):(DI))
    若字:(AX)-((ES):(DI))

3.3.5 控制转移指令

四类指令
无条件转移和条件转移指令;
子程序调用和返回指令;
循环控制指令;
中断指令及中断返回指令。

1. 无条件转移指令JMP

1) 段内直接转移

(1) 段内直接短转移。
汇编格式:JMP SHORT 转移地址标号
(2) 段内直接近转移。
汇编格式1:JMP NEAR PTR 转移地址标号
汇编格式2:JMP 数值偏移地址

2) 段内间接转移

汇编格式1: JMP 16位寄存器名
机器指令格式:
执行的操作:(IP)←16位寄存器的内容
功能:无条件转移到当前段的指定偏移地址处。

3) 段间直接转移

● 汇编格式1:JMP FAR PTR 转移地址标号
执行的操作:(IP)←转移地址标号的偏移地址
(CS)←转移地址标号的段地址
功能:无条件转移到指定标号地址处并往下执行。
● 汇编格式2:JMP 段地址值:偏移地址
执行的操作:(IP)←偏移地址值
(CS)←段地址值
功能:无条件转移到指定段的指定偏移地址处并往下执行。

4) 段间间接转移

汇编格式:JMP DWORD PTR 存储器寻址方式
执行的操作:(IP)←寻址到的存储单元的第一个字
(CS)←寻址到的存储单元的第二个字
功能:无条件转移到指定段的指定偏移地址处。

2. 条件转移指令

所有条件转移指令的寻址方式都是段内直接短寻址,8位位移量
(1)
在这里插入图片描述
(2)在这里插入图片描述
(3)在这里插入图片描述
(4) 测试CX的值为0则转移的指令。
指令格式:JCXZ 地址标号
功能:若CX寄存器的内容为零则转移到指定地址标号处。
测试条件:(CX)=0

3. 子程序调用和返回指令

1) CALL调用指令

(1) 段内直接调用。
汇编格式:CALL NEAR PTR 子程序名
(或CALL 子程序名)

(2) 段间直接调用。
汇编格式:CALL FAR PTR 子程序名

(3) 段内间接调用。
汇编格式1: CALL 16位寄存器名
汇编格式2: CALL WORD PTR存储器寻址方式

(4) 段间间接调用。
汇编格式:CALL DWORD PTR存储器寻址方式

2)  RET返回指令

(1) 段内返回
汇编格式: RET
执行的操作:(IP)←((SP)+1,(SP))
(SP)←(SP)+2

(2) 段间返回
汇编格式: RET
执行的操作:(IP)←((SP)+1,(SP))
(SP)←(SP)+2
(CS)←((SP)+1,(SP))
(SP)←(SP)+2

(3) 段内带立即数返回
  汇编格式: RET 表达式
  执行的操作:(IP)←((SP)+1,(SP))
        (SP)←(SP)+2
        (SP)←(SP)+16位表达式的值

(4) 段间带立即数返回
  汇编格式: RET 表达式
  执行的操作:(IP)←((SP)+1,(SP))
  (SP)←(SP)+2
  (CS)←((SP)+1,(SP))
  (SP)←(SP)+2
  (SP)←(SP)+16位表达式的值

4. 循环控制指令

循环控制指令共有三条:LOOP、LOOPZ/LOOPE和LOOPNZ/LOOPNE。
汇编格式:指令名 循环入口的地址标号

在这里插入图片描述

5. 中断指令和中断返回指令

在这里插入图片描述

3.3.6 处理器控制指令

1. 标志设置指令

在这里插入图片描述

2. 其他处理机控制指令

  1. NOP无操作指令
    汇编格式:NOP
    执行的操作:不执行任何操作。
  1. HLT停机指令
    汇编格式:HLT
    执行的操作:使CPU处于"什么也不干"的暂停状态。
  1. WAIT等待指令
    汇编格式:WAIT
    执行的操作:不断测试引脚。
  1. LOCK总线封锁指令
    LOCK总线封锁指令也叫前缀指令,可放在任何一条指令的前面。
    汇编格式:LOCK XXXX指令
    执行的操作:使引脚输出低电平信号。
  1. ESC交权指令
    汇编格式:ESC 存储器寻址方式
    执行的操作:为协助处理器提供操作码,数据总线把存储单元内容送出,并开始一条协处理器指令的执行。
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值