第 3 讲 8086/88 微处理器系 2006.9.29 (星期一五)

60

description

第 3 讲 8086/88 微处理器系 2006.9.29 (星期一五). 主要内容: 1. 最小模式 8086 系统构成 2. 存储器组织 3. 寻址方式. (一) 8086 最小模式系统的基本配置. (二)存储器组织: 1. 存储器地址: 8088 有 20 条地址总线,直接寻址能力为 2 20 =1M 字节 。 用 16 进制数表示 1M 字节的地址范围应为 00000H~FFFFFH 。 ( 1 )、 8088 内部 20 位物理地址形成 ( 2 )、逻辑地址与物理地址. ( 1 )、 8088 内部 20 位物理地址形成 - PowerPoint PPT Presentation

Transcript of 第 3 讲 8086/88 微处理器系 2006.9.29 (星期一五)

Page 1: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)
Page 2: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

第 3 讲 8086/88 微处理器系 2006.9.29 (星期一五)

主要内容:

1. 最小模式 8086 系统构成

2. 存储器组织

3. 寻址方式

Page 3: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

(一) 8086 最小模式系统的基本配置

8284时钟

+5VMN/ MX

A19-A16

CLKRESETREADY

AD15-AD0

DEN DT/ R

BHE

ALE STB

RD

WR

M/ I O

BHE

存储器 I / O接口

数据总线

地址总线

控制总线

8282锁存器(3 )片

OE

RESET

DI R TOE

8286收发器

(2 )片

8086

奇 偶

READY

Page 4: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

X1

X28086或

8088CLKCLK

8284A

F/ C

CSYNC

RES

+5V

5MHz

PCLK

2. 5MHz至外部设备

RESETRESET

系统复位

READYREADY

15MHz

10K

10μ F

Page 5: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)
Page 6: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

(二)存储器组织:1. 存储器地址:8088 有 20 条地址总线,直接寻址能力为 220=1M 字节。

用 16 进制数表示 1M 字节的地址范围应为 00000H~FFFFFH 。

( 1 )、 8088 内部 20 位物理地址形成

( 2 )、逻辑地址与物理地址

Page 7: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

( 1 )、 8088 内部 20 位物理地址形成

存储器地址分段 8088 地址总线是 20 位的, CPU 中的寄存器是 16 位的,20 位地址无法用 16 位寄存器表示,必须分段。

程序员在编制程序时把存储器划分成段。

段内地址 16 位 , 每个段的大小最大可达 64KB ;实际可以根据需要来确定段大小,可以是 1 , 100 , 1000 ,在 64K 范围内的任意字节数。

Page 8: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

20 位物理地址形成

物理地址: 在 1M 字节存储器里,每个存储单元都有一个唯一的 20位地址作为该存储单元的物理地址。

CPU 访问存储器时,必须先确定所要访问的存储单元的物理地址才能取出(或存入)该单元中的内容。

20 位物理地址形成:由 16 位段地址和 16 位偏移地址组成。

段地址 : 只取段起始地址高 16 位值。偏移地址 : 指在段内某内存单元物理地址相对段起始地址的偏移值。

Page 9: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

物理地址计算方法:

即把段地址左移 4 位再加上偏移地址值形成物理地址,写成: 物理地址 = 16d 段地址 + 偏移地址。

* 每个存储单元只有唯一的物理地址。 但可由不同的段地址和不同的偏移地址组成。

16位段地址 0000

16位偏移地址

015

015

20位物理地址

019

+

Page 10: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

( 2 )、逻辑地址与物理地址

逻辑地址与物理地址概念逻辑地址与物理地址概念如下页图所示。

逻辑地址:由段基址和段内偏移地址组成的地址, 段基址和段内偏移地址都是 16 位的无符号二

进制数, 在程序设计时使用。

物理地址:存储器的绝对地址( 20 位的实际地址), 范围从 00000H ~ FFFFFH , 是由 CPU 访问存储器时由地址总线发出的地址。

存储器管理:将程序中逻辑地址转移为物理地址的机构。

Page 11: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

段基址 0 0 0 0

3 2 1 015 0

偏移地址

基址加法器

物理地址

015

019

物理地址的形成

......

20000H

25F60H

25F61H

25F62H

25F63H

2000H

段基址

逻辑地址

段内偏移地址5F62H

逻辑地址与物理地址

Page 12: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

CH

DH

DI

SP

BP

SI

65

标志

3执行部分

控制电路

运算寄存器

ALU1 2 4

DS

SS

ES输入/输出

控制电路I P

CS

内部暂存器

BH

AH

DL

CL

AL

BL

20位

地址加法

16位

外部总线

指令队列缓冲器

8位

16位

通用寄存器

执行部件(EU) 总线接口部件(BIU)

Page 13: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

逻辑地址来源

操作类型 正常使用(隐含)段基址

可替换段地址

偏移地址

物理地址计算

取指令 CS 无 IP (CS)16d+(IP)

堆栈操作 SS 无 SP (SS) 16d+(SP)

BP 间址 SS CS,DS,ES 有效地址 EA

(SS) 16d+EA

存取变量 DS CS,ES,SS 有效地址 EA

(DS )16d+EA

源字符串 DS CS,ES,SS SI (DS) 16d+(SI)

目标字符串 ES 无 DI (ES) 16d+(DI)

通过取指令、堆栈操作获取逻辑地址

Page 14: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

取指令:自动选择代码段寄存器 CS ,

再加上由 IP 决定的 16 位偏移量,

计算得到要取的指令 20 位物理地址。

堆栈栈顶操作:自动选择堆栈段寄存器 SS ,

再加上由 SP 决定的 16 位偏移量,

计算得到堆栈栈顶操作需要的 20 位物理地址。

Page 15: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

涉及到操作数(与执行指令有关的地址、数字、寄存器等统称为操作数):

自动选择数据段寄存器 DS 或附加段寄存器 ES ,

再加上 16 位偏移量,计算得到操作数的 20 位物理地址。

其中:

16 位偏移量 : 包含在:指令中的直接地址

某个 16 位地址寄存器的值

指令中的位移量 +16 位地址寄存器中值等。

16 位偏移量关键取决于指令的寻址方式。

Page 16: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

代码段

数据段

堆栈段

CS

IP

DS

SI ,DI BX或

SS

SP BP或

段寄存器和其他寄存器组合指向存储单元示意图

归纳段寄存器和其他寄存器组合指向存储单元示意图如下:

Page 17: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

2 、各段在存储器中分配

各段在存储器中分配分 4 种情况讨论:

( 1 ).由操作系统负责分配

一般情况,各段在存储器中的分配是由操作系统负责。

每个段可以独立地占用 64K 存储区。

( 2 ).各段也可以允许重迭

每个段的大小允许根据实际需要分配,不一定要占 64KB 。

每个存储单元的内容不允许发生冲突

(段可重迭,但使用时防止冲突)。

Page 18: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

( 3 ).在程序的首部设定各段寄存器的值(汇编语言必须)

如果程序中的四个段都是 64K 的范围之内,

程序运行时所需要的信息都在本程序所定义的段区之内,

程序员只要在程序的首部设定各段寄存器的值就可以了。

( 4 ).动态地修改段寄存器的内容

如果程序的某一段(如数据段)在程序运行过程中会超过 64K 空间,或者程序中可能访问除本身四个段以外的其他段区的信息,

那么在程序中必须动态地修改段寄存器的内容。

Page 19: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

64K程序

64K数据

64K堆栈

00000H

01000H

21000H

46000H

64K附加数据A0000H

0100H

2100H

4600H

A000H

段寄存器

CS

DS

SS

ES

4K程序

2K数据

100H堆栈

00000H

01000H

02000H

A0000H

0100H

0200H

0280H

段寄存器

CS

DS

SS02800H

64KB 为一段代码段范围 :01000H~10FFFH

各段允许重迭:代码段: 01000H~1FFFH数据段: 02000H~027FFH堆栈段: 02800H~028FFH

Page 20: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

注意:

以 8088CPU 的 IBMPC 系统中,存储器首尾地址的用途固定。

• 00000H~003FFH 共 1K 内存单元用于存放中断向量。

• FFFF0H~FFFFFH 是存储器底部的 16 个单元。

系统加电复位时,会自动转到 FFFF0H 单元执行,

而在 FFFF0H 处存放一条无条件转移指令,转向系统初始化程序。

Page 21: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

一、概述 程序语言简介二、 8086/8088 的寻址方式 ( 一)、操作数寻址方式 (二)、程序转移地址的寻址方式

三、 80386 、 80486 、 80586 、 Pentium 的寻址方式

四、 8086/8088 指令码格式

五、 8086/8088 指令系统

(三) 8086/8088CPU 寻址方式及指令系统

Page 22: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

一、概述

程序语言简介

(1) 指令、指令系统和程序

(2) 机器码和机器语言

(3) 助记符和汇编语言

(4) 高级语言

▲ 本课程学习汇编语言的目的

Page 23: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

(1) 指令、指令系统和程序

CPU 是一个可以完成一些基本操作的电子器件。

用编码表示 CPU 的一个基本操作,称为一条指令。

全部指令集称为指令系统。

指令系统反映 CPU 的基本功能 .

指令由两部分组成:

操作码部分,操作数部分。

是硬件设计人员和程序员能见到的机器的主要属性,

是硬件构成的计算机系统向外部世界提供的直接界面。

Page 24: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

一个 CPU 的指令系统是固定的,

不同类型的 CPU 其指令系统不同 ;

同一系列向上兼容。

程序是为要解决的问题编写出来的指令集合。

用户为解决自己的问题所编写的程序称为源程序。

Page 25: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

(2) 机器码和机器语言

用二进制数编码表示的指令,称为机器指令或机器码。

机器语言是机器码及其使用的一组规则。

用机器语言编写的程序称为目标程序。

机器语言特点: CPU 能直接识别的唯一语言 面向机器,可直接被计算机执行 执行速度快,占用内存空间小 编程效率低、可读性差、可移值性差

Page 26: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

例 将地址为 2000H 和 2001H 的两内存单元内容相加, 结果存在地址 2002H 单元中,程序如下: A0 00 20

02 06 01 20A2 02 20

数据暂存器

PSW 标志寄存器 控制电路

指令译码器

AXBXCXDXSIDIBPSP

寄存器组

指令队列

总线接口控制电路

运算器

地址总线 AB

数据总线 DB

控制总线 CB

IP

地址加法器

DSES

SSCS

1010 00000000 00000010 00000000 00100000 01100000 00010010 00001010 00100000 00100010 0000

A0002002060120A20220

MOV AL , [2000H]

ADD AL , [2001H]

MOV [2002H], AL

Page 27: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

(3) 助记符和汇编语言

助记符是有助记忆、并能描述指令功能的符号。通常是指令功能的英文单词的缩写。

例 数的传送指令用助记符 MOV 加法用 ADD ,转移用 JMP 等

用助记符等表示的指令称为汇编格式指令例 MOV AL, 0

汇编语言是汇编格式指令、伪指令及其使用的一组规则。

用汇编语言编写的程序称汇编语言程序。

Page 28: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

上例 将地址为 2000H 和 2001H 的两内存单元内容相加, 结果存在地址 2002H 单元中。

汇编格式指令与机器指令一一对应

用汇编语言编好的程序,

必须翻译成机器码表示的程序,计算机才能运行。

汇编程序是将汇编语言程序翻译成机器语言的一种系统程序。

用机器码编程: A0 00 20

02 06 01 20

A2 02 20

用汇编语言编写的确程序段为:MOV AL , var1

ADD AL , var2

MOV var3 , AL

Page 29: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

汇编语言和机器语言编写的程序:

面向机器,反映机器运行的实际过程 ,

与计算机的硬件结构和指令系统密切相关

算法是用计算机的指令 , 寄存器等描述,

要了解 CPU 的编程结构、寻址方式、指令系统才能设计程序

占内存少,执行速度快

编写繁琐、调试困难

汇编语言相对于机器语言编写的程序:

汇编语言程序,易读易懂,便于修改。

Page 30: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

(4) 高级语言

高级语言是独立于机器、面向过程或对象的语言。

算法是按照人的思维方式给出,比较接近人的自然语言。

上例 高级语言程序段为:

var3 = var1 + var2

由编译程序将高级语言源程序翻译目标程序,

即用机器码表示的程序,机器才能执行。( 不同类型机器由于指令系统不同,它们的编译程序不同 )

Fortran 、 Basic 、 C 等均是高级语言。 使用高级语言编程,效率高,可读性、可移植性强。

Page 31: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

本课程学习汇编语言的意义:

汇编语言程序反应机器运行的实际过程,

通过编制汇编语言程序,加深对计算机工作过程的理解。 本课程涉及到接口电路的设计及应用,

在直接控制硬件的场合,汇编语言比高级语言更具优势,

也可以更好的理解接口工作过程。

Page 32: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

二、 8086/8088 的寻址方式

由指令字节给出的信息求出操作数的地址称为有效地址——EA寻找(得到)操作数有效地址的方法称为操作 数的寻址方法寻找(得到)操作数有效地址和存取操作数的过程称为指令的寻址操作

Page 33: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

(一)操作数寻址方式 共七种寻址方式:

• 1. 立即数寻址• 2. 寄存器寻址• 3. 直接寻址• 4. 寄存器间接寻址 5 种与内存单

元 • 5. 寄存器相对寻址 有关的寻址• 6. 基址加变址寄存器寻址 ( 存储器操作

数 )

• 7. 相对基址加变址寄存器寻址

7 种

Page 34: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

以数据传送指令 MOV 为例介绍寻址方式。

指令 MOV dst, src 执行 ( dst ) ← ( src )

即: 源操作数的内容不变,

目的操作数 = 源操作数

Page 35: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

1.立即数寻址 操作数直接存放在指令中,紧跟在操作码之后,作为指令的一部分,存放在代码段里,这种操作数称为立即数。

操作数在指令中,取来指令立即可得到操作数。称该操作数为立即数。

立即数可以是 8 位或 16 位 (16 位的立即数是高位字节放在高地址 ,低位字节放在低地址 ) 。

应用场合 : 立即数常用来给寄存器或内存单元赋初值。

56B8

内存

20数作操

操作码

例 1 MOV AX , 2056H

结果 ( AH ) = 20H

( AL ) = 56H

例 2 MOV AL , 78 H

结果 ( AL ) = 78H

注意:只能用于源操作数字段,不能用于目的操作数字段。

低地址

高地址

Page 36: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

2. 寄存器寻址方式

操作数在寄存器中,指令中指定寄存器名

8 位操作数, 用 8 位寄存器 :

AH 、 AL 、 BH 、 BL 、 CH 、 CL 、 DH 、DL

16 位操作数,用 16 位寄存器 :

AX 、 BX 、 CX 、 DX 、 SP 、 BP 、 SI 、 DI

CS 、 DS 、 SS 、 ES

这种寻址方式因为操作数在寄存器中

不需要访问存储器因此运算速度较高。

Page 37: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

例 1 MOV AX , 2056H

执行后: (AX)=2056H

例 2 MOV BL , AH

执行前: (BL) = 12H, (AH) = 78H

执行后: (BL) = 78H , (AH) = 78H

▲ 立即数寻址、寄存器寻址的操作数, 不用在取完指令后再到内存中取数。

Page 38: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

指令中用 [ ] 给出偏移地址。 操作数的偏移地址又称有效地址 EA ( Efficient Address)

▲按给出偏移地址方式的不同,分为以下 5 种:

直接寻址 MOV AL, [ 1000H ]

寄存器间接寻址 MOV AL, [ BX ]

寄存器相对寻址 MOV AL, [ BX + 10H ]

基址加变址寄存器 MOV AL, [ BX + SI ]

相对基址加变址寄存器 MOV AL, [ BX + SI + 10H ] 指令中用 [ ] 给出偏移地址

Page 39: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

3 .直接寻址方式( Direct addressing ):

操作数地址的16位偏移量,直接包含在指令中,存放在代码段中指令操作码之后, 但操作数一般存放在数据段中, 必须先求出操作数的物理地址, 然后再访问存储器才能取得操作数。

直接寻址方式要点:

存储器操作数的有效地址 EA 在指令中直接给出。

例 MOV AL, [ 1000H ]

默认段寄存器为 DS 。

操作数所在内存单元的物理地址为:

PA = ( DS )×10H + EA

直接寻址方式默认段寄存器为 DS

Page 40: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

例: MOV AX , [ 1000 H]

若 ( DS ) = 2000H

内存操作数的物理地址为:

PA = ( DS )×10H +EA

= 2000H × 10H + 1000H

= 21000H

执行后 (AX)= 3040H

21000 40

00A1

内存

10

30

指令

思考: 指令 MOV AX,[1000H] 与指令 MOV AX, 1000H 有什么不同?

Page 41: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

在汇编语言程序中,不直接用数值 表示偏移地址, 用符号代替数值表示地址,称符号地址 (变量名 ) 。

buffer 0A

0B

例 符号 buffer 表示一个地址。 MOV AX , [buffer]

或写成 MOV AX , buffer

源操作数为 buffer 指向的内存单元的内容

符号地址 ( 变量名 )经汇编连接后,与一个确定的数值地址相对应可用操作符 Offset 获取变量的偏移地址。

故 PA = ( DS )×10H + Offset buffer 指令执行结果 ( AX ) = 0B0A H如: buffer 在附加段中, 则应指定段跨越。 ( 段跨越或可以是

CS SS 作为段寄存器 )

MOV AX , ES : buffer

或 MOV AX , ES : [buffer]

Page 42: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

4. 寄存器间接寻址( Register indirect addressing )

操作数放在存储器里,操作数的有效地址 EA 由寄存器给出 ,

寄存器的内容为操作数的有效地址。

可用的寄存器有 BX 、 SI 、 DI  、 BP

如 : MOV AL, [ BX ]

MOV AH, [ SI ]

MOV DL, [ DI ]

MOV DH, [ BP ]

Page 43: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

默认段寄存器的关系:

① 使用 BX 、 SI 、 DI ,默认段寄存器为DS

(BX)

PA = ( DS )×10H + (SI)

(DI)

② 使用 BP ,默认段寄存器为 SS

PA = ( SS )×10H + ( BP )

Page 44: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

例: MOV AX , [ DI ]

若 ( DS ) = 3000H

( DI ) = 2000H

则内存操作数的物理地址为:

PA = ( DS )×10H + ( DI )

= 32000H

执行后 (AX) = (32000H) = 400BH

32000 0B

05

8B指 令

40

思考: 指令 MOV AX,[ DI ] 与指令 MOV AX, DI 有什么不同?

Page 45: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

例: MOV AX , [ BP ]

若 ( SS ) = 4000H

( BP ) = 3000H

则内存操作数的物理地址为:

PA = ( SS )×10H + ( BP )

= 43000H

指令执行后 (AX) = (43000H) = 0102H

43000 02

46

8B指 令

01

Page 46: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

5. 寄存器相对寻址( Register relative addressing )

或变址寻址 ( Index Addressing )

操作数的有效地址是一个基址或变址寄存器的内容

和指令中指定的 8 位或 16 位位移量( displacement )之和。

可 用的寄存器有 BX 、 DI  、 SI 、 BP , 与寄存器间接寻址相同

如 : MOV AL, [ BX +10H]

MOV AH, [ DI+20H ]

MOV DL, 30H [ SI ]

MOV DH, 40H [ BP ]

Page 47: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

默认段寄存器的关系与寄存器间接寻址相同 , 允许段跨越。

① 使用 BX 、 SI 、 DI ,默认段寄存器为 DS

(BX)

PA = ( DS )×10H + (SI) + 偏移量

(DI)

② 使用 BP ,默认段寄存器为 SS

PA = ( SS )×10H + ( BP ) + 偏移量

Page 48: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

例: MOV AX , [ BX+30H ]

若 ( DS ) = 2000H

( BX ) = 1000H

则内存操作数的物理地址为:

PA = ( DS )×10H + ( BX ) + 30H

= 21030H

指令执行后:

(AX) = (21030H) = 8976H

21030 76

30

47指 令

89

8B

Page 49: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

例: MOV AX , 60H [ BP ]

若 ( SS ) = 3000H

( BP ) = 200H

则内存操作数的物理地址为:

PA = ( SS )×10H + ( BP ) + 60H

= 30260H

指令执行后:

(AX) = (30260H) = 0ABCH

30260 BC

60

46指 令

0A

8B

Page 50: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

6. 基址加变址寻址

操作数的有效地址由一个基址寄存器与一个变址寄存器之和给出。

可用的基址寄存器为 BX 、 BP ,变址寄存器为 SI 、 DI 。

如 MOV AL , [ BX+SI ]

MOV AX , [ BX][DI ]

MOV DL , [ BP+SI ]

MOV DX , [ BP][DI ]

Page 51: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

默认段寄存器由基址寄存器决定 , 允许段跨越。

① 基址寄存器为 BX ,默认段寄存器为 DS

(SI)

PA = ( DS )×10H + ( BX ) +

(DI)

② 基址寄存器为 BP ,默认段寄存器为 SS

(SI)

PA = ( SS )×10H + ( BP ) +

(DI)

Page 52: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

使用 BX 的基址加变址寻址,默认段寄存器为 DS

CPU 总线 内存

DSESSSCS

IP

数据暂存器

PSW 标志寄存器 执行部件控制电路

指令译码器

AXBXCXDX

AHBHCHDH

SIDIBPSP

ALBLCLDL

寄存器组

指令队列

总线接口控制电路

运算器

地址加法器

、、、指令 1

指令 2

指令 3

指令 4

、、、数据 1

数据 2

数据 3

、、、

地址总线 AB

数据总线 DB

控制总线 CB

Page 53: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

使用 BP 的基址加变址寻址,默认段寄存器为 SS

CPU 总线 内存

DSESSSCS

IP

数据暂存器

PSW 标志寄存器 执行部件控制电路

指令译码器

AXBXCXDX

AHBHCHDH

SIDIBPSP

ALBLCLDL

寄存器组

指令队列

总线接口控制电路

运算器

地址加法器

、、、指令 1

指令 2

指令 3

指令 4

、、、数据 1

数据 2

数据 3

、、、

地址总线 AB

数据总线 DB

控制总线 CB

Page 54: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

例: MOV AX , [ BX + SI ]

若 ( DS ) = 4000H

( BX ) = 2000H

( SI ) = 100H

则内存操作数的物理地址为:

PA = ( DS )×10H + ( BX ) + ( SI )

= 42100H

指令执行后

(AX) = (42100H) = 2345H

42100 45

00

8B指 令

23

Page 55: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

7. 相对基址加变址寻址( Relative based indexed addressing )

操作数的有效地址由 基址寄存器、变址寄存器、偏移量 ( 8 位或 16 位 ) 三者之和给出。

可用的寄存器与基址加变址寻址方式相同 基址寄存器有 BX 、 BP

变址寄存器有 SI 、 DI

如 MOV AL, [ BX+SI +10H]

MOV AX , 20H[ BX][DI ]

MOV DL , [ BP+SI+30H ]

MOV DX , 40H[ BP][DI ]

Page 56: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

默认段寄存器由基址寄存器决定 , 与基址加变址寻址相同 .

允许段跨越。

① 基址寄存器为 BX ,默认段寄存器为 DS

(SI)

PA = ( DS )×10H + ( BX ) + + 偏移量 (DI)

② 基址寄存器为 BP ,默认段寄存器为 SS

(SI)

PA = ( SS )×10H + ( BP ) + + 偏移量 (DI)

Page 57: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

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

若 ( DS ) = 4000H

( BX ) = 3000H

( SI ) = 200H

则内存操作数的物理地址为: PA = ( DS )×10H + ( BX ) + ( SI ) + 10H

= 43210H

指令执行后 (AX) = (43210H) = 8877H

43210 77

10

40指 令

88

8B

Page 58: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

作业:

( 1 ) 1.5 ,( 2 ) 6 ( 1 ) ( 3 ) ( 5 )

( 7 ) ( 9 ) ,( 3 ) 7 ( 1 ) ( 3 ) ( 5 ) ( 7 )

Page 59: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

第 1 次作业

6. ( 1 ) [X] 补= 81H=10000001B [X] 原= 11111111BX= =- 127

( 2 ) [Y] 补= 77H [Y] 原= 77H , Y = 119

7. ( 1 ) X=0001 0001B [X] 反= 0001 0001B

( 2 ) Y= - 0001 0001B[Y] 反 =11101110B19 ( 2 ) [X] 补= 0000 0001 0000 0001

[X] = 12920 [X] 补= 1000 0001 0000 0001 [X] 原= 1111 1110 1111 1111

[ - X] = 0111 1110 1111 1111

Page 60: 第 3 讲   8086/88 微处理器系 2006.9.29 (星期一五)

第 2 次作业:

1. 详细说明 8088CPU 中寄存器的作用8088CPU 的寄存器包括三组:通用寄存器 AX 、 BX 、 CX 、

DX 、 BP 、 SP 、 SI 、 DI ,段寄存器 CS 、 DS 、 ES 、 SS 和标志寄存器 PCW 。详细说明见笔记。2. 如何用 16 位寄存器实现对 20 根地址 线的操作。

8088 的地址分为段地址和偏移量(有效)地址,实际地址为 20 位物理地址,由 20 位的加法加法器得到,具体为

物理地址=段地址 ×16 +有效地址