微机原理课教材_第1页
微机原理课教材_第2页
微机原理课教材_第3页
微机原理课教材_第4页
微机原理课教材_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

第四章8086/8088指令系统

4.1概述计算机语言的分类机器语言汇编语言高级语言一、指令构成:操作码部分:规定指令执行什么样的操作;操作数部分:是指令的操作对象无操作数、单操作数、双操作数。二、操作数的类型操作数是指指令中操作的对象立即数操作数:指令中要操作的数据在指令中寄存器操作数:指令中要操作的数据放在指定的寄存器中存储器操作数:指令中要操作的数据放在指定的存储单元I/O操作数:

指令中要操作的数据来自或送到I/O端口。4.2指令的格式、构成4.3操作数寻址方式寻址方式是指CPU在执行指令时寻找操作数的方式。1.立即数寻址2.直接寻址3.寄存器寻址4.寄存器间接寻址5.寄存器相对寻址方式6.基址、变址寻址方式7.基址、变址相对寻址8.隐含寻址

一、立即数寻址(ImmediateAddressing)在这种寻址方式中,位于指令操作码后面的操作数部分,不代表操作数所在的地址,而是参加操作的数本身。这种操作数称为立即数,可以是8位、16位。

MOVCL,05H MOVAX,3100H立即寻址方式主要用于给寄存器或存储单元赋初值。二、直接寻址(DirectAddressing)

在操作码后面直接给出操作数的16位偏移地址。这个偏移地址也称为有效地址(EA)。它与指令操作码一起,存在内存的代码段。

MOVAX,[3100H]

直接寻址指令的操作数一般在内存的数据段DS隐含,但允许段超越(可以用其他的寄存器进行替换)。

MOVAX,ES:[3100H]CSDS三、寄存器寻址(RegisterAddressing)指令中指定某些CPU寄存器存在操作数,寄存器可能是数据寄存器(8位或16位),地址指针或变址寄存器,以及段寄存器。

MOVSS,AX

MOVDI,SI

由于指令执行过程中不必通过访问内存而取得操作数,因此执行速度快。四、寄存器间接寻址(RegisterIndirectAddressing)

寄存器间接寻址方式是指令中的操作数存放在存储器中,存储单元的有效地址由寄存器(BX、BP、SI和DI)指出;即有效地址EA等于其中某一寄存器的值,对寄存器指向的存储单元进行数据操作,这些用来存放存储器操作数偏移地址的寄存器称为地址指针。

1.BX、SI、DI进行寄存器间接寻址(BX、SI、DI作为地址指针).隐含的段寄存器为数据段寄存器DS,操作数存放在现行数据段中,将数据段寄存器DS的内容左移四位,再加上BX、SI或DI寄存器的内容便可得到操作数的物理地址,MOVAX,[BX];物理地址=DS×l6+BXMOV[DI],DX;物理地址=DS×l6+DI2.BP进行寄存器间接寻址(BP作为地址指针)

隐含的段寄存器为堆栈段寄存器SS,操作数存放在堆栈段区域中.

MOV[BP],BX;物理地址=SS×l6+BP

MOVAX,[BX]DS=2000H,BX=1000HMOV[BP],BXSS=3000HBX=89AAHBP=1000H

无论用BX、SI、DI或BP作为间接寻址寄存器,都允许段超越,即也可以使用上面所提到的约定情况以外的其他段寄存器。例如:

MOVAX,ES:[BX];物理地址=ES×l6+BXMOVDS:[BP],DX;物理地址=DS×l6+BP五、寄存器相对寻址方式(RegisterRelativeAddressing)

操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量(Displacement)之和,MOVAX,1000H[DI]MOVBX,COUNT[SI]DS=3000H,SI=2000H;位移量COUNT=4000H则:物理地址=16×DS+SI+COUNT=30000H+2000H+4000H=36000H六、基址、变址寻址方式

(BasedIndexedAddressing)操作数的有效地址是一个基址寄存器(BP、BX)和一个变址寄存器(SI、DI)的内容之和,两个寄存器均由指令指定。MOVSI,

[BX+DI];物理地址=DS×l6+BX+DIMOVAX,[BX+SI];物理地址=DS×l6+BX+SIMOVAL,[BP+DI];物理地址=SS×l6+BP+DIMOV[BP+SI],AX;物理地址=SS×l6+BP+SI

但要注意一点,不允许将两个基址寄存器或两个变址寄存器组合在一起寻址。例如以下指令是非法的:

MOVAX,[BX][BP]MOVAX,[SI][DI]MOVAX,[BX+SI];DS=3000H,SI=2000H,BX=3003H物理地址=3000H×10H+EA=30000H+2000H+3003H=35003H七、基址、变址相对寻址(RelativeBasedIndexedAddressing)

操作数的有效地址是一个基址寄存器(BP、BX)和一个变址寄存器(SI、DI)的内容之和,再加上指令中指定的8位或16位位移量。MOVAX,10H[BX][SI]MOVAX,[BX+MASK][SI]MOVAX,[BX+SI+MASK]MOVAX,[BX]MASK[SI]MOVAX,MASK[BX][SI]MOVAX,MASK[BX][BP]MOVAX,MASK[SI][DI]八、隐含寻址 指令中不指明操作数,但有隐含规定的寻址方式。例如指令,它的含义是

DAA;对寄存器AL中的数据进行十进制数调整,结果仍保留在AL中。

MULBL;(AL)×(BL)→AXINCAL;AL+1→AL4.48086/8088指令系统通用传送类指令算术运算类指令逻辑运算类指令串操作类指令控制转移类指令处理器控制类指令一)通用传送指令1

movdest,src存储器除IP寄存器立即数段寄存器注:mov指令不能实现的数据传送:1)不能两个操作数都是存储单元2)不能用CS、IP作目的操作数3)不允许立即数作目的操作数4)不允许段寄存器间直接传送5)不能向段寄存器送立即数6)不能两个操作数一个是8位,一个是16位3XCHGDEST,SRC;交换指令DEST←→SRC

注:1允许字或字节操作

2段寄存器和立即数不能做操作数

3两个操作数必有一个在寄存器中PUSHsrc;入栈指令

sp←sp-2(sp+1,sp)←src

POPdest;

出栈指令

dest←(sp+1,sp)sp←sp+2

注:1)入、出栈操作均是以字为单位

2)src、dest:r16、seg、m164目的地址传送指令(用于传送操作数的地址)1)取有效地址指令LEAreg16,mem

;将内存单元的偏移地址送到寄存器注意LEA与MOV的区别LEABX,BUFFER;将存储器的偏移量传送至BXMOVBX,BUFFER;将BUFFER中的内容送至BXLEABX,BUFFER等价于MOVBX,OFFSETBUFFER

例如:BX=0400H,SI=003CH,BETA=0F62H

执行LEADX,BETA[BX][SI]和MOVDX,BETA[BX][SI]后的结果分别为?2)地址指针装入指令LDSreg16,mem32

;DS:reg←(mem开始的四个内存单元的内容)LESreg16,mem32;ES:reg←(mem开始的四个内存单元的内容)例:已知(DS)=C000H,(BX)=0010H执行LDSSI,[BX]后结果为(SI)=0180H,(DS)=2000H若执行LESSI,[BX]后结果为(SI)=0180H,(ES)=2000H……80H01H00H20H……C0010HC0011HC0012HC0013H5字、字节转换指令

1)CBW;(将一个字节转换成为一个字(16位))将AL的符号位扩展到整个AH中,对标志位无影响例如:(1)MOVAL,4FH;(AL)=01001111BCBW;(AH)=00000000B

(2)MOVAL,0FBH;(AL)=11111011BCBW;(AH)=11111111B2)CWD(将一个字转换成双字)将AX的符号位扩展到整个DX中例如:MOVAX,834EHCWD

结果为

(DX)=0FFFFH,(AX)=834EH6标志寄存器传送指令1)

LAHF

;AH←FLAG的低8位2)

SAHF;FLAG的低8位←

AH3)PUSHF;sp←sp-2(sp+1,sp)←FLAG4)

POPF;FLAG←(sp+1,sp)sp←sp+2二、算术运算类指令一)加法指令1、ADDDEST,SRC;DEST+SRCDEST2、

ADCDEST,SRC;DEST+SRC+CFDEST说明:1)目的操作数可以是寄存器、存储单元;源操作数可以是寄存器、存储单元及立即数;不能同时为存储单元,不能对段寄存器进行加、减、乘、除运算。。2)对标志位CF、OF、PF、SF、ZF、AF有影响。例:编程实现CFA1H+62A0H=?

编程实现两双字相加0002F365H+1105E024H=?3、INCDEST

;DEST+1DEST说明:1)此指令完成对指定的操作数加1,然后返回此操作数;2)它影响的标志位为AF,OF,PF,SF,ZF,而对进位CF没有影响;3)该指令只有一个操作数,可以是寄存器,也可以是存储单元。如果内存单元的内容增1,则程序中必须有说明该存储单元是字或字节的符号或说明语句。例如:INCBYTEPTR[SI]INCWORDPTR[SI]结果不同4、AAA(非压缩性BCD码调整指令,也用于ASCII码运算调整)如果(AL)&(0FH)>9,或(AF)=1

则(AL)←(AL)+6

(AH)←(AH)+1

(AF)←1

(CF)←(AF)(AL)←((AL)&0FH)否则(AL)←((AL)&0FH)例:计算两个十进制数之和,7+8=?MOVAX,0007H;(AL)=07H,(AH)=00HADDAL,08H;(AL)=0FHAAA;(AL)=05H,(AH)=01H,(CF)=(AF)=1例:计算两个ASCII码表示的十进制数之和,7+8=?(37、38)5、DAA(压缩BCD码的调整)如果:((AL)&OFH)>9或(AF)=1

则:(AL)←(AL)+6

(AF)←1如果(AL)>9FH或(CF)=1

则(AL)←(AL)+60H

(CF)←1与AAA指令不同,DAA只对AL中的内容进行调整,任何时候都不会改变AH的内容。另外,DAA指令将影响大多数标志位,如SF、ZF、AF、PF、CF和OF。例68+59=?MOVAL,68H;(AL)=68HMOVBL,59H;(BL)=59HADDAL,BL;(AL)=C1H,(AF)=1DAA;(AL)=27H,(CF)=1二)减法指令1SUBDEST,SRC;DEST-SRCDEST

同ADD2SBBDEST,SRC;带借位减主要用于多字节相减同ADC例:编程实现双字相减3DECDEST;DEST-1DEST

对指定的操作数减1,操作数可以是寄存器,也可以是内存单元;影响AF,OF,PF,SF和ZF但不影响CF;同样对存储单元说明是字或字节的操作。4NEGDEST;(求补)对操作数取补,即用0减操作数,把结果送回操作数,求补指令对大多数标志位如SF、ZF、AF、PF、CF及OF有影响。操作数的类型可以是寄存器或存储器,可以对8位数或16位数求补。利用NEG指令可以得到负数的绝对值。例:MOVAH,81HNEGAHMOVAH,80HNEGAHMOVDX,0F8C1HNEGDX5CMPDEST,SRC;DEST-SRC

比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果;其后往往跟着一条转移指令,根据比较结果产生不同的程序分支。

DEST目标操作数可以是寄存器或存储器,源操作数可以是立即数,寄存器或存储器。不能同时为存储单元.AAS

减法运算时,对非压缩的BCD码进行调整,也用于ASCII码减法运算调整。例:13-4=?MOVAX,0103H;(AH)=01H,(AL)=03HMOVBL,04H;(BL)=04HSUBAL,BL;(AL)=03H-04H=FFHAAS;(AL)=09H,(AH)=0

结果:(AX)=0009H7DAS减法运算时,对压缩的BCD码进行调整。例:83-38=?

MOVAL,83H;(AL)=83H MOVBL,38H;(BL)=38H SUBAL,BL;(AL)=4BH DAS;(AL)=45H三)乘法指令:1、无符号数相乘MULSRC

(AX)←(AL)×(SRC)字节乘法(DX,AX)←(AX)×(SRC)字乘法

1)本指令影响CF、OF,不影响AF、PF、SF、ZF。

2)相乘时一个操作数隐含在AL或AX,另一操作数可以是寄存器操作数或内存操作数,为操作数时必须指明是字节还是字类型。

3) (AL)×字节=字(AX);如果AH≠0,则CF=1,OF=1(AX)×字=双字(DX,AX);如果DX≠0,则CF=1,OF=1举例:07H×2AH=?乘2相当于左移一位,移位指令比乘法指令执行速度快2、带符号数相乘IMUL

SRC;如果乘积的高半部分仅仅是低半部分符号位的扩展,则标志位(CF)=(OF)=0;否则,如果高半部分包含乘积的有效数字,则(CF)=(OF)=1。例:MOVAL,47HMOVBX,304AHCBWIMULBX举例比较MUL和IMUL不同例:MOVAL,0B4HMOVBL,11HMULBLMOVAL,0B4HMOVBL,11HIMULBL3、AAM乘法运算时,AAM指令可对不压缩的BCD码进行调整,乘法的ASCⅡ调整指令。例:7*9=63MOVAL,07H;(AL)=07HMOVBL,09H;(BL)=09HMULBL;(AX)=07H*09H=003FHAAM;(AH)=06H,(AL)=03H执行结果(AX)=0603H四)除法指令:1、无符号数除法指令DIV

SRC;在DIV指令中,一个操作数(被除数)隐含在累加器AX(字节除法)或DX,AX(字除法)中,另一个操作数SRC(除数),必须是寄存器或存储器操作数。为操作数时必须指明是字节还是字类型。1)若除数为零,或商的值超出范围>FFH(>FFFFH)则内部产生一个类型0中断。2) AX/字节AL,余数AHDX,AX/字AX,余数DX除2相当于右移一位,移位指令比除法指令执行速度快2、带符号数除法IDIVSRC

;余数的符号总是与被除数的符号相同。

举例说明DIV与IDIV不同。例:MOVAX,0501HMOVBL,0C6HDIVBLMOVAX,0501HMOVBL,0C6HIDIVBLMOVAX,5CA3HMOVBX,0106HDIVBXMOVDX,0000HMOVAX,5CA3HMOVBX,0106HDIVBX编程实现5CA3H÷106H=?MOVAX,5CA3HCWDMOVBX,0106HDIVBX四、逻辑运算和移位指令一)逻辑运算指令1NOTDEST;(对操作数求反,然后回送操作数)操作数可以是寄存器,也可以是存储单元,不能为立即数和段寄存器。对标志位没有影响。AND

DEST,

SRC;按位逻辑与,结果回送到目的操作数目的操作数可以是寄存器、存储单元;源操作数可以是寄存器、存储单元及立即数;不能同时为存储单元。

AND指令可以用于屏蔽某些不关心的位,而保留另一些感兴趣的位。为了做到这一点,只需将欲屏蔽的位和“0”进行逻辑“与”,而将要求保留的位和“1”进行逻辑“与”即可。

ANDBYTEPTR[SI][BX],0FHANDWORDPTR[SI][BX],0FH3TEST

DEST,

SRC;本指令完成AND同样的操作.但并不回送结果,类似CMP例:TESTBYTEPTR[SI],80H4OR

DEST,

SRC;按位或,结果回送到目的操作数5XORDEST,

SRC;对指令的操作数进行“异或”运算例:MOVAL,3CHXORAL,0FFH*************************************************例:XORBL,BLSUBBL,BLMOVBL,00H*************************************************二)移位指令SAL

(ShiftArithmeticLeft)算数左移指令除了AF,其他标志位都会影响。例:MOVAL,A3HSALAL,1MOVCL,2SALAL,CLSALDEST,1CL0CFSHL

(ShiftLoicLeft)逻辑左移指令SHLDEST,1CL0CFSHRDEST,1CLCF0SARDEST,1CLCFSAR

(ShiftArithmeticRight)算数右移指令SHR

(ShiftLogicRight)逻辑右移MOVAL,96HMOVCL,02HSARAL,CLMOVAL,96HMOVCL,02HSHRAL,CL不同逻辑移位可用于无符号数的乘除法算术移位可用于带符号数的乘除法左移一次相当于乘2,右移一次相当于除2左移n次相当于乘2n,右移n次相当于除2n例:编程实现AL中的带符号数乘10三)循环移位指令ROL

(RotateLeft)左循环移位指令ROR

(RotateRight)右循环移位指令RCL

(RotatethroughCFLeft)带进位的左循环移位指令RCR(RotatethroughCFRight)带进位的右循环移位指令指令格式执行操作CFCFCFCFROLDEST,1CLRORDEST,1CLRCLDEST,1CLRCRDEST,1CL当移位次数为1时,如果移位后的最高位的值被改变,则OF=1四、串操作类指令所有的串操作指令隐含规定:

1、用SI寻址源操作数且在数据段中(DS为段地址),允许段超越;

2、用DI寻址目的操作数且在附加段区域中(ES为段地址),不允许段超越;

3、这两个地址指针在每一个串操作以后会自动修改.按增量还是按减量,取决于标志位DF(方向);若DF=0增量(字节操作加1,字操作则加2),CLD;若DF=1则每次操作后SI和DI减量,STD;

4、重复时在指令前加前缀REP.重复次数在CX中,CX中的值自动修改,直到CX为0。加前缀REP时,自动执行的操作:(1)CX=0?(2)执行串操作指令,修改地址指针(3)CX-1CX(4)重复(1)-(3)5、有些串操作指令还可加重复前缀,REPE/REPZ,REPNE/REPNZREPE/REPZ解释为:当串相等(ZF=1)且串未结束(CX≠0)时继续执行串指令;REPNE/REPNZ解释为:当串不相等(ZF=0)且串未结束(CX≠0)时继续执行串指令;6、串操作汇编指令的格式,可以写上操作数,也可以不写,在指令助记符后再加上字母B(字节操作)或W(字操作),加上B/W助记符后面不允许写操作数。

1、串传送指令:MOVS目的串,源串

MOVSB(字节)

MOVSW(字)

把串SI作为指针的源串中的一个字节或字,传送至由DI作为指针的目的串,且相应地址改为指针.以指向串中的下一个元素。执行操作:

(1)传送(ES:DI)←(DS:SI)(2)修改指针字节操作:(SI)←(SI)±1,(DI)←(DI)±1

字操作:(SI)←(SI)±2,(DI)←(DI)±2DF=0(CLD)时增量,DF=1(STD)时减量REPMOVS:将数据段中的整串数据传送到附加段中。源串(数据段)→目的串(附加段)REPMOVSBYTEPTR[DI],[SI]REPMOVSWORDPTR[DI],[SI]REP

MOVSBREP

MOVSW

以下均为写法错误的指令

REPMOVS[DI],[SI]REPMOVSBYTEPTRDS:[DI],[SI]REPMOVSWORDPTR[SI],[DI]REPMOVSB[DI],[SI];例.把100个字节从AREAl传到AREA2LEASI,AREA1LEADI,AREA2MOVCX,100;100=64H CLDAGAIN:MOVSBYTEPTR[DI],[SI]DECCX JNZAGAIN例:编程实现将数据段中100个字的数据块BLOCK1搬到同一数据段的BLOCK2中去=REPMOVSB2、串比较指令:CMPS源串,目的串

CMPSB(字节)

CMPSW(字)执行操作:

(1)比较:(DS:SI)-(ES:DI)

根据比较结果设置条件标志位:相等ZF=1,不等ZF=0(2)修改指针:字节操作:(SI)←(SI)±1,(DI)←(DI)±1

字操作:(SI)←(SI)±2,(DI)←(DI)±2注意(1)源串在前,目的串在后(唯一例外的指令格式)(2)源串与目的串相减结果不回送。REPCMPSWORDPTR[DI],[SI]REPCMPSWORDPTR[SI],[DI]例1.28比较两个字符串,找出其中第一个不相等的字符的地址,并将这个数送AL中。如果两个字符全部相等,则转到ALLMATCH进行处理,这两个字符串长度均为20个字节,首地址分别为ST1和ST2

LEASI,ST1;(SI)←字符串1的首地址

LEADI,ST2;(DI)←字符串2的首地址

MOVCX,20;(CX)←长度

CLD;清方向标志DF REPECMPSB;如相等重复进行比较

JCXZALLMATCH;若(CX)=0跳至ALLMATCHDECSI;(SI)-1DECDI;(DI)-1 MOVAL,[SI]HLT;停止ALLMATCH:……HLT;停止3、串扫描(搜索)指令:SCAS目的串

SCASB(字节)

SCASW(字)扫描指令,关键字放在AL或AX中,操作时从AL或AX的内容减去由DI作为指针的串元素,结果反映在标志位上,但并不改变目的串元素以及累加器的值。例:在以BLOCK开始的字符串中,搜索一字符AMOVDI,OFFSETBLOCKMOVCX,COUNTMOVAL,’A’CLDREPNESCASBJZFOUNDJMPDONEFOUND:MOVBX,OFFSETBLOCKSUBDI,BXMOVBX,DI;串中第几个字符

DONE:HLT4、串装入指令LODS源串

LODSB(字节)/LODSW(字)

本指令把由SI作为指令的串元素,传送至AL或AX,同时修改指令SI,使指向串的下一个元素,该指令正常是不重复执行的,因为每重复一次,累加器中的内容就要改写,只保留了最后一个元素。执行操作:字节操作:(AL)←(DS:SI),(SI)←(SI)±1

字操作:(AX)←(DS:SI),(SI)←(SI)±2注意:源串必须在数据段中,允许使用段跨越前缀来修改例:编一段程序,要求将0700H单元开始的5个字节的内容逐一装入AL中进行处理,处理完后,再送入0700H为首地址的内存中。5、串存贮指令:STOS目的串

STOSB(字节)/STOSW(字)执行操作:字节操作:(ES:DI)←(AL),(DI)←(DI)±1

字操作:(ES:DI)←(AX),(DI)←(DI)±2▲将累加器内容存入指定的附加段▲利用重复操作,可以在串中建立相同的值。例:编程实现要对某一数据缓冲区进行清零,设(ES)=3000H,数据缓冲区首地址为0200H,缓冲区长度为100个字节。五、控制转移类指令一)JMP:无条件转移指令习惯:JMP标号(1)段内直接JMP:用指令中的偏移量加到目前指令指针lP上来改变lP

实现跳转,当偏移量在+127~-128字节内就自动产生一个SHORTJMP指令,否则产生NEARJMP,在+32767~-32768范围内寻址。例:JMPSHORTPTROBJECT JMPNEARPTRTAGET(缺省)(2)段内间接JMP:目标地址由一个16位通用寄存器或内存单元来寻址。例:JMPBX或JMP[BX](3)段间直接JMP:指令中给出转向地址的段地址和段内偏移量。例:JMPFARPTRLABLE(4)段间间接JMP:指令指定双字指针.用第一个字单元的内容代替lP,第二个字单元的内容代替CS。例:JMPDWORDPTR[BX][SI]

二)条件转移这类指令转移的目的地址是采用相对寻址方式即以转移指令为基准的+127或-128字节的范围之内,对标志位无影响1直接标志转移指令指令助记符测试条件指令功能JCCF=1有进位转移JNCCF=0无进位转移JZ/JEZF=1结果为零/相等转移JNZ/JNEZF=0不为零/相等转移JSSF=1符号为负转移JNSSF=0符号为正转移JOOF=1溢出转移JNOOF=0无溢出转移JP/JPEPF=1奇偶位为1转移JNP/JPOPF=0奇偶位为0转移类别指令助记符测试条件指令功能无符号数比较测试JA/JNBECF+ZF=0高于/不低于等于转移JAE/JNBCF=0高于等于/不低于转移JB/JNAECF=1低于/不高于等于转移JBE/JNACFZF=1低于等于/不高于转移带符号数比较测试JG/JNLE(SFOF)+ZF=0大于/不小于等于转移JGE/JNLSFOF=0大于等于/不小于转移JL/JNGESFOF=1小于/不大于等于转移JLE/JNG(SFOF)+ZF=1小于等于/不大于转移例:将AX和BX中较大的无符号数(带符号数),存于AX中。例:从BLOCK开始的100个带符号16位数中,找出最大数放到MAX中。三)循环控制指令

格式LOOPXX符号地址执行①(CX)←(CX)-1此操作不影响标志②检查转移条件,满足,转向目标地址去执行;

不满足,执行LOOPXX后一条指令转移方式只允许段内直接短方式,跳转范围-128~127四)调用和返回指令主程序子程序调用返回返回指令返回

、、、、、、

、、、

、、、调用指令

、、、

、、、

、、、、、、调用主程序子程序

、、、CALL-RET指令对CALL:调用子程序,调用结束后要返回CALL指令的下一条指令,所以必须保存断点;RET:是子程序或过程的最后一条指令用以返回到调用这个子程序的断点处说明:1)CALL-RET要保护现场;2)对于段内调用(NEAR属性)call,使IP入栈,目标过程的地址偏移量传到IP上;(缺省),RET返回时,IP出栈。对于段间调用(FAR属性)call,首先CS入栈,CS再由指令串的段值代替,然后IP入栈,IP由子程序中第一条指令的偏移地址代替。RET返回时,IP、CS出栈。

CALLFARPTR过程名中断(Interrupt)

温馨提示

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

评论

0/150

提交评论