第二节传送指令_第1页
第二节传送指令_第2页
第二节传送指令_第3页
第二节传送指令_第4页
第二节传送指令_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第二节8086/8088的指令系统8086/8088的指令系统中共有92种基本指令。可以分成6个功能组:1. 数据传送(Datatransfer)2. 算术运算(Arithmetic)3. 逻辑运算和移位指令(Logic&Shift)4. 串操作(Stringmanipulation)5. 控制转移(ControlTransfer)6. 处理器控制(ProcessorControl)介绍指令系统使用的符号:八位寄存器:AH,AL,BH,BH,BL,CH,CL,DH,DL十六位通用寄存器:AX,BX,CX,DX,SP,BP,SI,DI堆栈指针 SP指令指针 IP标志位 Flags目的和源变址寄存器 DI,SI段寄存器 CS,DS,ES,SS通用寄存器 rAL或AX(取决于操作数长度)accsrc,dest 源,目的操作数(下列寻址方式都可以用) [BX+SI+n],[BX+DI+n],[BP+SI+n],[BP+DI+n] [SI+n], [DI+n],[BP+n],[BX+n] [N], r

[] 存储器单元的内容(正常在数据段)ES:[] 附加数据段的内容OPRD 操作数

Seg段寄存器(CS,DS,ES,SS)im

立即数(n8位, nn16位,nnnn32位)8086/8088指令助记符表8086/8088指令助记符表(续)一、数据传送指令(Datatransfer)(一)通用传送指令(GeneralPurposeTransfer)(二)输入输出指令(InputandOutput)(三)目的地址传送指令(Address-objecttransfer)(四)标志传送指令(Flagregistertransfer)一. 数据传送指令功能:负责CPU和存储器 CPU和I/O端口 CPU的内部寄存器之间的数据传送。特点:它是计算机最基本、最重要的一种操作,使用比例最高。

通用传送指令包括:MOV,PUSH,POP,XCHG

累加器专用传送指令:

IN,OUT;XLAT

地址传送指令包括:LEA,LDS,LES

标志传送指令包括:LAHF,SAHF,PUSHF,POPF

除SAHF和POPF指令外,对标志位没有影响。(一)通用传送指令(GeneralPurposeTransfer)8088提供方便灵活的通用的传送操作,适用于大多数操作数。通用传送指令(除了XCHG以外)是唯一允许以段寄存器为操作数指令。通用传送指令包括: 1、MOV(Movement) 2、PUSH(Pushwordontostack) POP(Popwordoffstack) 3、XCHG(Exchange)

1. MOV dest, src;(dest)(src) 目的 源 目的源功能:

把一个字节(B)或一个字(W)操作数由源传送至目的。实现: 寄存器寄存器/存储器之间; 立即数寄存器/存储器 寄存器/存储器段寄存器之间的数据传送。

具体说,通用数据传送指令能实现:①CPU内部寄存器之间的数据的任意传送

(除了代码段寄存器CS和指令指针IP以外)。

例: MOVDL,CH ;8位寄存器8位寄存器 MOVAX,DX ;16位寄存器16位寄存器 MOVSI,BP MOVDS,BX ;通用寄存器段寄存器

MOVAX,CS ;段寄存器通用寄存器立即数传送至CPU内部通用寄存器组(AX、BX、CX、DX、BP、SP、SI、DI)。

用于给寄存器赋初值。

不能直接给段寄存器赋值例:

MOVCL,04H ;立即数8位寄存器

MOVAX,03FFH ;立即数16位寄存器思考:为什么加WORDPTR,BYTEPTR?

MOVWORDPTR[SI],057BH;立即数存储器

MOVBYTEPTRMEM,5;立即数存储器CPU内部寄存器(除CS和IP外) 与存储器(所有寻址方式)之间数据传送。

存储单元之间不能直接传送

例:

MOVMEM,AX ;累加器存储器,直接寻址

MOVMEM,DS ;段寄存器存储器,直接寻址

MOVDISP[BX],CX ;寄存器存储器,变址寻址

MOVAX,DISP[SI]

;存储器累加器,变址寻址

MOVDS,MEM

;存储器段寄存器,直接寻址

MOVCX,DISP[BX][SI]

;存储器累加器,相对基址加变址

注意:(1)不能用一条MOV指令实现以下传送。

存储单元之间的传送

MOVMEM2,MEM1错。

MOVAX,MEM1 MOVMEM2,AX对。

立即数送段寄存器

例:MOVDS,2000H错。MOVAX,2000 HMOVDS,AX对。

段寄存器之间的传送

MOVES,DS;错

MOVAX,DS MOVES,AX;对。注意CS和IP的使用

CS和IP不能作为目标操作数,CS可以作为源操作数。例: MOVCS,AX;错

MOVAX,CS;对。

MOVIP,AX;错

MOVAX,IP;对。(2)段地址的默认 BX、SI、DI间址默认段地址为DS, BP间址默认段地址SS。(3) 凡是遇到给SS赋值指令,系统自动禁止外部中断,执行本条指令和下条指令,恢复对SS寄存器赋值前的中断开放情况。 这样做为了允许程序员连续用两条指令分别对SS和SP寄存器赋值,同时又防止堆栈空间变动过程出现中断。

*在修改SS和SP的指令之间不要插入其他指令。(4) 所有通用传送指令不影响标志位 (除SAHF、POPF以外)。

MOV指令应用例:实现将AREA1开始的100个数据传送到AREA2开始的单元。……AREA1:AREA2:100个数据分析题意:

①可以用200条MOV指令来完成100个数据传送,指令操作重复,每个数据传送后的地址是变化的。②可以利用循环, 但每循环一次要修改地址(源地址和目的地址),必须把地址放在寄存器当中,用寄存器间接寻址来寻找操作数.得到如下程序:

MOVSI,OFFSETAREA1 MOVDI,OFFSETAREA2 MOVCX,100AGAIN: MOVAL,[SI] MOV[DI],AL

INCSI ;修改地址指针 INCDI ;修改地址指针 DECCX ;修改个数 JNZAGAIN

…2.PUSH(Pushwordontostack)POP(Popwordoffstack)这是两条堆栈操作指令。什么是堆栈?按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。堆栈操作是如何进行的?为什么要设置堆栈?为什么要按“后进先出”方式工作?规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。SPSS堆栈段进栈方向退栈方向栈底栈顶

①压栈指令PUSHsrc ;src为16位操作数例:PUSH AX ;将AX内容压栈执行操作:SP-1←高字节AHSP-2←低字节ALSP←SP-2设AX=1020H,执行示意图如图低地址存储区(SS段)执行前AX=1020HSP=2006H(SP)存储区(SS段)进栈方向执行后SP=2004H2010(AL)(AH)PUSHAX指令执行示意图SP-2SP高地址低地址高地址SP-1压栈指令的格式为:PUSH regPUSH mem/regPUSH segreg例如:PUSHAXPUSH[BX]PUSHDS注意进栈方向是高地址向低地址发展。

②弹出指令POP dest例:POP BX ;将栈顶内容弹至BX执行操作:BL←(SP)

BH←(SP)+1

SP←SP+2POPBX的执行示意图如下图所示低地址存储区(SS段)出栈方向执行前SP=2006H2010POPBX指令执行示意图(SP)存储区(SS段)执行后(BX)=1020SP=2008H(SP)(SP)+1(SP)+2BX2010高地址低地址高地址堆栈用途:

暂时保存CPU内部某些寄存器的数据。

调用子程序,响应中断时都要用到堆栈。调用子程序(或过程)或发生中断时要保护断点的地址,子程序或中断返回时恢复断点。主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP’执行子程序2转子程序2返回子程序1IP’(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a)主程序调子程序;(b)子程序嵌套示意图压栈弹出IP(下)调用子程序(或过程)或发生中断时要保护断点的地址,子程序或中断返回时恢复断点。子程序嵌套断点地址压入和弹出情况

保存CPU内部的寄存器或存储器中的数据,

使用数据时将其弹出:

PUSHAX ;将(AX)入栈(AX)(AX)使用数据时将其弹出: POPBX堆栈指令使用时应注意几点:①堆栈操作总是按字进行②不能从栈顶弹出一个字给CS③堆栈指针为SS:SP,SP永远指向栈顶④SP自动进行增减量(-2,+2),SP始终指向一个实单元

PUSH,POP指令应该成对使用,保持堆栈原有状态。堆栈应用举例:

例:压入堆栈的内容与弹出内容顺序相反…PUSH AXPUSHBXPUSHCX…POPCXPOPBXPOPAX 3、交换指令(Exchange)格式:XCHGdest,src ;(dest)(src)执行操作:

把一个字节或一个字的源操作数与目的操作数相交换。可以实现:寄存器之间 寄存器和存储器之间应用举例:

XCHGBL,DL XCHGAX,SI XCHGCOUNT[DI],AX

注意:

存储器之间不能交换,两个操作数中必须有一个在寄存器中;段寄存器不能作为一个操作数;

XCHG[BX],[DI] (错)

XCHGDS,AX(错)(二)累加器专用传送指令必须通过累加器AX(字)或AL(字节)包括:I/O指令;XLAT(1)输入输出指令:

1、IN(Inputbyteorword)

2、OUT(Outputbyteorword)

输入指令用于CPU从外设端口接受数据,

输出指令用于CPU向外设端口发送数据。

输入、输出指令不影响标志位。每个外设要占几个端口:数据口,状态口和控制口。信息交换要通过端口在IBMPC机里,可以配接许多外部设备,每个外设与CPU之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。端口数:外部设备最多有65536个I/O端口。 A0~A15译码形成。端口号:端口号(即外设端口地址)为0000H~FFFFH。PC机仅使用A0~A9译码形成I/O口地址,即1024H个口地址 端口号:0000H~03FFH只限于用累加器AL或AX来传送信息。功能:(累加器)←→I/O端口格式:直接输入/输出和间接输入/输出指令(1)直接输入/输出:指令中直接给出端口号例:INAL,80H;(AL)←(80H端口)OUT68H,AX;(69H,68H)←(AX)可访问的端口范围00H~FFH 0-255

例:

MOVDX,220HINAL,DX;将220H端口内容读入AL在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器可访问的端口范围0000-FFFFH (0-65535)(2)间接输入/输出指令

端口号在DX寄存器中例1:实现(29H)(28H)→(DATA_WORD) INAX,28H MOVDATA_WORD,AX例2:从端口3FCH送一个字到AX寄存器 MOVDX,3FCH INAX,DX;(AL)←(3FCH), (AH)←(3FDH)

(2)XLAT(Translate)换码指令:该指令不影响标志位。XLAT指令使用方法:先建立一个表格;

表格首偏移地址存入BX;

需要转换代码的序号(相对与表格首地址位移量)存入AL;(表中第一个元素的序号为0)

执行XLAT指令后,表中指定序号的元素存于AL中。

(AL)为转换的代码。XLAT指令应用:不规则代码的转换例:从字符到ASCII码的转换

先在内存的数据段中存放十六进制数字的ASCII码表。

首地址为:Hex_table执行指令序列:MOVBX,OFFSETHex_tableMOVAL,0AHXLAT假设: (DS)=F000H, Hex_table=0040H (AL)=0AH执行XLAT以后:(AL)=41H 即“A”的ASCII码。30H31H32H...39H41H42H...46H...Hex_tableHex_table+1Hex_table+2Hex_table+0AHHex_table+0BHHex_table+0FH'F''B''A''9''1''2''0'16进制数的ASCII码表(三)地址传送指令(Address-objecttransfer)8086/8088提供三条:

地址指针写入指定寄存器或寄存器对指令。 1、LEA(LoadEffectiveAddress) 2、LDS(LoadpointerusingDS) 3、LES(LoadpointerusingES)1、LEA(LoadEffectiveAddress)格式:LEAreg16,mem16;EA(reg16)源操作数必须是一个存储器单元把指令中指定的存储器单元有效地址EA装入指定的寄存器。例:设(BX)=0400H,(SI)=003CH LEABX,[BX+SI+0F62H]执行指令后:EA=(BX)+(SI)+0F62H=0400H+003CH+0F62H=139EH(BX)=139EH注意:设 (DS)=3000H BUFFER=1000H (31000H)=0040H(1)LEA指令与MOV的区别 LEABX,BUFFER;(BX)=1000H MOVBX,BUFFER;(BX)=0040HLEA指令与MOV等价 LEABX,BUFFER ;(BX)=1000H MOVBX,OFFSETBUFFER;(BX)=1000H2、LDS(LoadpointerusingDS)格式:LDSreg16,mem32 ;(reg16)←(EA) (DS)←((EA)+2))功能:将指令指定32位地址指针送指令指定寄存器和DS。将指令指定mem32单元的前两个单元内容(16位偏移量)装入指定通用寄存器,把后两个单元内容(段地址)装入到DS段寄存器。用于写远地址指针。例:假设:(DS)=C000H指令: LDSSI,[0010H]执行指令后:(SI)=0180H(DS)=2000H

3、LES(LoadpointerusingES)格式:LESreg16,mem32 ;(reg16)←(EA) (ES)←((EA)+2))功能:把源操作数指定的4个相继字节送指令指定的寄存器 及ES寄存器中。此指令常常指定DI寄存器。将指令指定mem32单元的前两个单元内容(16位偏移量)装入指定通用寄存器,把后两个单元内容(段地址)装入到ES段寄存器。用于写远地址指针。例:假设:(DS)=B000H (BX)

温馨提示

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

评论

0/150

提交评论