计算机硬件技术基础-张桂新Chapter2-2_第1页
计算机硬件技术基础-张桂新Chapter2-2_第2页
计算机硬件技术基础-张桂新Chapter2-2_第3页
计算机硬件技术基础-张桂新Chapter2-2_第4页
计算机硬件技术基础-张桂新Chapter2-2_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二节8086/8088的寻址方式一、概述

1.程序语言简介

2.8086/8088指令格式简介二、8086/8088的寻址方式

1.立即数寻址

2.寄存器寻址

3.直接寻址

4.寄存器间接寻址

5.寄存器相对寻址

6.基址加变址寄存器

7.相对基址加变址寄存器一、概述1.

程序语言简介2.8086/8088指令格式简介1.程序语言简介1)

指令、指令系统和程序2)

机器码和机器语言3)助记符和汇编语言4)

高级语言▲

了解本课程学习汇编语言的目的

指令格式操作码

操作数例ADDAL,10H数据传送算术运算逻辑运算串操作控制转移处理机控制

按功能指令分六类1)操作码指明CPU要执行什么样的操作。是一条指令必不可少的部分,用助记符表示。2)操作数指明参与操作的数据或数据所在的地方。了解操作数的来源、个数、类型、执行速度。2.

8086/8088指令格式简介(1)操作数来源指明操作数所在的地方有三种来源:①

操作数在指令中,称立即数操作数如MOVAL,9

操作数在寄存器中,称寄存器操作数指令中给出用符号表示的寄存器名。如MOVAL,9③

操作数在内存单元中,称存储器操作数或内存操作数指令中给出该内存单元的地址。用[]表示存储器操作数如MOVAL,[2000H](2)操作数个数按指令格式中,操作数个数的多少分为三类:无操作数:指令只有一个操作码,没有操作数单操作数:指令中给出一个操作数双操作数:指令中给出两个操作数。①无操作数:指令只有一个操作码,没有操作数。有两种可能:▲有些操作不需要操作数。如HLT,NOP等处理机控制指令。▲操作数隐含在指令中。如STC,CLC等处理机控制命令。

AAA,DAA等调整指令。②单操作数:指令中给出一个操作数。有两种可能:▲有些操作只需要一个操作数如INCAL;(AL)←(AL)+1▲有些操作将另一个操作数隐含在指令中如MULBL;(AX)←(AL)×(BL)③双操作数:指令中给出两个操作数。

如ADDAL,BL

;(AL)←(AL)+(BL)

目的操作数

源操作数

操作后的结果通常存放在目的操作数中。

3)操作数类型指令应指明参与操作的数是字节还是字,即操作数的类型。通常操作数的类型可由操作数本身隐含给出。只在特殊情况下需要指明。8086/8088:

有的操作既可对字节操作,又可对字操作有的操作只允许对字操作①

指令中有寄存器操作数,由寄存器操作数决定类型。例:

MOV[BX],AL

;字节操作,[BX]←ALMOV[BX],AX

;字操作,[BX]←AL,[BX+1]←AHD:\>DEBUG

;进入DEBUG-A

;汇编指令1693:0100MOV[BX],AL1693:0102MOV[BX],AX1693:0104-U100

;返汇编指令

1693:01008807MOV[BX],AL1693:01028907MOV[BX],AX、、、、、、在DEBUG下查看指令对应的机器码:两条指令的机器码不同:一个是0788H,另一个是0789H②

指令操作数中无寄存器,则由内存操作数的类型决定。value

00H….内存value

00H00H例

value是一个变量(即内存操作数);

若定义value为字节类型

:

则MOVvalue,0是字节操作。

若定义value为字类型

:

则MOV

value,0是一个字操作。例

MOV[BX],0③

指令中无类型的依据,需对存储器操作数加类型说明。用PTR属性伪操作说明类型。

MOVbytePTR[BX],0

字节操作,

[BX]←0MOVwordPTR[BX],0

字操作,

[BX]←0,[BX+1]←04)执行速度寄存器操作数立即数操作数存储器操作数例

movAL,BL

movAL,0

movAL,[BX]哪条指令执行速度快?三条指令:操作类型相同,都是传送指令,且目的操作数相同,不同的是源操作数。对同一类型指令,执行速度:寄存器操作数立即数操作数存储器操作数快慢例

movAL,BL

movAL,0

movAL,[BX]

慢二、8086/8088的寻址方式指明操作数的来源,即寻找(得到)操作数的方法。共7种寻址方式:1.立即数寻址2.寄存器寻址3.

直接寻址4.

寄存器间接寻址5种与内存单元

5.

寄存器相对寻址有关的寻址6.

基址加变址寄存器寻址(存储器操作数)7.

相对基址加变址寄存器寻址以数据传送指令MOV为例介绍寻址方式。指令

MOVdst,src

执行(dst)←(src)即:源操作数的内容不变,目的操作数=源操作数1.立即数寻址

操作数在指令中,取来指令立即可得到操作数。称该操作数为立即数。立即数可以是8位或16位。立即数常用来给寄存器或内存单元赋初值。例1MOVAX,2056H

结果(AH)=20H(AL)=56H例2MOVAL,78H

结果(AL)=78H2.寄存器寻址方式操作数在寄存器中,指令中指定寄存器名

8位操作数,用8位寄存器:AH、AL、BH、BL、CH、CL、DH、DL16位操作数,用16位寄存器:AX、BX、CX、DX、SP、BP、SI、DICS、DS、SS、ES例1

MOVAX,2056H

执行后:(AX)=2056H例2

MOVBL,AH

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

执行后:(BL)=78H(AH)=78H立即数寻址、寄存器寻址的操作数,不用在取完指令后再到内存中取数。CPU总线内存DSESSSCSIP数据暂存器PSW标志寄存器执行部件控制电路指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组指令队列总线接口控制电路运算器地址加法器、、、指令1指令2指令3指令4、、、数据1数据2数据3、、、地址总线AB数据总线DB控制总线CB地址译码器以下的5中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。指令中给出的是该操作数的地址,包括段地址和偏移地址。CPU总线内存DSESSSCSIP数据暂存器PSW标志寄存器执行部件控制电路指令译码器AXBXCXDXAHBHCHDHSIDIBPSPALBLCLDL寄存器组指令队列总线接口控制电路运算器地址加法器、、、指令1指令2指令3指令4、、、数据1数据2数据3、、、地址总线AB数据总线DB控制总线CB地址译码器例编程将CL寄存器的内容传送到21000H单元中。MOVAX,2000HMOVDS,AX;(DS)=2000HMOVDI,1000H;(DI)=1000H

MOVDS:[DI],CL;(21000H)=(CL)地址21000H=2000:1000H

编程时,DS存放段地址2000HDI存放偏移地址1000H如指令

MOVDS:[DI],CL完成将CL寄存器中的内容传送到以DS为段值,DI为偏移值的内存单元中内存单元的地址由段地址和偏移地址构成▲为减短指令长度指令中只给出偏移地址的来源,段地址由默认关系给出。

MOVAL,[2000H]▲CPU根据偏移地址给出的方式,按默认关系自动选择段寄存器,获取段值,由段值、偏移值构成操作数所在内存单元的物理地址。

上例

PA=(DS)×10H+2000H

即选择DS寄存器的内容为段地址。指令中用

[]

给出偏移地址。操作数的偏移地址又称有效地址EA(EfficientAddress)按给出偏移地址方式的不同,分为以下5种:直接寻址

MOVAL,[1000H]寄存器间接寻址

MOVAL,[BX]寄存器相对寻址

MOVAL,[BX+10H]基址加变址寄存器

MOVAL,[BX+SI]

相对基址加变址寄存器

MOVAL,[BX+SI+10H]3.直接寻址方式存储器操作数的有效地址EA在指令中直接给出。

MOVAL,[1000H]

默认段寄存器为DS。

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

PA=(DS)×10H+EA例:MOVAX,[1000H]

若(DS)=2000H

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

PA=(DS)×10H+EA=2000H×10H+1000H=21000H

执行后(AX)=3040H

注意指令MOVAX,[1000H]

与指令MOVAX,1000H有什么不同?在汇编语言程序中,不直接用数值表示偏移地址,用符号代替数值表示地址,称符号地址(变量名)。例符号buffer表示一个地址。

MOVAX,[buffer]或写成MOVAX,buffer

源操作数为buffer指向的内存单元的内容符号地址(变量名)经汇编连接后,与一个确定的数值地址相对应可用操作符Offset

获取变量的偏移地址。故PA=(DS)×10H+Offsetbuffer

指令执行结果(AX)=0B0AH4.寄存器间接寻址存储器操作数的有效地址EA由寄存器给出,

寄存器的内容为操作数的有效地址。可用的寄存器有BX、SI、DI

、BP

如:MOVAL,[BX]

MOVAH,[SI]

MOVDL,[DI]

MOVDH,[BP]

默认段寄存器的关系:①使用BX、SI、DI,默认段寄存器为DS(BX)PA=(DS)×10H+(SI)(DI)②使用BP,默认段寄存器为SSPA=(SS)×10H+(BP)

例:

MOVAX,[DI]

若(DS)=3000H(DI)=2000H

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

执行后(AX)=(32000H)=400BH注意指令MOVAX,[DI]

与指令MOVAX,DI有什么不同?例:

MOVAX,[BP]

若(SS)=4000H(BP)=3000H

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

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

指令执行后(AX)=(43000H)=0102H5.寄存器相对寻址操作数的有效地址由一个寄存器与一个偏移量相加得到偏移量(相对量)在指令中给出,范围在0000~FFFFH可用的寄存器有BX、DI

、SI、BP,与寄存器间接寻址相同如:MOVAL,[BX+10H]MOVAH,[DI+20H]MOVDL,30H[SI]MOVDH,40H[BP]

默认段寄存器的关系与寄存器间接寻址相同①使用BX、SI、DI,默认段寄存器为DS(BX)PA=(DS)×10H+(SI)+偏移量

(DI)②使用BP,默认段寄存器为SSPA=(SS)×10H+(BP)

+偏移量例:

MOVAX,[BX+30H]

若(DS)=2000H(BX)=1000H

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

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

指令执行后:

(AX)=(21030H)=8976H例:

MOVAX,60H[BP]

若(SS)=3000H(BP)=200H

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

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

指令执行后:

(AX)=(30260H)=0ABCH6.基址加变址寻址

操作数的有效地址由一个基址寄存器与一个变址寄存器之和给出。可用的基址寄存器为BX、BP

变址寄存器为SI、DI

如MOVAL,[BX+SI]MOVAX,[BX][DI]MOVDL,[BP+SI]MOVDX,[BP][DI]

默认段寄存器由基址寄存器决定。①

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

(SI)PA=(DS)×10H+(BX)+(DI)②基址寄存器为BP,默认段寄存器为SS

(SI)PA=(SS)×10H+(BP)+(DI)例:

MOVAX,[BX+SI]

若(DS)=4000H(BX)=2000H(SI)=100H

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

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

指令执行后

(AX)=(42100H)=2345H

7.相对基址加变址寻址

操作数的有效地址由基址寄存器、变址寄存器、偏移量三者之和给出。可用的寄存器与基址加变址寻址方式相同基址寄存器有BX、BP

变址寄存器有SI、DI如MOVAL,[BX+SI+10H]MOVAX,20H[BX][DI]MOVDL,[BP+SI+30H]MOVDX,40H[BP][DI]

默认段寄存器由基址寄存器决定,与基址加变址寻址相同①基址寄存器为BX,默认段寄存器为DS

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

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

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

(DI)例:

MOVAX,[BX+SI+10H]

若(DS)=4000H(BX)=3000H(SI)=200H

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

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

指令执行后

(AX)=(43210H)=8877H内存操作数按给出偏移地址方式的不同,有以下5种寻址方式:直接寻址

MOVAL,[1000H]寄存器间接寻址

MOVAL,[BX]寄存器相对寻址

MOVAL,[BX+10H]基址加变址寄存器

MOVAL,[BX+SI]

相对基址加变址寄存器

MOVAL,[BX+SI+10H]存储器操作数的段地址按默认关系得到。特点:有BP默认SS

无BP默认DS寻址方式的几点说明:1.不自创寻址方式内存操作数地址只能由BX、BP、SI、DI给出,它们的组合也不是任意的。只有存储器操作数需用段跨越的前缀

ES:MOV[SI],CX

DS:MOVAL,[BP]MOVES:AX,0

CS:MOVCX,22H除此之外,其他方式均错误。如MOVCL,[AX]

MOVAX,[DX]

MOVAL,[CX]MOVCX,[BP+BX]

MOVAH,[SI+DI]

MOVBL,[AX+CX]2.偏移量可用符号地址给出例:MOVAX,mask[BX]

若(DS)=1000H

(BX)=300HOFFSETmask=2000H

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

执行后(AX)=6B5AH3.段跨越前缀的使用(自学)段跨越前缀在指令中出现的指定内存单元段地址的段寄存器符号。表示方法为段寄存器名:例:MOVAX,ES:[BX]

ES:MOVAX,[BX]

(DEBUG下格式)为减小指令长度,CPU采用默认关系获取段地址。但,使用段跨越前缀可强行改变这种默认关系。使用段跨越前缀的指令比不使用的指令要多占一个字节。使用段跨越前缀的物理地址计算例:

MOVAX,ES:[BX]使用段跨越的前缀后,段地址由指定的段寄存器给出,不再遵循默认关系。PA=(ES)×10H+(BX)而不等于≠(DS)×10H+(BX)只有存储器操作数需用段跨越的前缀

ES:MOV[SI],CX

DS:MOVAL,[BP]MOVES:AX,0

CS:MOVCX,22H第三节8086/8088的指令系统一.

概述二.

数据传送指令三.

算术运算指令四.

逻辑运算指令五.

控制转移指令六.

处理机控制指令七.

串操作指令一.概述1.

指令助记符表2.

学习指令的要点3.

利用DEBUG程序,学习指令系统4.

指令中操作数的表示5.

书写指令注意事项1.指令助记符表2.学习指令的要点从以下几个方面来掌握一条指令:

指令的助记符

指令的格式:操作数的个数、类型

执行的操作:指令执行后的结果包括:哪些寄存器、内存单元的值发生了变化对标志位有无影响,哪些受影响

特点及注意事项只介绍常用的指令,其他需要时可自学。D:\>DEBUG-A

;汇编指令0AF8:0100MOVAL,B5

0AF8:0102ADDAL,8F0AF8:0104-R

;显示指令执行前各寄存器的值AX=0000BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0100NVUP

EIPLNZNA

PO

NC-T=1002

;执行指令,查看结果AX=0044BX=0000CX=0000DX=0000、、、、、、CS=0AF8IP=0104OVUPEIPL

NZ

AC

PE

CY0AF8:01042080FC01AND[BX+SI+01FC],AL-

10110101

+

10001111进位1

111

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论