清华大学-计算机硬件技术基础-ZGP3_第1页
清华大学-计算机硬件技术基础-ZGP3_第2页
清华大学-计算机硬件技术基础-ZGP3_第3页
清华大学-计算机硬件技术基础-ZGP3_第4页
清华大学-计算机硬件技术基础-ZGP3_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

第2章

8086/8088的寻址方式

和指令系统2.28086/8088指令系统2.2.1数据传送指令2。2。2算术运算指令复习:P48~P58,预习:P58~P72作业:1-26;2-1;2-3;2-5

1

堆栈:在内存中开辟若干单元作为栈区,按“后进先出”方式工作。

为什么要设置堆栈?

为什么要按“后进先出方式工作?参见图2-7”(2).堆栈操作指令2主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP’执行子程序2转子程序2返回子程序1IP’(下)执行子程序1继续执行子程序1(a)(b)图2-7子程序调用示意图(a)主程序调子程序;(b)子程序嵌套示意图IP(下)主程继续压栈弹出IP压栈弹出3堆栈规定设置在堆栈段SS内,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。①压栈指令PUSHSRC例:PUSH AX ;将AX内容压栈

执行操作:(SP)-1←高字节AH

(SP)-2←低字节AL(SP)←(SP)-24设(AX)=1020H,执行示意图如图低地址存储区(SS段)执行前(AX)=1020(SP)低地址存储区(SS段)进栈方向执行后2010ALAH2-8图2-8PUSHAX指令执行示意图(SP)-1(SP)-2(SP)5压栈指令的格式为:

PUSH REGPUSH MEM/REGPUSH SEGREG②弹出指令

POP DST例:POP BX ;将栈顶内容弹至BX执行操作:(BL)←(SP)

(BH)←(SP)+1

(SP)←(SP)+2注意进栈方向是高地址向低地址发展。

6POP BX的执行示意图如图2-9所示低地址存储区(SS段)出栈方向执行前2010图2-9POPBX指令执行示意图(SP)低地址存储区(SS段)执行后(BX)=10202010(SP)(SP)+1(SP)+27

POP指令的格式同PUSH指令,堆栈指令使用时应注意两点:①堆栈操作总是按字进行②不能从栈顶弹出一个字给CS存储区(SS段)低地址

栈顶(SP)栈底堆栈示意图:进栈方向堆栈最后一个字8 格式为:XCHGREG,MEM/REG

要求两操作数中必须有一个在寄存器中,不允许使用段寄存器。

举例:XCHG AX,BXXCHG [2000],CL(3).交换指令XCHG92.累加器专用传送指令所谓专用只限于用累加器AL或AX来传送信息。完成的操作:CPU

I/O端口(1).输入指令IN格式:INac,PORT;PORT端口号0~255HINac,DX;DX表示的端口范围达64K例:INAL,80H;(AL)←(80H)

INAX,DX;(AX)←((DX)+1,(DX))10例:OUT68H,AX;(68+1,68H)←(AX)OUTDX,AL;((DX))←(AL)

在使用间接的IN/OUT指令时,在指令执行前,应用传送指令对DX寄存器设置好端口号,

如:

MOV DX,220H IN AL,DX ;将220H端口内容读入AL累加器

(2).输出指令OUT

格式:OUTPORT,ac

OUTDX,ac

11(3).换码指令XLAT

执行的操作:(AL)←[(BX)+(AL)]

又叫查表转换指令,它可根据表中代码的序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,代码序号存于AL中。

例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如图2-10所示,如欲查出表中第11个代码(代码序号从0开始)即B的ASCII码,(表中地址设(DS)=4000H)‘’12303132...394142...4546...42000H+042000H+11‘0’‘1’‘2’‘9’‘A’‘B’‘E’‘F’图2-10十六进制数ASCII码表存储器13

MOVBX,2000H;(BX)←表首地址

MOVAL,0BH;(AL)←序号

XALT;查表转换执行后得到:(AL)=42H

3。地址传送指令共有三条,我们只介绍LEA指令:格式:LEAREG,MEM;将指定存储器的16位偏址送指定寄存器.指令要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。则可用如下几条指令实现:14设:(SI)=1000H

则执行该指令后,(BX)=1010H

注意以下两条指令差别:

LEABX,BUFFER和MOVBX,BUFFER

前者表示将符号地址为BUFFER的存储单元的偏侈地址取到BX中,后者表示将BUFFER存储单元中的内容取到BX中.例:LEA BX,[SI+10H]15下面两条指令等效:

LEABX,BUFFER和

MOVBX,OFFSETBUFFER

其中OFFSETBUFFER表示存储器BUFFER的偏移地址。

4。标志传送指令共有四条:(1)读标志指令LAHF

本指令把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图2-11所示16OFDFIFTFSFZFAFPFCFAH图2-11LAHF指令的功能(2)设置标志指令SAHFSAHF的功能与LAHF的功能正好相反,用图来示意,只要将图2-11中5个箭头方向反一下即可。FLAG17OFDFIFTFSFZFAFPFCFAH图2-11SAHF指令的功能(2)设置标志指令SAHFSAHF的功能与LAHF的功能正好相反,用图来示意,只要将图2-11中5个箭头方向反一下即可。FLAG18执行的操作:(SP)-1←标志寄存器高8位(SP)-2←标志寄存器低8位(SP)←(SP)-2(4)从栈顶弹出标志寄存器指令POPF

执行的操作:标志寄存器低8位←(SP)

标志寄存器高8位←(SP)+1

(SP)←(SP)+2PUSHF和POPF指令用于保护和恢复标志寄存器内容(3)把标志寄存器推入栈顶指令PUSHF

19

例如:

PUSH AXPUSH CXPUSHF

.

这段程序要用到AX,CX以及标志位,. 执行时可能改变

POPF ;恢复时,后入栈先弹出

POP CXPOP AX

关于数据传送指令对标志位的影响,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。.202。2。2算术运算指令算术运算指令涉及两种类型数据,即无符号数和有符号数。对加法指令和减法指令而言,无符号和有符号数可采用同一套指令,其条件有两个:一是参加的操作数必须同为无符号数或同为有符号数。二是要采用不同标志位来检查无符号数和有符号数的运算结果是否溢出。21下面看一下两个8位数相加时的4种情况:①无符号数和有符号数均不溢出二进制相加无符号数加 有符号数加000010008+8+00011110

+30

+(+30)0010011038+38结果38 CF=0 OF=022②无符号数溢出

000010008+8+11111101

+253

+(-3)100000101261+5结果5 CF=1 OF=0③

有符号数溢出

000010008+8+01111101

+125

+(+125)10000101133+133 结果-123 CF=0OF=1(补码表示)23④

无符号数和有符号数均溢出10001000136-120+11110111

+247

+(-9)101111111383-129结果127CF=1OF=1上面四种情况清楚说明,CF标志可用来表示无符号数的溢出,OF标志可用来表示有符号数的溢出。需要指出的是有符号数的溢出是一种出错,在运算过程中应当避免。24

共有5条指令:(1)不带进位的加法指令ADD.

格式有:ADD ac,dataADD mem/reg,dataADD

mem/reg1,mem/reg2例:ADD AL,30HADD AX,[BX+20H] ADD CX,SI ADD [DI],200HADD指令对标志位(指状态标志)都有影响.1.加法指令25(2)带进位位的加法指令ADC

ADC指令在形式上和功能上都有与ADD类似,只是在相加时要把进位标志的现行值CF加到和中,例如:

ADCAL,68H ADCAX,CXADCBX,[DI]26

例:有两个4字节的无符号数相加:2C56F8AC+309E47BE=?

设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,要求和放回BUFFER1存储区,如下页图所示。因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行ADC指令主要用于多字节加法运算中.2756H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被加数加数数据段图2-12多字节加法示意图......28程序段如下:

MOVCX,4;置循环次数

MOVSI,0;置SI初值为零

CLC;清进位标志CFAGAIN:MOV AL,BUFFER2[SI] ADC BUFFER1[SI],AL;带进位加

INC SI;(SI)+1DEC CX;(CX)-1JNZAGAIN

;若(CX)

0,则转AGAININT20H

;返回DOS其中:MOVAL,BUFFER2[SI]和MOVAL,[BUFFER2+SI]等效思考:若最高位有进位,如何改?29格式:INC reg

INC reg/mem

例:INC AL

INC BYTEPTR[BX+4]

本指令除CF外对其余标志均有影响。(4)BCD码的加法十进制调正指令AAA和DAAAAA

本指令对在AL中的由两个未组合的BCD码相加后的结果进行调正,得到一个正确的未组合的BCD码。

(3)加1指令INC(单操作数指令)

30例1:

MOVAL,0800001000ADDAL,09+0000100100010001

结果应为17,而计算机相加为11H,原因在于运算过程中,如遇到低4位往高4位产生进位时(此时AF=1)按逢十六进一的规则,但BCD码要求逢十进一,因此只要产生进位就会丢掉一个6,这就要进行加6调正。31实际上当低4位的结果>9(即A~F之间)时,也应进行加6调正。如上面的结果进行加6得:00010001

+000001100001011132

如AL的低4位>9或AF=1,则:①(AL)←(AL)+6,(AH)←(AH)+1,AF←1②(AL)←((AL)∧0FH)③

CF←AF

否则(AL)←((AL)∧0FH)再来看前例,用如下程序段可得正确结果

MOV AL,08HADD AL,09HAAAAAA指令的调正步骤:33例2:计算2658+3619=?设被加数和加数的每一位都以ASCII码形式存放在内存中,低位在前,高位在后,另留出5个单元存相加的结果。如下页图2-13示3436H32H39H31HSTRING1STRING238H35H36H33H被加数加数数据段‘8’‘5’‘6’‘2’‘9’‘1’‘6’‘3’SUM结果图2-13......35程序段如下:

LEASI,STRING1;取STRING1偏址送SILEADI,STRING2;取STRING1偏址送DI

LEABX,SUM;取SUM偏址送BX MOVCX,4 CLC;清进位标志CFAGAIN:MOVAL,[SI] ADCAL,[DI];带进位加

AAA

;未组合的BCD码调正

MOV[BX],AL

;送和的结果至SUM INCSI;(SI)+1 INCDI

;(DI)+1 INCBX

;(BX)+1 DE

温馨提示

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

评论

0/150

提交评论