第二章 8086/8088寻址和指令系统

本文详细介绍了8086/8088处理器的寄存器组,包括通用寄存器、指针寄存器、变址寄存器和控制寄存器。接着,讨论了存储器的分段和物理地址的形成。此外,还涵盖了8086/8088的多种寻址方式,如立即寻址、寄存器寻址、直接寻址等。最后,对8086/8088的指令系统进行了概述,涉及数据传送、算术逻辑运算、堆栈操作及转移指令等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1 8086/8088寄存器组

cpu寄存器

  • 通用寄存器
    • 数据寄存器
      • AX
        • AH
        • AL
      • BX
        • BH
        • BL
      • CX
        • CH
        • CL
      • DX
        • DH
        • DL
    • 指针寄存器
      • SP
      • BP
    • 变址寄存器
      • SI
      • DI
  • 控制寄存器
    • IP
    • FLAG
  • 段寄存器
    • CS
    • DS
    • SS
    • ES

标志寄存器

1514131211109876543210
OFDFIFTFSFZFAFPFCF

运算结果标识

  • 进位标志(CF) : 用于反映运算是否产生进位或借位
  • 零标志(ZF):用于反映运算结果是否为零
  • 符号标志(SF): 用于反映运算的符号位
  • 溢出标志(OF): 用于反映加减法是否产生溢出
  • 奇偶标志 (PF): 用于反映运算结果中1的个数是否为1
  • 辅助进位标示(AF): 用于反映半字节向高字节是否进位或借位
  • 方向标识(DF): 决定字符串操作的方向
  • 中断允许标识(IF): 决定CPU是否允许响应外部中断
  • 追踪标示(TF): 决定cpu是否进入单步模式

2.2 存储分段和地址的形成

存储单元的地址和内容

8086或8088系统中以字节为单位线性组织存储器

存储器的分段

因为8086或8088有20根地址线,所以可以直接寻址1M(2^20)的空间,但是由于寄存器只有16位,所以通过对1M的空间进行逻辑分段来实现寻址1M的能力。

物理地址的形成

物理地址= 段值*16 + 偏移

段寄存器的引用

访问存储器的方式正常使用的寄存器可选寄存器偏移
取指令CSIP
堆栈操作SSSP
一般数据存取DSCS、ES、SS有效地址
源数据串DSCS、ES、SSSI
目的数据串ESDI
BP作为指针寄存器使用SSCS、DS、ES有效地址

8086/8088的寻址方式

立即寻址方式

操作数包含在指令中
MOV AX, 1234h

寄存器寻址方式

操作数在cpu内部寄存器中
MOV SI,AX

直接寻址方式

操作数存放在存储器中,指令直接包含操作数的有效地址
MOV ES:[5678H], BL

寄存器间接寻址

操作数在存储器中,操作数有效地址时SI、DI、BX、BP四个存储器之一
MOV AX,[SI]

寄存器相对寻址

操作数在存储器中,操作数的有效地址时一个基址寄存器(BX、BP)或变址寄存器(SI,DI)加上一个偏移
MOV AX, [DI+1234h]

基址加变址寻址

操作数在存储器中,操作数的有效地址是基址寄存器之一加上变址寄存器之一
MOV AX, [BX+DI]

相对基址加变址寻址

操作数在寄存器,操作数有效地址是基址寄存器加上变址寄存器再加上偏移
MOV AX, [BX+DI-2]

8086/8088指令系统

指令集说明

  • 分组

    • 数据传送
    • 算数运算
    • 逻辑运算
    • 串操作
    • 程序控制
    • 处理器控制
  • 指令格式
    [标号:] 指令助记符 [操作数1 [,操作数2]] [:注释]

数据传送指令

  • 传送指令
MOV DST,SRC

规则:
1、源和目的不能同时是段寄存器
2、代码段寄存器不能作为目的
3、指令指针IP不能作为源也不能作为目的

  • 交换指令
XCHG OPRD1, OPRD2

规则:
1、不能同时是存储单元
2、不能有立即数
3、不能有段寄存器
  • 地址传送指令
1、LEA (Load Effective Address)
LEA REG, OPRD

说明:将OPRD的有效地址存放到REG

2、 LDS (Load pointer into DS)
LDS REG, OPRD

说明: 将OPRD的段值存放到DS,将偏移存放到REG

3、 LES (Load pointer into ES)
LES REG, OPRD

说明:将OPRD的段值存放到ES,将偏移存放到REG

堆栈操作指令

1、进栈指令
PUSH SRC

2、出栈指令
POP DST

标志操作指令

1、LAHF (Load AH with Flags)

说明: 将标志寄存器的低8位存入AH

2、SAHF (Store AH into Flags)

说明: 将AH存入标志寄存器的低8位

3、PUSHF

说明: 将标志寄存器入栈

4、 POPF

说明: 将栈顶元素写入标志寄存器

5、CLC (CLear Carry flag)

说明: 清空进位标志

6、STC (SeT Carry flag)

说明: 设置进位标志

7、CMC (CoMplement Carry flag)

说明: 对进位标志取反

8、CLD 

说明:清空方向标志

9、STD 

说明: 设置方向标志

10、CLI

说明:情况中断标志

11、STI
设置中断标识

加减法运算指令

1、ADD
ADD OPRD1, OPRD2

说明:加法

2、ADC
ADC OPRD1, OPRD2

说明: 带进位的加法

3、SUB
SUB OPRD1, OPRD2

说明: 减法

4、SBB
SBB OPRD1, OPRD2

说明: 带借位的减法

5、DEC
DEC OPRD

说明:减一

6、NEG
NEG OPRD

说明:对OPRD取补

7、CMP
CMP OPRD1, OPRD2

说明:OPRD1-OPRD2 将影响标志存入标志寄存器

乘除法运算指令

1、MUL
MUL OPRD

2、IMUL
IMUL OPRD

3、DIV
DIV OPRD

4、IDIV
IDIV OPRD

5、CBW
CBW 

说明: 将AL寄存器的符号位扩展到AH

6、CWD
CWD

说明:将AX寄存器的符号位扩展到DX

逻辑运算和移位指令

1、NOT
NOT OPRD

说明:对OPRD取反并将结果存放到OPRD,不影响标志寄存器

2、AND 
AND OPRD1, OPRD2

说明:对OPRD1,OPRD2进行逻辑与运算,并将结果存入OPRD1,并影响标志寄存器

3、OR
OR OPRD1, OPRD2

说明:对OPRD1,OPRD2进行逻辑或运算,并将结果存入OPRD1,影响标志寄存器

4、 XOR
XOR OPRD1,OPRD2

说明:对OPRD1,OPRD2进行逻辑异或运算,并将结果存入OPRD1, 影响标志位

5、TEST
TEST OPRD1, OPRD2

说明:类似AND,只影响标志位

6、SAL
SAL OPRD, m

说明:对OPRD左移m位

7、SHL
SHL OPRD, m

说明:对OPRD左移m位

8、SAR
SAR OPRD, m

说明:对OPRD右移m位符号位保持bub

9、SHR
SHR OPRD, m

说明:对OPRD右移m位,左边补0

10、ROL
ROL OPRD,m

说明:循环左移

11、ROR
ROR OPRD,m

说明:循环右移

12、RCL
RCL OPRD,m

说明:带进位循环左移

13、RCR
RCR OPRD,m

说明:带进位循环右移

转移指令

1、JMP 
JMP 标号

2、LOOP
LOOP 标号

3、LOOPE
LOOPE 标号

4、LOOPNE
LOOPNE 标号

5、JCXZ
JCXZ 标号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值