收藏 分享(赏)

第4章 80X86指令系统.ppt

上传人:hyngb9260 文档编号:7248881 上传时间:2019-05-10 格式:PPT 页数:48 大小:424KB
下载 相关 举报
第4章 80X86指令系统.ppt_第1页
第1页 / 共48页
第4章 80X86指令系统.ppt_第2页
第2页 / 共48页
第4章 80X86指令系统.ppt_第3页
第3页 / 共48页
第4章 80X86指令系统.ppt_第4页
第4页 / 共48页
第4章 80X86指令系统.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、4.1 寻址方式,寻址方式是指CPU在执行指令时寻找操作数的方式。8086指令中涉及的操作数(源)主要有四种:立即操作数、寄存器操作数、存储器操作数和I/O端口操作数。1 立即寻址 5 寄存器相对寻址2 寄存器寻址 6 基址加变址寻址3 直接地址 7 相对的基址加变址寻址4 间接地址 8 I/O端口寻址,一条指令由两部分组成: 操作码部分:规定指令执行什么样的操作; 操作数部分:是指令的操作对象,无操作数、单操作数、双操作数。,第4章 8086/8088指令系统,1 立即寻址(Immediate Addressing)操作数直接放在指令中,作为指令的一部分存放在代码段里,可以是8位、16位,也

2、叫立即数,用于给寄存器赋初值。如:MOV AX,1234H 2 寄存器寻址(Register Addressing)操作数包含在CPU的内部寄存器中,由指令指定寄存器的名称。如:MOV DS,AX 注意:源操作数的长度必须与目的操作数的一致。 3 直接寻址(Direst Addressing) 操作数所在存储单元地址的16位偏移量(有效地址EA)直接包含在指令中,操作数默认存放在数据段中,允许段超越。如: MOV AX,2000H ;DS162000HMOV BX,ES:2000H ;ES162000H,4 寄存器间接寻址(Register Indirect Addressing) 指令里给出

3、的寄存器中的值不是操作数本身,而是操作数的有效地址EA。SI、DI、BX(默认操作数在数据段中): MOV AX,BX BP (默认操作数在堆栈段中): MOV AX,BP5 寄存器相对寻址(Register Relative Addressing)操作数的有效地址是一个基址或变址寄存器的内容与指令中指定的8位或16位位移量之和。如MOV BX,COUNTBX; DS=3000H,BX=2000H,COUNT=3000H 3000H 16 +2000H+30000H= 35000H 6 基址变址寻址方式(Based Indexed Addressing)操作数的有效地址是一个基址寄存器(BP、

4、BX)和一个变 址寄存器(SI、DI)的内容之和,两个寄存器均由指令指定。如 MOV AX,BXSI,7 相对基址变址寻址方式(Relative Based Indexed Addressing)操作数的有效地址是一个基址寄存器(BP、BX)和一个 变址寄存器(SI、DI)的内容之和,再加上指令中指定的8位 或16位位移量. 如 MOV AX,200HBXSI 注:以上四种寻址方式都允许段超越。 8 I/O端口寻址 通过直接和间接的方式来进行操作数的寻址。直接寻址:能够寻址的端口号在0255的范围内,即能 够寻址256个端口。例如: IN AL,60H ;60H端口中的内容送至AL间接寻址:必

5、须通过DX间接寻址,这种方式能够寻址的 端口号范围为065535,共计64K个端口。例如: MOV DX,0360H;0360H端口中的内容送至ALIN AL,DX,注:有关方括号的地址表达,必须遵循下列规则:,1)立即数可以出现在方括号内,表示直接地址。 例如: 2000H 2)只有BX、BP、SI和DI可以出现在方括号以内,它们可 以单独出现,可以组合或以寄存器和常数相加的形式出 现,但BX和BP、SI和DI不允许出现在同一个方括号内。 3)方括号有相加的含义,下面的几种写法都是等价的。6BX+SI BX+6 SI BX+SI+6 4)若方括号内含有BP,则隐含使用SS提供段地址。常见形式

6、:DISPBP+SIDISPBP+DI 20PA=SS 16+EADISPBP,4.2 8086指令系统,数据传送类指令 算术运算类指令 逻辑运算类指令 串操作类指令 控制转移类指令 处理器控制类指令,4.2.1 数据传送类指令(不影响标志),一、通用数据传送指令 1 MOV DST,SRC,注:MOV指令不能实现的数据传送: 1)不能两个操作数都是存储单元 2)不能用CS、IP作目的操作数 3)不允许立即数作目的操作数 4)不允许段寄存器间直接传送 5)不能向段寄存器送立即数 6)不能两个操作数一个是8位,一个是16位,2 PUSH SRC; 入栈指令 spsp-2 (sp+1,sp)src

7、POP DST; 出栈指令 dest(sp+1,sp) spsp+2 注:1)入、出栈操作均是以字为单位2)SRC、DST:R16、SEG、M163) DST 不允许是CS、IP寄存器,3 XCHG DST,SRC 交换指令 DST SRC 注: 1 允许字或字节操作2 段寄存器和立即数不能做操作数3 两个操作数必有一个在寄存器中 4 XLAT;换码指令 (BX+AL) AL (完成一字节的查表转换) 注:必须事先把表的起始地址送BX,AL内容为表中的编号.,二、输入输出指令IN AL,n IN AL,DX ;从8位端口读取一个字节IN AX,n IN AX,DX ;从16位端口读取一个字OU

8、T n,AL OUT DX,AL ;向8位端口写一个字节OUT n,AX OUT DX,AX ;向16位端口写一个字 说明:当端口地址号为00HFFH,采用第一种格式,共寻址256个端口;任一端口地址都可采用第二种格式。,三、地址传送指令 用途:用于传送操作数的地址(段地址或偏移地址) 1 取有效地址指令 LEA REG16,MEM ; 将指定内存单元的偏移地址送到指定寄存器 2 地址指针装入指令 LDS REG16, MEM32 ; DS:REG(MEM开始的四个内存单元的内容) LES REG16, MEM32 ; ES:REG(MEM开始的四个内存单元的内容) 注:1) 源操作数必须是一

9、个存储器操作数;2) 目的操作数必须是一个16位的通用寄存器。,四、标志寄存器传送指令 1 LAHF ; AH FLAGS的低8位 2 SAHF; FLAGS的低8位 AH 3 PUSHF; spsp-2 (sp+1,sp)FLAGS 4 POPF ; FLAGS (sp+1,sp) spsp+2,4.2.2 算术运算类指令,一、加法指令 1 ADD DST,SRC ; SRC+DST DST 2 ADC DST,SRC ; SRC+ DST+CF DST 说明: 1) 目的操作数可以是寄存器、存储单元;源操作数可以是寄存器、存储单元及立即数;不能同时为存储单元。 2)对标志位CF、OF、PF

10、、SF、ZF、AF 有影响 。 3 INC DST ; DST+1 DST (increment) 说明: 1)此指令完成对指定的操作数加1,然后返回此操作数; 2)它影响的标志位为AF,OF,PF,SF,ZF,而对进位CF没有影响; 3)该指令只有一个操作数,如果内存单元的内容增1,则程序中必须有说明该存储单元是字或字节的符号或说明语句。,例:计算56AB7809H+23905DF2H=?,分析:加法要分两次进行,先进行低两个字节相加,然后再做高两个字 节的相加,此时必须考虑前两个字节相加后的进位。假设被加数和加数 分别存放在以DADA1和DATA2为首地址的存储区,和存放在以DATA3为首

11、地 址的存储区。MOV AX, DATA1 ;低16位的被加数送累加器AX ADD AX, DATA2 ;低16位的被加数与加数相加 MOV DATA3,AX ;低16位相加的和送存 MOV AX,DATA1+2 ;高16位的被加数送累加器AX ADC AX,DATA2+2 ;高16位的被加数与加数相加 MOV DATA3+2,AX ;高16位相加的和送存,二、减法指令 1 SUB DST,SRC ; DST - SRC DST同ADD 2 SBB DST,SRC ; (Subtract with borrow)带借位减 主要用于多字节相减同ADC 3 DEC DST; DST-1 DST (

12、Decrement)对指定的操作数减1,操作数可以是寄存器,也可以是内存单元;影响AFOFPFSF和ZF但不影响CF;同样对存储单元说明是字或字节的操作。 4 NEG DST ;(Negate)对操作数取补,即用0减操作数,把结果送回操作数,求补指令不同于补码的求法,若DST为正数,求补后可得绝对值相等的负数(补码);若DST为负数(补码),求补可得绝对值相等的正数。 5 CMP DST,SRC ; DST - SRC (Compare)比较指令完成两个操作数相减,使结果反映在标志位上,但并不送回结果;其后往往跟着一条转移指令,根据比较结果产生不同的程序分支。,例:存储器的数据段存放了100个

13、带符号数,其首地址为AREA,要求将各数据取绝对值后再送存原来的存储单元。,分析:由于100个带符号数中既有正数,又有负数,若为正数则不需 要处理;若为负数则需用NEG指令求补,再送存,因此程序中要先判 断正负。程序如下:LEA SI, AREA ;SI源地址MOV CX, 100 ;CX循环次数CHECK: MOV AL, SI ;取一个带符号数送ALOR AL, AL ;AL内容不变,但影响标志位JNS NEXT ;若SF=0,则转向NEXTNEG AL ;否则求补MOV SI,AL ;负数求补后送回NEXT: INC SI ;源地址加1DEC CX ;循环次数减1JNZ CHECK ;循

14、环次数不为0,转向CHECKHLT ;停止,三、乘法指令无符号数相乘 1 MUL SRC ;1)本指令影响CF、OF,不影响AF、PF、SF、ZF2)DST:隐含在AL或AX,SRC:是寄存器操作数或内存操作数3)字节(AL)字节=字(AX);如果AH0,则CF=1,OF=1字(AX)字=双字(DX,AX);如果DX0,则CF=1,OF=1 例:计算21H08H=?MOV AL, 21H ;AL=21HMOV BL, 08H ;BL=08HMUL BL ;AX=0108H,CF=OF=1 带符号数相乘 2 IMUL SRC ;整数乘法(带符号数相乘)与MUL相似,当乘积高半部分仅仅是低 半部分

15、符号位的扩展,则CF=OF=0,否则CF=OF=1表示AH或DX中包 含着乘积的有效数字,而非发生进位或溢出。 例:计算带符号数05H08H=?MOV AL, 05H ;AL=05HMOV BL, 08H ;BL=08HIMUL BL ;AX=0028H,CF=OF=0,四、除法指令 无符号数除法指令 1 DIV SRC ;1)若除数为零,则内部产生一个类型0中断2) AX/字节 商 AL,余数 AHDX,AX/字 商 AX, 余数 DX3)所有的标志位无意义 例:计算无符号数0410HB8H=?MOV AX, 0410H ;AX=0410HMOV BL, B8H ;BL=B8HDIV BL

16、;AL=05H,AH=78H 带符号数除法指令 2 IDIV SRC ;与DIV相似 例:计算带符号数0410HB8H=?MOV AX, 0410H ;AX=0410HMOV BL, B8H ;BL=B8HIDIV BL ;AL=F2H,AH=20H,五、十进制调整指令专用于对BCD码运算的结果进行调整包括: AAA 、DAA、AAS、DAS、AAM、AAD均为隐含寻址,隐含的操作数为AL和AH为何要对BCD码的运算结果进行调整?BCD码本质上是十进制数,即应遵循逢十进一的规则。而计算机是按二进制(十六进制)进行运算,并未按十进制规则进行运算。1 AAA ;( Unpacked BCD ASC

17、II adjust for addition )对AL中的非压缩BCD码相加的结果进行校正,得到正确的非压缩BCD码和,AAA必须紧接在ADD、ADC指令后,只影响AF,CF。若 (AL)(AL)=07H,(AH)=01H,(CF)=(AF)=1,2 DAA ;(Decimal Adjust for Addition)对AL中的两个压缩的BCD码相加的结果进行校正,得到正确的压缩BCD码和,DAA必须紧接在ADD、ADC指令后,只影响AF,CF。若 (AL)(AL)=19H,(CF)=1 3 AAS ;(Unpacked BCD ASCII adjust for subtraction )对A

18、L中的非压缩BCD码相减的结果进行校正,得到正确的非压缩结果,AAS必须紧接在SUB、SBB指令后,只影响AF,CF。若 (AL)&(0FH)9,或(AF)=1则 AL(AL)-6,AH(AH)-1, AF1,CF1 ,AL(AL)&0FH) 否则 AL(AL)&0FH),4 DAS ;(Decimal Adjust for Subtraction) 对AL中的两个压缩的BCD码相减的结果进行校正,得到正确的压缩BCD码结果,DAA必须紧接在SBB、SUB指令后。若 (AL)AH=04H,AL=08H,SF=0,ZF=0,PF=1,6 AAD ;(Unpacked BCD ASCII adju

19、st for division)指令功能:AL(AH)0AH+(AL)AH0即将AH的内容乘10并加上AL的内容,结果送回AL,将0送回AH。这种操作的实质就是将AX中非压缩的BCD码转换成为二进制数,并存放在AL寄存器中。指令执行后,根据AL中的结果影响标志位SF、ZF和PF,其余标志位的值不确定。 例:计算十进制除法运算853=?MOV AX, 0805H ;AH=08H,AL=05HMOV BL, 03H ;BL=03HAAD ;AL=55HDIV BL ;AH=01H,AL=1CHAAM ;AH=02H,AL=08H 六、符号扩展指令1 CBW ; (Convert Byte to W

20、ord)AL符号扩展到AH2 CWD ; (Convert Word to Double Word) AX符号扩展到DX 最高位为1,扩展全1;最高位为0,扩展全0。,4.3.3 位操作指令,一、逻辑运算指令 1 NOT DST ; 对源操作数求反,然后回送源操作数 2 AND DST,SRC ; 按位逻辑与,结果回送到目的操作数 3 OR DST,SRC ; 按位逻辑或,结果回送到目的操作数 4 XOR DST,SRC ; 对指令的操作数进行“异或”运算 5 TEST DST,SRC ; 本指令完成AND同样的操作但并不回送结 果 ,类似CMP,说明: SRC:REG/MEM/DATA, D

21、ST:REG/MEM 除NOT指令单操作数外,其它均为双操作数可进行字节或字操作NOT指令不影响标志TEST只影响标志位,不影响操作数。,例:数字09的ASCII码连续存放在存储器中,其首地址为DATA1,编写 程序将其转换成相应的非压缩BCD码,并存放在以DATA2为首地址的存储 区域。 分析:09的ASCII码为30H39H,因此只要屏蔽掉ASCII码的高4位即 可实现转换。LEA SI, DATA1 ;SI源地址LEA DI, DATA2 ;DI目的地址MOV CX, 10 ;CX循环次数NEXT:MOV AL, SI ;取一个数字的ASCII码送ALAND AL, 0FH ;屏蔽AL的

22、高4位MOV DI, AL ;非压缩BCD码送存INC SI ;源地址加1INC DI ;目标地址加1DEC CX ;循环次数减1JNZ NEXT ;循环次数不为0,转向NEXTHLT ;停止,二、移位指令 SHL (Shift Logic Left)逻辑左移指令 SAL(Shift Arithmetic Left)算术左移指令 SHR (Shift Logic Right)逻辑右移指令 SAR (Shift Arithmetic Right)算术右移指令,当移位次数为1时,如果移位后的最高位的值被改变,则OF=1,三、 循环移位指令 ROL (Rotate Left)循环左移指令 ROR (

23、Rotate Right)循环右移指令 RCL (Rotate through CF Left)带进位循环左移指令 RCR (Rotate through CF Right)带进位循环右移指令,指令格式,ROL DST,1 CL,ROR DST,1 CL,RCL DST,1 CL,RCR DST,1 CL,当移位次数为1时,如果移位后的最高位的值被改变,则OF=1,对于移位指令,有以下几点需要说明:1)DST:REG/MEM 2)若只移位1次,可使指令中的计数值设为1;若移位次数 大于1,则将移位次数送进CL寄存器,再将CL放在指令的 计数值中。 3)左移相当于乘2,右移相当于除2;SAL、S

24、AR用于带 符号数,SHL、SHR用于无符号数。 4)当移位次数为1时,如果移位后的最高位的值被改变, 则OF=1,例:假设AL=1,下列指令执行后,AL寄存器的内容是什么?SAL AL, 1 ;AL=2MOV BL, AL ;BL=2SAL AL, 1 ;AL=4SAL AL, 1 ;AL=8ADD AL, BL ;AL=10例:统计一个16位存储器操作数中“1”的个数,假设存储器操作数的地址 为DATA,统计结果存放的单元地址为COUNT。MOV AX, DATA ;16位操作数送入AXMOV CX, 16 ;置循环次数XOR BL, BL ;BL寄存器清零AGAIN: ROL AX, 1

25、 ;左循环移位1次,最高位进CFJNC NEXT ;检查CF状态,若CF=0则跳转INC BL ;若CF=1,则计数器BL加1NEXT: DEC CX ;循环次数减1JNZ AGAIN ;循环次数不为零,继续循环MOV COUNT,BL ;统计结果送存HLT,4.2.4 串操作类指令,所有的串操作指令隐含规定: 1、用SI寻址源操作数且是在数据段中(DS为段地址)允许段超越; 2、用DI寻址目的操作数且是在附加段中(ES为段地址)不允许段超越; 3、这两个地址指针在每一个串操作以后会自动修改按增量还是按减量,取决于方向标志位DF;若DF=0每次操作后SI和DI增量若DF=1则减量(字节操作加1

26、,字操作则加2) 4、要比较的字符串长度放在CX中; 5、重复时在指令前加前缀REP。重复次数在CX中,CX中的值自动修改,直到CX为0。加前缀REP时,自动执行的操作: (1)CX=0?为零则退出REP,否则往下执行 (2)CX1 CX (3)执行串操作指令 (4)重复(1) (3) 有些串操作指令还可加重复前缀, REPE/REPZ, REPNE/REPNZ REPEREPZ:当串未结束(CX0)且串相等(Z标志为1)时继续 REPNEREPNZ:当串未结束(CX0)且串不相等(Z标志为0)时继续,1 REPMOVS DI,SI /MOVSB/MOVSW ;(Move String Byt

27、e/Word)把串SI作为指针的源串中的一个字节或字,传送至由DI作为指针的目的串,且相应地址改为指针以指向串中的下一个元素例:把100个字节从AREA1到AREA2 也可采用重复前缀MOV SI,OFFSET AREA1 MOV SI,OFFSET AREA1MOV DI,OFFSET AREA2 MOV DI,OFFSET AREA2MOV CX,100 MOV CX,100CLD CLD AGAIN:MOVS DI ,SI REP MOVSBDEC CX JNZ AGAIN,2 LODS SI /LODSB/LODSW ;(Load String)本指令把由SI作为指令的串元素,传送至A

28、L或AX,同时修改指令SI,使指向串的下一个元素,该指令正常是不重复执行的,因为每重复一次,累加器中的内容就要改写,只保留了最后一个元素。3 REPSTOS DI/STOSB/STOSW ;(Store String) (B/W)从累加器AL或AX传送一个字节或字,到由DI作为指针的目的串中 同时修改DI以指向串中的下一个单元,利用重复操作,可以在串中建 立相同的值。,4 REPE,REPNECMPS DI,SI/CMPSB/CMPSW; (Compare String)由SI作为指针的源串中与由DI作为指针的目的串比较,但减的结果只反映到标志位上同时相应的修改源和目的指针可加前缀。 例:比较

29、两个字符串若相同在RESULT单元中置0否则置0FFHMOV SI,OFFSET STRING1MOV DI,OFFSET STRING2MOV CX,COUNTCLDREPZ CMPSBJNZ NUMAT ; 串不相同MOV AL,0JMP OUTPUTNUMAT: MOV AL0FFHOUTPUT:MOV RESULT,AL,5 REPE,REPNESCAS DI/SCASB/SCASW; (Scan String)串扫描指令,关键字放在AL(SCASB)或AX(SCASW)中,操作时从AL或AX的内容减去由DI作为指针的串元素,结果反映在标志位上,但并不改变目的串元素以及累加器的值。 例

30、:在以BLOCK开始的字符串中,搜索一字符A。MOV DI,OFFSET BLOCKMOV CX,COUNTMOV AL,ACLDREPNE SCASBJZ FOUND JMP DONE FOUND:MOV BX,OFFSET BLOCKSUB DI,BXMOV BX,DI; 串中第几个字符DONE: HLT,4.2.5 控制转移类指令,一、无条件转移指令 JMP 习惯: JMP 标号 (1) 段内直接JMP:用指令中的偏移量加到目前指令指针IP上来改变IP 实现跳转,当偏移量在+127-128字节内就自动产生一个SHORT JMP指令,否则产生NEAR JMP,在+32767 -32768范

31、围内寻址。 例: JMP SHORT OBJECTJMP NEAR PTR TAGET (缺省) (2) 段内间接JMP:目标地址由一个16位通用寄存器或内存单元来寻址 例: JMP BX 或 JMP WORD PTRBX (3) 段间直接JMP:指令中给出转向地址的段地址和段内偏移量 例: JMP FAR PTR LABLE 或 JMP 2000H:1000H (4) 段间间接JMP:指令指定双字指针用第一个字单元的内容代替lP 第二个字单元的内容代替CS 例 JMP DWORD PTRBXSI,二、条件转移指令这类指令转移的目的地址是采用相对寻址方式即以转移指令为基准的+127或-128字

32、节的范围之内,对标志位无影响。 1 直接标志转移指令JC 标号 ;JNC 标号; JS 标号 ;JNS 标号; JO 标号 ;JNO 标号; JP 标号 ;JNP 标号; JZ/JE 标号 ; JNZ/JNE 标号;,2 间接标志转移指令 无符号数比较测试:JAEJNB 标号JA JNBE 标号JB JNAE 标号JBE/ JNA 标号 带符号数比较测试:JG JNLE 标号JGEJNL 标号JL JNGE 标号JLEJNG 标号,“A” Above 高于 “B” Below 低于,“G” Great than 大于 “L” Less than 小于,3 寄存器测试转移指令JCXZ 标号,例:

33、存储器中以BLOCK为首地址连续存放着20个16位的带符 号数,要求找出其中的最小数,并存放在MIN单元中。LEA SI,BLOCK ;SI数组的首地址MOV AX,SI ;AX数组的第一个数MOV CX,19 ;CX循环次数INC SI ;SI(SI)+1INC SI ;SI(SI)+1LOP:CMP AX,SI ;两个数比较,即AXSIJL NEXT ;若AXSI,则转向NEXTMOV AX,SI ;若AXSI,则AXSINEXT:INC SI ;SI(SI)+1INC SI ;SI(SI)+1DEC CX ;CX(CX)1,修改循环次数JNZ LOP ;循环未完,则转向LOPMOV MI

34、N,AX ;循环结束,MIN(AX)HLT ;停止,三、循环控制指令格式 LOOPxx 符号地址执行 (CX) (CX)1 此操作不影响标志 检查转移条件,满足,转向目标地址去执行;不满足,执行LOOPxx后一条指令 转移方式 只允许段内直接短方式,跳转范围-128127,例:数据段中分别以FIRST和SECOND为首地址存放着100个字 符,找出其中第一个不相同的字符分别送至AL和BL寄存器, 若两串完全相同,则令AL=BL=0。LEA SI, FIRST ;SI字符串1首地址LEA DI, SECOND ;DI字符串2首地址MOV CX, 100 ;CX循环次数CYCLE:MOV AL,

35、SI ;AL串1中的字符MOV BL, DI ;BL串2中的字符INC SI ;SI(SI)+1INC DI ;DI(DI)+1CMP AL, BL ;(AL)(BL)LOOPE CYCLE ;若(CX)0,且ZF=1,则跳转JNZ DONE ;若相应内容不等,则转向DONEMOV AL, 0 ;若两串完全相同,则AL0MOV BL, 0 ;若两串完全相同,则BL0DONE:HLT ;停止,四、过程调用和返回指令,CALLRET指令对 CALL: 调用子程序,调用结束后要返回CALL指令的下一条指令,所以必须保存断点; RET: 子程序或过程的最后一条指令用以返回到调用这个子程序的断点处说明:

36、 1)CALLRET要保护现场; 2)对于段内调用(NEAR属性)CALL ,使IP入栈,目标过程的地址偏移量加到IP上; CALL(NEAR PTR)过程名对于段间调用(FAR属性) CALL ,首先CS入栈, CS再由指令串的段值代替,然后IP入栈,IP由子程序中第一条指令的偏移地址代替 。CALL FAR PTR 过程名,格式 CALL 过程名,格式 RET,五、中断控制指令,INT N ;中断指令 N=0-255入栈FLAGS,清除IF、TF ;入栈CS、IP,中断服务程序入口地址送CS、IP。SP(SP)2,(SP)+1:(SP)(FLAGS) TF0,IF0SP(SP)2,(SP)

37、+1:(SP)(CS) SP(SP)2,(SP)+1:(SP)(IP) CS(N4+2) IP(N4 )IRET ; 中断返回 出栈IP、CS、FLAGSIP(SP)+1:(SP),SP(SP)+2CS(SP)+1:(SP),SP(SP)+2FLAGS(SP)+1:(SP),SP(SP)+2 例:设存储单元(0005C)=12H,(0005D)=34H,(0005E)=56H,(0005F)=78H,指令INT 17H执行后,中断服务程序入口地址如何确定?17H4=5CH, 则CS=(0005F):(0005E)=7856H,IP=(0005D):(0005C)=3412H 中断服务程序入口地

38、址为(CS)10H+(IP)=7856H10H+3412H=7B972H,4.2.6 处理器控制类指令,一、标志操作 共有7条 3条针对CF 2条针对DF 有2条针对IF 1 CLC (Clear Carry Flag) 2 CMC(Complement Carry Flag) 3 STC (Set Carry Flag) 4 CLD(Clear Directory) 5 STD (Set Directory) 6 CLI(Clear Interrupt Enable flag) 7 STI (Set Interrupt Enable Flag),二、处理器暂停HLT(halt)它使CPU进入

39、暂停状态,不进行任何操作,只有当下列情况之一发生时,CPU才脱离暂停状态。 RESET线上加复位信号 NMI线上出现中断请求信号 在IF=1情况下,INTR引脚上出现中断请求信号,三、处理器等待 WAIT 四、处理器脱离 ESC 五、总线锁定 LOCK(前缀) 六、空操作 NOP:不完成任何操作,执行时耗费3个时钟周期的时间,4.3.1 实地址方式下的寻址方式 立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 寄存器相对寻址 基址加变址的寻址方式 相对的基址变址寻址方式 I/O端口寻址即80X86实地址下的寻址方式及指令系统与8086基本相同,4.3 80X86的寻址方式,存储器寻址,4.3.2

40、 保护虚地址方式下的寻址方式,前8种寻址方式与实方式一样 区别: 有效地址可以是32位偏移量形式,操作数可以是8位、16位、32位。 8个32位通用寄存器均可用作寄存器间接寻址 8个32位通用寄存器均可作为基址、变址寄存器(除ESP),以出现的顺序默认段基值。,9 具有比例因子的相对变址寻址 比例因子=1、2、4、8 EA=变址寄存器比例因子+位移量 10 具有比例因子的基址变址寻址 EA=变址寄存器比例因子+基址寄存器 11 具有比例因子的相对基址变址寻址 EA=变址寄存器比例因子+基址寄存器+位移量,说明:1、PUSHA/POPA 将所有8个16位通用寄存器的内容依次压入/弹出堆栈。压入顺

41、序AX、CX、DX、BX、SP、BP、SI、DI,压入SP是该指令执行前的值,弹出时自动丢弃;2、三操作数乘法指令是将源1乘以源2结果送入目的操作数;3、移位指令中的立即数从原来的1扩充到31;4、INS/OUTS以DX为外设端口,指令格式同其它串操作类指令。REPINS DI ,DX/ INSB/INSWREPOUTS DX ,SI/ OUTSB /OUTSW,4.3.3 80286扩充与增加的指令,4.3.4 80386/80486扩充与增加的指令,说明:,1、PUSHAD/POPAD是将32位通用寄存器压/出栈,顺序和原则与80286相同; 2、带符号数扩展传送MOVSX,将R/M中的符

42、号扩展到REG中所有多余高位; 3、字节交换指令BSWAP4、比较与交换CMPXCHG将OP1与(AL、AX、EAX)比较,影响ZF标志,若相等OP2OP1,若不等OP1 (AL、AX、EAX)。 5、 交换与相加XADD目的+源 目的,同时将原目的原源数;,6、CWDE ; AX EAXCDQ ; EAX EDX EAX 7、 双精度逻辑左移SHLD 双精度逻辑左移SHRD操作之后,R不变,R/M的低位由R的高位依次移入; 8、 位测试BT R/M,R/M 测试目标操作数中由源数指定的那一位状态,并将结果送CF标志;位测试并求反BTC 测试目标操作数中由源数指定的那一位状态,并将结果送CF标志,然后使该位取反;位测试并置位BTS位测试并复位BTR向前位扫描指令BSF 从源操作数的最低位向高位扫描,将出现第一个1的位号存入目的操作数,并影响ZF标志;向后位扫描指令BSR,CF,R,R/M,CF,R/M,R,9、SETO R/M ;若OF=1,则1R/M;否则0R/MSETNO SETC SETNC SETZ SETNZSETS SETNS SETP SETNPSETBE SETNBE (无符号数)SETL SETNLSETLE SETNLE (带符号数) 10、80286、80386、80486还有一些保护方式指令,用户一般不需用它们编程,在此不做介绍。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报