微机原理第04章(寻址方式和传送指令)_第1页
微机原理第04章(寻址方式和传送指令)_第2页
微机原理第04章(寻址方式和传送指令)_第3页
微机原理第04章(寻址方式和传送指令)_第4页
微机原理第04章(寻址方式和传送指令)_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第4章

第4章 8086/8088指令系统第一节8086/8088的寻址方式第二节8086/8088的指令系统

4.1

8086/8088的寻址方式主要内容:一、指令系统概念和指令组成二、8086/8088寻址方式三、小结一、指令系统概念和指令组成

1、指令系统概念计算机通过执行指令序列来解决问题,

每种计算机都有一组指令集提供用户使用,

这组指令集就称为计算机的指令系统。

2、指令组成计算机中指令由操作码字段和操作数字段两部分组成。一条可以由1~7个字节组成。

操作码字段-----―指示计算机要执行的操作,

操作数字段-----―指出在指令执行操作过程中所需要的操作数;可以是操作数本身;可以是操作数地址或是地址的一部分;可以是指向操作数地址的指针或其他有关操作数的信息。3、指令的一般格式:操作码字段:在机器里只需对某种操作指定确定的二进制代码。通常用指令的第一个字节表示,不够可以占第二个字节中的3位。操作数字段:操作数字段可以有一个,二个或三个地址指令。例: INCCX ADDAX,BX4、操作数的存放 操作数的存放不外乎三种情况:(1)

操作数包含在指令中即指令的操作数字段包含操作数本身。这种操作数为立即数。 例:MOVAL,08H(2)操作数包含在CPU的一个内部寄存器中 例:INCCX

指令中的操作数字段是CPU内部寄存器的一个编码。 这种寻址方式称为寄存器寻址。(3)操作数在内存数据区

操作数在内存数据区,操作数字段包含着此操作数地址。

在8088中,任何内存地址是由两部分组成:

段的基地址:单元所在段的基地址 (大部分情况是数据段寄存器DS中);

段内偏移量:此单元与段基地址的距离。

有效地址EA(EffectiveAddress):

段内偏移量为适应各种数据结构的需要,可以有几个部分组成,所以也把它称为有效地址EA。

寻址方式不同EA的构成不同。归纳EA可有多种情况构成:

直接寻址,寄存器间接寻址,寄存器相对寻址,基址加变址寻址,相对基址加变址寻址。

寻址方式——如何寻找内存操作数。不同寻址方式实质上是构成它段内的偏移量的方法不同。二、8086、8088寻址方式(一)立即寻址 (Immediateaddressing)(二)寄存器寻址方式(Registeraddressing)(三)直接寻址(Directaddressing)(四)寄存器间接寻址方式(Registerindirectaddressing)(五)寄存器相对寻址方式(Registerrelativeaddressing)

或变址寻址(IndexAddressing)(六)基址加变址寻址方式(Basedindexedaddressing)(七)相对基址加变址寻址方式(Relativebasedindexed addressing)(一)立即寻址(Immediateaddressing)

操作数直接存放在指令中,紧跟在操作码之后,作为指令的一部分,存放在代码段里,这种操作数称为立即数。立即数可以是8位或16位的。16位的立即数是高位字节放在高地址,低位字节放在低地址。

使用场合:经常用于给寄存器赋初值。

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

第4章:(一)立即数寻址方式指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)这种操作数被称为立即数imm可以是8位数值i8(00H~FFH)也可以是16位数值i16(0000H~FFFFH)立即数寻址方式常用来给寄存器和存储单元赋值,多以常量形式出现演示MOVAX,0102H ;AX←0102H第3章

(二)

寄存器寻址方式操作数存放在CPU的内部寄存器reg中:8位寄存器r8:AH、AL、BH、BL、CH、CL、DH、DL16位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP4个段寄存器seg:CS、DS、SS、ES寄存器名表示其内容(操作数)演示MOVAX,BX ;AX←BX第3章

(三)

直接寻址方式直接寻址方式的有效地址在指令中直接给出默认的段地址在DS段寄存器,可使用段超越前缀改变用中括号包含有效地址,表达存储单元的内容演示MOVAX,[2000H] ;AX←DS:[2000H]MOVAX,ES:[2000H] ;AX←ES:[2000H]注意:(1)直接寻址方式适用于处理单个变量。(2)直接寻址方式隐含的段寄存器是DS,

8086/8088允许段跨越,即允许使用CSSSES作为段寄存器,这时,必须在指令中特别标明。

(3)IBMPC机中规定双操作数指令必须有一个操作数使用寄存器方式,这就是常常先要把一个变量送到寄存器去的原因。例:要处理某存放在存储器里的变量,可以用直接寻址方式把变量先取到一个寄存器中再作处理。(四) 寄存器间接寻址方式(Registerindirectaddressing)

操作数在存储器中,

操作数地址的16位偏移量包含在:

BP、BX、SI、DI寄存器中。

1、若选择SI、DI、BX作为间接寻址 操作数一般在现行数据段区域中,用(DS)作为段地址。 即操作数物理地址为:

物理地址PA=16d×(DS)+(BX)

物理地址PA=16d×(DS)+(SI)

物理地址PA=16d×(DS)+(DI)MOVAX,[BX];AX←DS:[BX]演示

例:MOVBX,[DI]

(DS)=6000H

(DI)=2000HPA=62000H

(62000H)=50A0H

(BX)=50A0H寄存器间接寻址方式

MOVBX,[DI]2、若选择BP寄存器作为间接寻址操作数在堆栈段区域中,用SS寄存器的内容作为段地址。

操作数物理地址:PA=16d×(SS)+(BP)例:MOV[BP],AX执行前:(SS)=1000H, (BP)=3000H, (AX)=1234H执行后:PA=13000H (13000H)=1234H

寄存器间接寻址方式

MOV[BP],AX3、用SI、DI、BX、BP作为间接寻址允许段跨越

指令中可以指定段跨越前缀来取得其他段中的数据。例:MOVES:[DI],AXMOVDX,DS:[BP]这种寻址方法可以用于表格处理。第4章

(五)寄存器相对寻址方式(Registerrelativeaddressing)或变址寻址(IndexAddressing)

有效地址是寄存器内容与有符号8位或16位位移量之和,寄存器可以是BX、BP或SI、DI有效地址=BX/BP/SI/DI+8/16位位移量段地址对应BX/SI/DI寄存器默认是DS,对应BP寄存器默认是SS;可用段超越前缀改变演示MOVAX,[SI+06H] ;AX←DS:[SI+06H]MOVAX,06H[SI] ;AX←DS:[SI+06H]8086/8088CPU中有两个变址寄存器

:

源变址寄存器SI;

目的变址寄存器

DI

操作数一般在内存的数据段中,但允许段跨越。除有段跨越前缀之外,形成物理地址有二种方式:

例:

MOVAX,COUNT[BP]或MOVAX,[COUNT+BP]或MOVAX,COUNT+[BP]COUNT为16位位移量。指令执行前:(SS)=5000H, (BP)=3000H, COUNT=2040H, (AX)=1234H指令执行后:EA=5040H PA=55040H (55040H)=5548H (AX)=5548H寄存器相对寻址方式MOVAX,COUNT[BP]用途:这种寻址方式同样用于表格处理。表格首地址COUNT

修改基址或变址寄存器来取得表格中的值。例:某数据表的首地址为COUNT

欲读取表中第10个数据,存放到(AL)中。第10个数据的有效地址:EA=COUNT+9 MOVSI,09H MOVAL,[SI+COUNT]* 直接变址寻址方式也可以使用段跨越前缀

MOVDL,ES:STRING[SI]第4章(六)基址变址寻址方式有效地址由基址寄存器(BX或BP)的内容加上变址寄存器(SI或DI)的内容构成:有效地址=BX/BP+SI/DI段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变演示MOVAX,[BX+SI] ;AX←DS:[BX+SI]MOVAX,[BX][SI] ;AX←DS:[BX+SI]除有段跨越前缀之外,形成物理地址有二种方式:例:

MOVAX,[BX][SI]或MOVAX,[BX+SI]执行指令前:

(DS)=3200H, (BX)=0456H, (SI)=1094H (334EAH)=4567H执行指令后:

EA=14EAH PA=334EAH (AX)=4567H基址加变址寻址方式

MOVAX,[BX+SI]用途:这种寻址方式同样适用于数组或表格处理。 表格首地址基址寄存器中,

用变址寄存器来访问数组中的元素。 二个寄存器都能修改, 所以比直接变址方式更灵。这种寻址方式允许段跨越。 使用段跨越前缀格式: MOVAX,ES:[BX][SI]第4章

(七)

相对基址变址寻址方式有效地址是基址寄存器(BX/BP)、变址寄存器(SI/DI)与一个8位或16位位移量之和:有效地址=BX/BP+SI/DI+8/16位位移量段地址对应BX基址寄存器默认是DS,对应BP基址寄存器默认是SS;可用段超越前缀改变演示MOVAX,[BX+DI+6] ;AX←DS:[BX+DI+6]MOVAX,6[BX+DI]MOVAX,6[BX][DI]除有段跨越前缀之外,形成物理地址有二种方式:例:MOVAX,MASK[BX][DI]MOVAX,MASK[BX+DI]MOVAX,[MASX+BX+DI]执行指令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4050H执行指令后:EA=2A7AHPA=32A7AH(AX)=4050H相对基址加变址MOVAX,MASK+[BX+DI]用途: 这种寻址方式为堆栈处理提供方便: (BP)

栈顶(一般BP可指向栈顶) 从栈顶到数组的首地址可以用位移量表示(MASK).

变址寄存器(SI)或(DI)——指向数组中某个元素。 第4章 8086/8088指令系统一、概述8086/8088的指令系统中共有92种基本指令。可以分成6个功能组:1. 数据传送(Datatransfer)2. 算术运算(Arithmetic)3. 逻辑运算和移位指令(Logic&Shift)4. 串操作(Stringmanipulation)5. 控制转移(ControlTransfer)6. 处理器控制(ProcessorControl)第4章4.28086/8088指令系统4.2.1数据传送类指令数据传送是计算机中最基本、最重要的一种操作,传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOVXCHGXLATPUSHPOPLEA第4章:4.28086/8088指令系统4.2.1数据传送类指令(一)通用传送指令(GeneralPurposeTransfer)(二)输入输出指令(InputandOutput)(三)目的地址传送指令(Address-objecttransfer)(四)标志传送指令(Flagregistertransfer)第4章:(一)通用数据传送指令提供方便灵活的通用传送操作有3条指令MOVXCHGXLATMOVXCHGXLAT第4章:1.传送指令MOV(move)把一个字节或字的操作数从源地址传送至目的地址MOVreg/mem,imm;立即数送寄存器或主存MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存MOVreg/seg,mem;主存送(段)寄存器MOVreg/mem,seg;段寄存器送寄存器或主存演示第4章:MOV指令--立即数传送movcl,4 ;cl←4,字节传送movdx,0ffh

;dx←00ffh,字传送movsi,200h

;si←0200h,字传送movbvar,0ah

;字节传送;假设bvar是一个字节变量,定义如下:bvar

db0movwvar,0bh

;字传送;假设wvar是一个字变量,定义如下:wvar

dw0明确指令是字节操作还是字操作以字母开头的常数要有前导0第4章:MOV指令--寄存器传送mov

ah,al

;ah←al,字节传送mov

bvar,ch

;bvar←ch

,字节传送mov

ax,bx

;ax←bx,字传送mov

ds,ax

;ds←ax,字传送mov[bx],al

;[bx]←al,字节传送寄存器具有明确的字节和字类型第4章:MOV指令--存储器传送mov

al,[bx] ;al←ds:[bx]mov

dx,[bp] ;dx←ss:[bp+0]movdx,[bp+4] ;dx←ss:[bp+4]mov

es,[si] ;es←ds:[si]不存在存储器向存储器的传送指令第4章:MOV指令--段寄存器传送mov[si],dsmov

ax,ds

;ax←dsmov

es,ax

;es←ax←ds对段寄存器的操作不灵活第4章:MOV指令传送功能图解MOV指令也并非任意传送!立即数段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存储器非法指令的主要现象:两个操作数的类型不一致无法确定是字节量还是字量操作两个操作数都是存储器段寄存器的操作有一些限制第4章:非法指令--两个操作数类型不一致在绝大多数双操作数指令中,目的操作数和源操作数必须具有一致的数据类型,或者同为字量,或者同为字节量,否则为非法指令

MOVAL,050AH ;非法指令,修正: ;movax,050ah MOVSI,DL ;非法指令,修正: ;movdh,0

;mov

si,dx第4章:非法指令--无法确定是字节量还是字量操作当无法通过任一个操作数确定是操作类型时,需要利用汇编语言的操作符显式指明

MOV[BX+SI],255 ;非法指令,修正: ;mov

byteptr[bx+si],255

;byteptr

说明是字节操作 ;mov

wordptr[bx+si],255

;wordptr

说明是字操作第4章:非法指令--两个操作数都是存储器8088指令系统除串操作指令外,不允许两个操作数都是存储单元(存储器操作数)

MOVbuf2,buf1 ;非法指令,修正:

;假设buf2和buf1是两个字变量

;movax,buf1

;movbuf2,ax

;假设buf2和buf1是两个字节变量

;moval,buf1

;movbuf2,al第4章:非法指令--段寄存器的操作有一些限制8088指令系统中,能直接对段寄存器操作的指令只有MOV等个别传送指令,并且不灵活

MOVDS,ES ;非法指令,修正: ;mov

ax,es

;mov

ds,ax MOVDS,100H ;非法指令,修正: ;movax,100h

;mov

ds,ax

MOVCS,[SI] ;非法指令 ;指令存在,但不能执行第4章:2.交换指令XCHG(exchange)把两个地方的数据进行互换寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据XCHGreg,reg/mem;reg

reg/mem演示第4章:例4.2数据交换movax,1199h ;ax=1199hxchg

ah,al

;ax=9911h;等同于xchg

al,ahmovwvar,5566h ;wvar是一个字量变量xchg

ax,wvar

;ax=5566h,wvar=9911h;等同于xchg

wvar,ax

xchg

al,byte

ptrwvar+1

;ax=5599h,wvar=6611h

;“byteptrwvar+1”强制为字节量,只取高字节与AL类型交换,否则数据类型不匹配第4章:3.换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目标代码XLAT

;al←ds:[bx+al]演示第4章:4.2.2堆栈操作指令堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP图示第4章:进栈指令PUSH进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部PUSHr16/m16/seg

;SP←SP-2

;SS:[SP]←r16/m16/seg演示pushaxpush[2000h]第4章:出栈指令POP出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2POPr16/m16/seg

;r16/m16/seg←SS:[SP]

;SP←SP+2pop

温馨提示

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

评论

0/150

提交评论