第3章 Pentium的指令系统_第1页
第3章 Pentium的指令系统_第2页
第3章 Pentium的指令系统_第3页
第3章 Pentium的指令系统_第4页
第3章 Pentium的指令系统_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

1、1第3章 Pentium的指令系统余华芳余华芳 办公办公 : 020-39352212020-39352212 Blog: :/hexuBlog: :/hexun/yhf100n/yhf100 公共邮箱:公共邮箱: yhf_stdnt163 yhf_stdnt163 QQ QQ: 460395918460395918 广东药学院信息工程学广东药学院信息工程学院院2本章重点本章重点 寻址方式;寻址方式; 传送指令中的堆栈指令、交换指令、传送指令中的堆栈指令、交换指令、换码指令、输入换码指令、输入/ /输出指令;输出指令; 算术运算指令中的比较指令;算术运算指令中的比较指令; 串操作指令;串操作指

2、令; 中断调用示例;中断调用示例; 规范程序;规范程序; 伪指令伪指令DBDB、DWDW、PTRPTR。33.1 Pentium的寻址方式 指令的两个问题指令的两个问题指出进行什么操作指出进行什么操作涉及的操作数和操作结果放在何涉及的操作数和操作结果放在何处处 两种情况下涉及寻址方式两种情况下涉及寻址方式操作数寻址操作数寻址转移地址和调用地址进行寻址转移地址和调用地址进行寻址43.1 Pentium的寻址方式 3.1.1 3.1.1 立即数寻址立即数寻址比如:比如: MOVMOVALAL,80H80H MOV MOVAXAX,1090H1090H MOV MOVEAXEAX,10002000H

3、10002000H 3.1.2 3.1.2 寄存器寻址寄存器寻址比如:比如:INCINCCXCXROLROLAHAH,1 1MOV MOV ECX ,EAXECX ,EAX53.1 Pentium的寻址方式 3.1.3 3.1.3 输入输入/ /输出端口寻址输出端口寻址I/OI/O直接寻址直接寻址比如:比如:ININALAL,82H 82H OUTOUT80H80H,AXAXININEAXEAX,80H80HI/OI/O间接寻址间接寻址ININALAL,DXDXOUTOUTDXDX,AXAXOUTOUTDXDX,EAXEAX63.1 Pentium的寻址方式 3.1.4 3.1.4 存储器寻址

4、存储器寻址EAEA基址变址基址变址比例因子位移量比例因子位移量73.1 Pentium的寻址方式1 1 直接寻址直接寻址比如:比如:MOVMOV AX AX,1070H1070HMOVMOV EAX EAX,ESES:1000H 1000H 2 2 寄存器间接寻址寄存器间接寻址MOVMOVAXAX,BXBX MOVMOV EAXEAX,EBX EBX 3 3 寄存器相对寻址寄存器相对寻址比如:比如:MOVMOVAXAX,SI+100HSI+100H4 4 基址加变址的寻址基址加变址的寻址MOVMOVAXAX,BX+SIBX+SI MOV MOV EDXEDX,EBX+ESIEBX+ESIMOV

5、MOV EDXEDX,EBX ESI EBX ESI 5 5 相对的基址加变址寻址相对的基址加变址寻址比如:比如:MOVMOV AX AX,BP+SI+0050BP+SI+005083.1 Pentium的寻址方式6 6 相对的带比例因子的变址寻址相对的带比例因子的变址寻址IMULIMULEBXEBX,ESIESI* *4 47 77 7 基址加比例因子的变址寻址基址加比例因子的变址寻址MOVMOVEAXEAX,EBXESIEBXESI* *44MOV MOV ECXECX,EDIEDI* *8 8EAXEAX8 8 相对的基址加比例因子的变址寻址相对的基址加比例因子的变址寻址MOV MOV

6、EAXEAX,EDIEDI* *4 4EBP+80EBP+8093.2 Pentium指令系统 PentiumPentium的指令分为如下几类:的指令分为如下几类:传送指令;传送指令;串操作指令;串操作指令;算术运算指令;算术运算指令;逻辑运算和移位指令;逻辑运算和移位指令;转移和调用指令;转移和调用指令;标志操作和处理器指令;标志操作和处理器指令;控制指令;控制指令;条件测试和字节设置指令;条件测试和字节设置指令;系统管理指令;系统管理指令;支持高级语言的指令。支持高级语言的指令。指令格式指令格式大多数操作码含大多数操作码含3 3个特征位个特征位:W W位位D D位位S S位位含义:含义:

7、W W位是字操作标志位。位是字操作标志位。 D D位是对目的操作数进行寄存器寻址的位是对目的操作数进行寄存器寻址的标志标志 S S位是符号扩展位。位是符号扩展位。 11几点注意:几点注意: 一条指令中可以包含一个或多一条指令中可以包含一个或多个操作数个操作数 涉及一个操作数的指令称为单涉及一个操作数的指令称为单操作数指令操作数指令 如位移量或立即数如位移量或立即数为为1616位,那么低位在前,高位在后位,那么低位在前,高位在后123.2.1 传送指令(1) 通用传送指令通用传送指令MOVMOV和和MOVZX/MOVSXMOVZX/MOVSX两个操作数的数位相同的传送指令两个操作数的数位相同的传

8、送指令MOVMOVMOVMOVALAL,BLBLMOVMOVESES,DXDX MOVMOVAXAX,BXBX MOVMOV DIDI,AXAX MOV MOV CXCX,10001000MOVMOVWORD PTR SIWORD PTR SI,6070H6070HMOVMOVDXDX,5040H 5040H MOVMOVEAXEAX,EBX+ECXEBX+ECX* *2+1000H2+1000HMOVMOV CRnCRn,EAXEAXMOVMOVDRnDRn,EAXEAX两个操作数的数位不相同的传送指令两个操作数的数位不相同的传送指令MOVZX/MOVSXMOVZX/MOVSXMOVZX E

9、AXMOVZX EAX,BLBLMOVSX EAXMOVSX EAX,BLBL几点几点注意注意 通用传送指令可传送通用传送指令可传送8 8位和位和1616位数据。位数据。 通用传送指令中总是既含源操作数,又含通用传送指令中总是既含源操作数,又含目的操作数。目的操作数。 不能在两个内存单元之间直接传送数据不能在两个内存单元之间直接传送数据 CS CS和和IPIP寄存器不能作为目的操作数寄存器不能作为目的操作数 用用BXBX、SISI、DIDI来间接寻址时,默认的段寄来间接寻址时,默认的段寄存器为存器为DSDS,而用,而用BPBP来间接寻址时,默认的段来间接寻址时,默认的段寄存器为寄存器为SSSS

10、。 执行执行SSSS寄存器赋值的传送指令时,系统自寄存器赋值的传送指令时,系统自动禁止外部中断。动禁止外部中断。 所有的通用传送指令都不改变标志。所有的通用传送指令都不改变标志。143.2.1 3.2.1 传送指令(传送指令(2 2) 堆栈操作指令堆栈操作指令PUSH/POPPUSH/POP、PUSHA/POPAPUSHA/POPA和和PUSHAD/POPADPUSHAD/POPAD普通堆栈操作指令普通堆栈操作指令PUSH/POPPUSH/POPPUSH PUSH EAXEAXPUSH PUSH CSCSPUSH BX+DIPUSH BX+DIPUSHPUSH 0870H0870HPUSHPU

11、SH DWORD PTR EBX+ESIDWORD PTR EBX+ESIPOP POP BXBXPOP POP ESESPOP POP EAXEAX153.2.1 3.2.1 传送指令(传送指令(3 3) 堆栈操作指令堆栈操作指令PUSH/POPPUSH/POP、PUSHA/POPAPUSHA/POPA和和PUSHAD/POPADPUSHAD/POPAD堆栈成组操作指令堆栈成组操作指令PUSHA/POPAPUSHA/POPA(8 8个个1616位位R R)和和PUSHAD/POPAD PUSHAD/POPAD (8 8个个3232位位R R)PUSHPUSH EAX EAXPUSH PUSH

12、 EBX EBXPUSH PUSH EDI EDIPUSH PUSH ESI ESI则子程序返回前,应如下恢复寄存器的值:则子程序返回前,应如下恢复寄存器的值:POPPOP ESI ESIPOPPOP EDI EDIPOPPOP EBX EBXPOP POP EAX EAX16几点几点注意注意: 堆栈操作堆栈操作总是总是按字双字进行的。按字双字进行的。 推入指令,推入指令,SPSP减减2 2或或4 4,低地址低,低地址低字节,数据在栈顶。弹出指令正好字节,数据在栈顶。弹出指令正好相反。相反。 允许允许PUSH CSPUSH CS,但不允许,但不允许POP CSPOP CS。 堆栈的后进先出。堆

13、栈的后进先出。173.2.1 3.2.1 传送指令(传送指令(4 4) 交换指令交换指令XCHG/BSWAPXCHG/BSWAP字节、字和双字交换指令字节、字和双字交换指令XCHGXCHGXCHGXCHGALAL,BL BL XCHGXCHGBXBX,CXCXXCHG XCHG 25302530,CXCXXCHGXCHG EAXEAX,EDIEDIXCHGXCHG ESIESI,EBXEBX3232位寄存器内部双字交换指令位寄存器内部双字交换指令BSWAPBSWAPEAXEAX=01234567H=01234567H,执行指令,执行指令BSWAP BSWAP EAXEAX,使,使EAXEAX=

14、 =67452301H67452301H思考思考P82P82: 为什么说一条为什么说一条XCHGXCHG指令相当于三指令相当于三条条MOVMOV指令?指令?交换指令注意点:交换指令注意点: 目的操作数和源操作数不能均为目的操作数和源操作数不能均为内存单元。内存单元。 段寄存器和段寄存器和IP、EIP不能作为交换不能作为交换指令的操作数。指令的操作数。 193.2.1 3.2.1 传送指令(传送指令(5 5) 累加器专用传送指令累加器专用传送指令IN/OUTIN/OUT和和XLAT/XLATB XLAT/XLATB 输入输入/ /输出指令输出指令IN/OUTIN/OUT 直接的直接的I/OI/O

15、指令指令比如:比如:IN IN ALAL,50H50HIN IN AXAX,70H70HIN IN EAXEAX,70H 70H OUT OUT 80H80H,AXAX间接的间接的I/OI/O指令指令IN IN ALAL,DXDXIN IN AXAX,DXDXIN IN EAXEAX,DXDXOUTOUT DXDX,AXAXOUTOUTDXDX,EAXEAX20输入输出指令输入输出指令注意点注意点: 只能只能用累加器作为执行输入输出用累加器作为执行输入输出的机构的机构 寻址范围:寻址范围:直接输入输出指令为直接输入输出指令为0255间接输入输出指令为间接输入输出指令为065 535。用间接用间

16、接I/OI/O指令时,指令时,只能用只能用DXDX213.2.1 3.2.1 传送指令(传送指令(6 6) 累加器专用传送指令累加器专用传送指令IN/OUTIN/OUT和和XLAT/XLATBXLAT/XLATB换码指令换码指令XLAT/XLATBXLAT/XLATB格雷码编码规则如下:格雷码编码规则如下:011000011000100011100011200101200101300110300110401001401001501010501010601100601100710001710001810010810010910100910100MOV BX,1000HMOV AL,5XLAT22

17、3.2.1 3.2.1 传送指令(传送指令(7 7)地址传送指令地址传送指令LEALEA和和LDS/LES/LSS/LFS/LGSLDS/LES/LSS/LFS/LGS比如:比如:LEALEAAXAX,27282728LEALEABXBX,BP+SIBP+SILEALEAESIESI,EBX+ECX+2530HEBX+ECX+2530HLEALEAEDIEDI,BX+1946HBX+1946H取段码和偏移量的指令取段码和偏移量的指令LDS/LES/LSS/LFS/LGSLDS/LES/LSS/LFS/LGS比如:比如:LDSLDSDIDI,2530H2530H ;将;将2531H2531H和和

18、2530H2530H中的内容中的内容(16(16位位) )送送DIDI, 2533H2533H和和2532H2532H中的内容送中的内容送DSDS。 LESLESEDIEDI,1000H1000HLSSLSSESPESP,EDXEDXLFSLFSEDXEDX,EDXEDXLGSLGSESIESI,EDXEDX源操作数总是源操作数总是来自存储器来自存储器233.2.1 传送指令(8) 标志传送指令标志传送指令LAHF/SAHFLAHF/SAHF、PUSHF/POPFPUSHF/POPF和和PUSHFD/POPFDPUSHFD/POPFD读取低读取低8 8位标志和设置低位标志和设置低8 8位标位标

19、志指令志指令LAHF/SAHFLAHF/SAHF对标志寄存器的推入和弹出堆对标志寄存器的推入和弹出堆栈指令栈指令PUSHF/POPF(FRPUSHF/POPF(FR低低1616位值位值) )和和PUSHFD/POPFD (FR32PUSHFD/POPFD (FR32位值位值) )243.2.2 3.2.2 算术运算指令算术运算指令 无符号数和有符号数无符号数和有符号数采用同一套采用同一套加法指令加法指令及减法指令及减法指令有两个条件有两个条件:同为无符号数或有符号数同为无符号数或有符号数用不同的方法检测无符号数或有符号数的运算结果是用不同的方法检测无符号数或有符号数的运算结果是否溢出否溢出算术

20、运算指令涉及两种类型的数据算术运算指令涉及两种类型的数据无符号数无符号数8 8位无符号数的范围为位无符号数的范围为0 02552551616位无符号数的范围为位无符号数的范围为0 065 53565 535有符号数有符号数8 8位有符号数的范围为位有符号数的范围为-128-128+127+127 16 16位有符号数的范围为位有符号数的范围为-32 768-32 768+32 767+32 7672526所有算术运算指令均所有算术运算指令均影响状态标志影响状态标志。规则规则: 当无符号数运算产生溢出时,当无符号数运算产生溢出时,CFCF为为1 1; 当有符号数运算产生溢出时,当有符号数运算产生

21、溢出时,OFOF为为1 1; SFSF和和OFOF支持有符号数的运算;支持有符号数的运算; 如运算结果为如运算结果为0 0,则,则ZF=1ZF=1; 如运算结果为负数,则如运算结果为负数,则SF=1SF=1; 如如运算结果的低运算结果的低8 8位中位中有偶数个有偶数个1 1,则,则PF=1PF=1。273.2.2 算术运算指令(1) 加法类指令加法类指令ADD/ADC/XADD/INCADD/ADC/XADD/INC不带进位位的加法指令不带进位位的加法指令ADDADD ADDADDCXCX,1000H1000HADDADDDIDI,SISIADDADD BX+DIBX+DI,AXAXADDAD

22、DEAXEAX,BX+2000HBX+2000H带进位位的加法指令带进位位的加法指令ADC(ADC(用于多字节加用于多字节加) )ADCADCAXAX,SI SI ADCADCDXDX,SISIADCADCBXBX,3000H3000H283.2.2 算术运算指令(2) 加法类指令加法类指令ADD/ADC/XADD/INCADD/ADC/XADD/INC字交换加法指令字交换加法指令XADDXADD比如:比如:AXAX=1234H=1234H,BXBX=1111H=1111H,执行指令,执行指令XADD AXXADD AX,BX ; BX ; BXBX=1234H=1234H,AXAX=2345

23、H=2345H比如:比如:EAXEAX=20000002H=20000002H,而,而1000H1000H开始的内存单开始的内存单元中为元中为30000003H30000003H,执行指令,执行指令XADD XADD 1000H1000H,EAXEAX增量指令增量指令INCINC(任何位的操作数都是加(任何位的操作数都是加 1 1)比如:比如:INC INC ALAL INCINC ECXECX INCINC BYTE PTRBX+DI+500BYTE PTRBX+DI+500特别注意:特别注意:INC不影响不影响CF293.2.2 算术运算指令(3) 减法类指令SUB/SBB/DEC/NEG

24、和CMP/CMPXCHG/CMPXCHG8B 1) 1) 不考虑借位的减法指令不考虑借位的减法指令SUBSUB,比如:比如:SUBSUB EBX EBX,ECXECXSUB SUB BP+2BP+2,CLCLSUB SUB SISI,5010H5010HSUB SUB WORD PTR DIWORD PTR DI,1000H1000H2 2)考虑借位的减法指令)考虑借位的减法指令SBB (SBB (用于多用于多字节减法)字节减法)SBB SBB AXAX,2530H2530HSBB SBB WORD PTREDI+2WORD PTREDI+2,1000H1000H303.2.2 算术运算指令(

25、4) 减法类指令减法类指令SUB/SBB/DEC/NEGSUB/SBB/DEC/NEG和和CMP/CMPXCHG/CMPXCHG8BCMP/CMPXCHG/CMPXCHG8B3) 3) 减量指令减量指令DECDEC比如:比如:DECDEC EBX EBX DECDEC AX AXDECDECBYTE PTRBYTE PTRDI+2 DI+2 4) 4) 求补指令求补指令NEG NEG ( ( 相当于相当于0-0-操作数操作数 ) )比如比如:NEGNEG EAX EAX NEGNEG ECX ECX5)5)比较指令比较指令CMPCMP比如:比如:CMP CMP AXAX,2000H2000HC

26、MPCMPEAXEAX,EBX+EDI+100EBX+EDI+100CMPCMPEDXEDX,EDIEDI31CMPCMP指令的一些结论指令的一些结论 对于有符号数的比较,若对于有符号数的比较,若OFOF和和SFSF的值的值相同相同,则被减数,则被减数大大;若;若不同,则被减数不同,则被减数小小。 对于无符号数的比较,若对于无符号数的比较,若CF=1CF=1,被减数小;否则,被减数大。被减数小;否则,被减数大。323.2.2 3.2.2 算术运算指令(算术运算指令(5 5) 减法类指令减法类指令SUB/SBB/DEC/NEGSUB/SBB/DEC/NEG和和CMP/CMPXCHG/CMPXCH

27、G8BCMP/CMPXCHG/CMPXCHG8B6) 6) 比较并交换指令比较并交换指令CMPXCHGCMPXCHG 格式:格式:CMPXCHG r/m, r CMPXCHG r/m, r ;3232位比较指令位比较指令 将将目的目的寄存器或存储器中数和寄存器或存储器中数和累加器累加器中数中数比较比较,如等则如等则ZFZF为为1 1,源操作数,源操作数 目的操作数;否则目的操作数;否则ZFZF为为0 0,目的操作数,目的操作数 累加器。累加器。 比如:比如:ALAL=11H=11H,BLBL=24H=24H,1000H1000H=22H=22H,执行指令执行指令CMPXCHGCMPXCHG10

28、00H1000H,BLBL又如:又如:EBXEBX=76543210H,=76543210H,ECXECX=01234567H=01234567H,EAXEAX=01234567H=01234567H,则执行指令,则执行指令CMPXCHG ECXCMPXCHG ECX,EBXEBX只影响只影响ZF333.2.2 3.2.2 算术运算指令(算术运算指令(5 5)7) 87) 8字节比较指令字节比较指令CMPXCHG8BCMPXCHG8B将将EDXEAXEDXEAX中的中的8 8个字节与个字节与m m所指的存储器所指的存储器中的中的8 8个字节比较。个字节比较。 若若ZFZF为为1 1, ECXE

29、BXECXEBX 目的操作数;否目的操作数;否则则ZFZF为为0 0,目的操作数,目的操作数 EDXEAXEDXEAX 。比如比如: :EAXEAX=11111111H=11111111H,EBXEBX=22222222H=22222222H,ECXECX=33333333H=33333333H,EDXEDX=44444444H=44444444H,设,设DSDS段段1000H1000H所指单元所指单元开始的开始的8 8字节为字节为4444444411111111H4444444411111111H,执行,执行指令指令CMPXCHG8BCMPXCHG8B1000H1000H;存储单元为目的操作

30、数存储单元为目的操作数只影响只影响ZF343.2.2 3.2.2 算术运算指令(算术运算指令(6 6) 乘法指令乘法指令MUL/IMUL MUL/IMUL 无符号数的乘法指令无符号数的乘法指令MULMULMULMULCX CX ;AXAX中数和中数和CXCX中数相乘,结果在中数相乘,结果在DXDX和和AXAX中中MULMUL BYTE PTR DIBYTE PTR DIMUL MUL WORD PTR SIWORD PTR SI有符号数的乘法指令有符号数的乘法指令IMULIMULIMUL IMUL CLCLIMULIMULBXBX,100 ; BX100 ; BX* *100 100 BX B

31、XIMUL IMUL BYTE PTR BXBYTE PTR BXIMUL IMUL WORD PTR DI WORD PTR DI MUL和和IMUL执行时,执行时,会影响标志位会影响标志位CF和和OF,但,但,AF、PF、SF和和ZF无意义。无意义。353.2.2 算术运算指令(7) 有符号数乘法指令的扩充形式有符号数乘法指令的扩充形式第一组指令:第一组指令:IMULIMULBXBX,CX ; BX CX ; BX * * CX CX BX BXIMULIMULEDXEDX,ECXECXIMULIMULDIDI,MEM_WORDMEM_WORDIMULIMULEDXEDX,MEM_DWOR

32、DMEM_DWORD第二组指令:第二组指令:IMUL IMUL DXDX,BXBX,300300IMULIMULCXCX,2323IMULIMULEBPEBP,200200IMULIMULECXECX,EDXEDX,20002000IMULIMULBXBX,MEM_WORDMEM_WORD,300300IMULIMULEDXEDX,MEM_DWORDMEM_DWORD,202036除法指令除法指令注意注意当被除数为当被除数为1616位,除数为位,除数为8 8位时,位时,8 8位的商放在位的商放在ALAL,8 8位的余数放位的余数放在在AHAH当被除数为当被除数为3232位,除数为位,除数为16

33、16位,位,1616位的商放在位的商放在AXAX中,中,1616位的余位的余数放在数放在DXDX 。37除法指令几点除法指令几点注意:注意: 标志位标志位AFAF、CFCF、OFOF、PFPF、SFSF和和ZFZF无意义无意义 。 商范围如下,超出了范围则产生商范围如下,超出了范围则产生0 0号中断:号中断: 双字除以字为双字除以字为-32 768-32 768+32 767+32 767 字除以字节字除以字节-128-128+127+127 有符号数除法规定有符号数除法规定余数的符号和被除数的符余数的符号和被除数的符号相同号相同。 要求用要求用1616位数除以位数除以8 8位数,或者用位数,

34、或者用3232位数除位数除以以1616位数。位数。383.2.2 算术运算指令(8) 除法指令除法指令DIV/IDIV DIV/IDIV 无符号数的除法指令无符号数的除法指令DIVDIVDIVDIVCLCL ;AXAX中的数据除以中的数据除以CLCL中的数据,商在中的数据,商在ALAL中,余中,余数在数在AHAH中中 DIVDIVWORD PTR DIWORD PTR DI ;DXDX和和AXAX中的中的3232位数除以位数除以DIDI、DI+1DI+1所指的所指的1616位位数,商在数,商在AXAX中,余数在中,余数在DXDX中中有符号数的除法指令有符号数的除法指令IDIVIDIVIDIV

35、IDIV BXBXIDIV IDIV BYTE PTRDIBYTE PTRDI393.2.2 算术运算指令(9) 类型转换指令类型转换指令CBW/CWD/CWDE/CDQCBW/CWD/CWDE/CDQCBW CBW ; AL ; AL AH:AL;AH:AL;执行时,不影响标志位。执行时,不影响标志位。CWD ;AX CWD ;AX DX:AXDX:AXCWDE ; AX CWDE ; AX EAXEAXCDQ ; AX CDQ ; AX EDX:EAXEDX:EAX403.2.2 算术运算指令(10) 两类两类BCDBCD码码组合的组合的BCDBCD码码非组合的非组合的BCDBCD码码 B

36、CDBCD码指令码指令 AAA/DAAAAA/DAA、AAS/DASAAS/DAS、AAMAAM和和AADAAD非非/ /组合的加法十进制调整指令组合的加法十进制调整指令AAA/DAAAAA/DAABCDBCD码的减法十进制调整指令码的减法十进制调整指令AAS/DAS AAS/DAS BCDBCD码的乘法十进制调整指令码的乘法十进制调整指令AAMAAMBCDBCD码的除法十进制调整指令码的除法十进制调整指令AADAAD自自学学413.2.3 逻辑运算和移位指令逻辑指令分为两类:逻辑指令分为两类:逻辑运算指令逻辑运算指令移位指令移位指令423.2.3 逻辑运算和移位指令(1) 逻辑运算指令逻辑运

37、算指令AND/OR/NOT/XOR/TESTAND/OR/NOT/XOR/TESTANDANDAXAX,1000H1000HANDANDEAXEAX,EBXEBXAND AND EDXEDX,EBX+ESI EBX+ESI ORORAXAX,00F0H00F0HXORXORALAL,0FH0FHXORXOREAXEAX,EAXEAXXORXORECXECX,100100XORXORECXECX,10000000H10000000HTESTTESTEAXEAX,80000000H80000000HTESTTESTALAL,0101NOTNOTALALNOTNOTEBXEBXNOTNOTWORD

38、PTR 1000HWORD PTR 1000H 6 6TEST和和AND执行同样操作,但执行同样操作,但TEST指令指令不送回操作结果不送回操作结果,而仅仅,而仅仅影响标志位。如:影响标志位。如: TEST AX,8000H ;如;如AX的最高位为的最高位为1,则,则ZF0,否则否则ZF1 433.2.3 逻辑运算和移位指令(2) 移位指令移位指令SAL/SAR/SHL/SHRSAL/SAR/SHL/SHR和和ROL/ROR/RCL/RCRROL/ROR/RCL/RCR 非循环移位指令非循环移位指令 SAL/SAR/SHL/SHRSAL/SAR/SHL/SHR 如如:SAL:SALEDXEDX

39、,8 8 SALSALEAXEAX,CLCLSALSALALAL,1 1 (a) 算术左移指令算术左移指令SAL; (b) 逻辑左移指令逻辑左移指令SHL(c) 算术右移指令算术右移指令SAR; (d) 逻辑右移指令逻辑右移指令SHR443.2.3 逻辑运算和移位指令(2) 移位指令移位指令SAL/SAR/SHL/SHRSAL/SAR/SHL/SHR和和ROL/ROR/RCL/RCRROL/ROR/RCL/RCR 循环移位指令循环移位指令 ROL/ROR/RCL/RCRROL/ROR/RCL/RCR如如: :ROLROLWORD PTR DIWORD PTR DI,CLCLRCRRCR EBX

40、EBX,CLCLROL ROL BXBX,1 1 不带不带CF的循环左移指令的循环左移指令ROL; (b) 不带不带CF的循环右移指令的循环右移指令ROR; (c) 带带CF的循环左移指令的循环左移指令RCL; (d) 带带CF的循环右移指令的循环右移指令RCR453.2.3 逻辑运算和移位指令(3) 双移位指令双移位指令SHLD/SHRDSHLD/SHRDSHLDSHLDEAXEAX,EBXEBX,3 3SHLDSHLDMEM_WORD,DX,8MEM_WORD,DX,8SHLDSHLDECX,EDX,21ECX,EDX,21SHLDSHLDMEM_DWORD,EAX,2MEM_DWORD,

41、EAX,2SHLDSHLDAL,BL,CLAL,BL,CLSHRDSHRDEAXEAX,EBXEBX,1010SHRDSHRDECX,EDX,19ECX,EDX,19SHRDSHRDEAX,EBX,CLEAX,EBX,CL 了了解解463.2.4 串操作指令(1) 字符串传送指令字符串传送指令MOVSB/MOVSW/MOVSDMOVSB/MOVSW/MOVSD比如下面的程序段:比如下面的程序段:MOVMOV SISI,1000H1000HMOVMOVDIDI,2000H2000HMOVMOVCXCX,100100CLDCLDREP MOVSBREP MOVSB 源源DS:SI,目的操作目的操作

42、数数ES:DI47MOVSBMOVSB指令指令注意点注意点: 源地址用源地址用SISI寄存器指出寄存器指出 目的地址用目的地址用DIDI寄存器指出寄存器指出 CXCX中为字节数或字数或双字数。中为字节数或字数或双字数。 若若DFDF为为0 0,则用,则用MOVSB/MOVSWMOVSB/MOVSW/MOVSD/MOVSD时,每传送一次,时,每传送一次,SISI和和DIDI自自动增动增1 1、2 2或或4 4。若。若DFDF为为1 1,则每传,则每传送一次,送一次,SISI和和DIDI自动减自动减1 1、2 2或或4 4。483.2.4 串操作指令(2) 字符串比较指令字符串比较指令CMPSB/

43、CMPSW/CMPSDCMPSB/CMPSW/CMPSDMOVMOVDIDI,0400H0400HMOVMOVSISI,0E2DH0E2DHCLDCLDMOVMOVCXCX,00040004REPZ REPZ CMPSBCMPSBJZJZDONEDONERETRETDONEDONE:.源源DS:SI,目的目的ES:DI了了解解493.2.4 串操作指令(3) 字符串检索指令字符串检索指令SCASB/SCASW/SCASDSCASB/SCASW/SCASDMOVMOVDIDI,0EEDH0EEDHCLDCLDMOVMOVCXCX,4 4MOVMOVDXDX,CXCXREPNZREPNZSCASB

44、SCASBJNZJNZAAAAAASUB SUB DXDX,CXCXDECDECDX DX MOVMOVDI,DXDI,DXINCINCBYTE PTR DI+440BYTE PTR DI+440AAAAAA:.了了解解503.2.4 串操作指令(4) 取字符串取字符串指令指令LODSB/LODSW/LODSDLODSB/LODSW/LODSD 存字符串存字符串指令指令STOSB/STOSW/STOSDSTOSB/STOSW/STOSD I/OI/O串操作指令串操作指令INSB/OUTSBINSB/OUTSB、 INSW/OUTSWINSW/OUTSW和和INSD/OUTSD INSD/OUT

45、SD 513.2.5 3.2.5 调用调用/ /转移转移/ /循环控制循环控制/ /中断指令中断指令(1) 关于转移指令和调用指令的寻址关于转移指令和调用指令的寻址 段内直接转移方式段内直接转移方式 段内间接转移方式段内间接转移方式 段间直接转移方式段间直接转移方式 段间间接寻址方式段间间接寻址方式52段内直接转移方式段内直接转移方式段内间接转移方式段内间接转移方式段间直接转移方式段间直接转移方式段间间接寻址方式段间间接寻址方式533.2.5 3.2.5 调用调用/ /转移转移/ /循环控制循环控制/ /中断指令中断指令(2) 子程序调用和返回指令子程序调用和返回指令CALL/RETCALL/

46、RET比如比如CALLCALL 1000H1000HCALLCALLEAXEAXCALLCALL2500H2500H:3600H3600HCALLCALLDWORD PTR DIDWORD PTR DI543.2.5 3.2.5 调用调用/ /转移转移/ /循环控制循环控制/ /中断指令(中断指令(3 3) 带参数的返回指令:带参数的返回指令:RET RET n nDDD:DDD:PUSHPUSHBPBP MOV MOVBPBP,SPSP PUSH PUSHESES PUSH PUSHDIDI LES LESDIDI,BP+04BP+04AAAAAA:MOVMOVALAL,ESES:DIDI

47、CMP CMPAL,00AL,00 JZ JZEEEEEE PUSH PUSHAXAX CALL CALLDISPLAYDISPLAY INC INCDIDI JMP JMPAAAAAAEEEEEE:POPPOPDIDI POP POPESES POP POPBPBP RET RET00040004图图3.7 进入子程序前的栈顶内容进入子程序前的栈顶内容(图中段地址要改为图中段地址要改为“段码段码”) n为为0FFFFH范围中的偶数范围中的偶数553.2.5 3.2.5 调用调用/ /转移转移/ /循环控制循环控制/ /中断指令(中断指令(4 4) 无条件转移指令和条件转移指令无条件转移指令和

48、条件转移指令JMP/JJMP/J* *(其中,(其中,* * 代表各种条件)代表各种条件)条件转移指令条件转移指令JMPJMPJMPJMP1000H1000HJMPJMPCXCXJMPJMP1000H1000H:2000H2000HJMP JMP DWORD PTR SIDWORD PTR SI563.2.5 3.2.5 调用调用/ /转移转移/ /循环控制循环控制/ /中断指令(中断指令(5 5) 无条件转移指令和条件转移指令无条件转移指令和条件转移指令JMP/JJMP/J* *(其中,(其中,* * 代表各种条件)代表各种条件)条件转移指令条件转移指令J J* * JE/JZJE/JZ J

49、NE/JNZJNE/JNZ JG/JNLEJG/JNLE JNG/JLEJNG/JLE JL/JNGEJL/JNGE JNL/JGEJNL/JGE JB/JNAEJB/JNAE JNB/JAEJNB/JAE JA/JNBEJA/JNBE JNA/JBEJNA/JBE JSJS JNSJNS JOJO JNOJNO JPJP NPNP JCXZJCXZLABLELABLE JECXZJECXZABCABC57跳转指令举例跳转指令举例GETMAX:GETMAX:MOVMOVBXBX,2000H2000H MOV MOVALAL,BXBX MOV MOVCXCX,14H14HP1P1:INCINCB

50、XBX CMP CMPALAL,BXBX JAE JAEP2P22 2 MOV MOVALAL,BXBXP2P2:DECDECCXCX JNZ JNZP1P1 MOV MOVBXBX,2000H2000H MOV MOV BXBX,ALAL找最大数并找最大数并存到存到2000H单元单元583.2.5 3.2.5 调用调用/ /转移转移/ /循环控制循环控制/ /中断指令(中断指令(6 6) 循环控制指令循环控制指令LOOPLOOP、LOOPZ/LOOPELOOPZ/LOOPE和和LOOPNZ/LOOPNELOOPNZ/LOOPNE计数循环指令计数循环指令LOOPLOOP比如:延迟子程序:比如:

51、延迟子程序: MOVMOV CXCX,0100H0100HKKK:KKK:LOOP LOOP KKKKKK 593.2.5 3.2.5 调用调用/ /转移转移/ /循环控制循环控制/ /中断指令(中断指令(7 7) 循环控制指令循环控制指令LOOPLOOP、LOOPZ/LOOPELOOPZ/LOOPE 和和LOOPNZ/LOOPNELOOPNZ/LOOPNE相等则循环指令相等则循环指令LOOPZ/LOOPELOOPZ/LOOPE例子:例子: MOVMOVCXCX,28H28H MOV MOVSISI,0FFH0FFHNEXTNEXT:INCINCSISI CMP CMPBYTE PTR SIB

52、YTE PTR SI,0 0 LOOPZ LOOPZNEXTNEXT JNZ JNZOKKOKK CALL CALLDISPLAY1DISPLAY1 RET RETOKKOKK: CALLCALLDISPLAY2DISPLAY2 RET RET寻找第一个非寻找第一个非0元素元素603.2.5 3.2.5 调用调用/ /转移转移/ /循环控制循环控制/ /中断指令(中断指令(8 8)中断指令和中断返回指令中断指令和中断返回指令INTINT和和IRET/IRETDIRET/IRETDINTINT指令和指令和IRET/IRETDIRET/IRETD指指令令类型类型0 04 4的中断的中断INTINT

53、指令的例子指令的例子61中断调用示例中断调用示例1 1例例1 1:显示一个字符串和接收一个字符串。:显示一个字符串和接收一个字符串。KEYBUF DB DUP KEYBUF DB DUP (?)(?)MEME DB DB INPUT YOUR PASSWORDINPUT YOUR PASSWORDDAIDAI:MOVMOV DXDX,OFFSET MEOFFSET MEMOVMOV AHAH,9 9;显示一个字符串显示一个字符串INTINT 21H21HKEYINKEYIN:MOVMOV DXDX,OFFSET KEYBUFOFFSET KEYBUFMOVMOV AHAH,0AH 0AH ;接

54、收一个字符串接收一个字符串INTINT 21H21H62中断调用示例中断调用示例2 2例例2 2:将中断处理程序进行装配将中断处理程序进行装配INTERSETINTERSET:CLICLIMOVMOVDX,OFFSET MYPROGDX,OFFSET MYPROGMOVMOVALAL,50H50H; ;终断类型号终断类型号MOVMOVAHAH,25H25HINTINT21H21H; ;此后可以用此后可以用INT 50HINT 50H指令非常方便地调用它。指令非常方便地调用它。例例3 3:把:把键盘输入的字符键盘输入的字符读到读到ALAL寄存器中寄存器中MOVMOVAHAH,0101INTINT

55、21H21H63中断调用示例中断调用示例3 3例例4 4:把:把DLDL中的字符显示在屏幕上。中的字符显示在屏幕上。MOVMOV DLDL,AAMOVMOV AHAH,0202INTINT 21H21H64中断调用示例中断调用示例4 4例例5 5 ,利用滚行功能清除屏幕,利用滚行功能清除屏幕CLEARCLEAR: MOVMOVAHAH,6 6MOVMOVALAL,0 0MOVMOVCHCH,0 0MOVMOVCLCL,0 0MOVMOVDHDH,2424MOVMOVDLDL,7979MOVMOVBHBH,7 7INTINT10H10H65中断调用示例中断调用示例5 5例例6 6:使光标定位在窗

56、口的左下角:使光标定位在窗口的左下角POS_CURSEPOS_CURSE:MOVMOVAHAH,2 2 MOV MOVDHDH,1616 MOV DL MOV DL,3030 MOV MOVBHBH,0 0 INT INT10H10H66; ;例例6 6使光标定位在窗使光标定位在窗口的左下角口的左下角POS_CURSE:MOV AH,2POS_CURSE:MOV AH,2MOVMOV DH,8DH,8 MOV DL,50 MOV DL,50 MOV MOV BH,0BH,0 INT INT 10H10H mov dl,A mov dl,A mov ah,02 mov ah,02 int 21h

57、 int 21h ;例例5 利用滚行功能清除屏幕利用滚行功能清除屏幕 CLEAR:MOV AH,6MOVAL,0MOVCH,0MOVCL,0MOVDH,24MOVDL,79MOVBH,100INT10Hmov dl,A mov ah,02 int 21h 673.2.6 3.2.6 标志操作和处理器控制指令标志操作和处理器控制指令 标志操作指令标志操作指令STC/CLC/CMCSTC/CLC/CMC、STD/CLDSTD/CLD和和STI/CTISTI/CTI进位标志处理指令进位标志处理指令STC/CLC/CMCSTC/CLC/CMC方向标志设置指令方向标志设置指令STD/CLDSTD/CLD

58、中断允许标志设置和清除指令中断允许标志设置和清除指令STI/CLISTI/CLI 暂停指令暂停指令HLT HLT 和无操作指令和无操作指令NOPNOP暂停指令暂停指令HLTHLT无操作指令无操作指令NOPNOP交权指令和等待指令交权指令和等待指令ESC/WAIT ESC/WAIT 总线封锁指令总线封锁指令LOCK LOCK 683.2.7 3.2.7 条件测试和字节设置指令条件测试和字节设置指令 基于某个标志测试的字节设置指令基于某个标志测试的字节设置指令SETZ/SETESETZ/SETE、SETNZ/SETNESETNZ/SETNE、SETC/SETNCSETC/SETNC、SETS/SE

59、TNSSETS/SETNS、SETO/ SETNOSETO/ SETNO和和SETP/ SETNPSETP/ SETNPSETZSETZ指令和指令和SETESETE指令指令SETNZSETNZ指令和指令和SETNESETNE指令指令SETCSETC指令指令SETNCSETNC指令指令SETSSETS指令指令SETNSSETNS指令指令SETOSETO指令指令SETNOSETNO指令指令SETPSETP指令指令SETNPSETNP指令指令693.2.7 3.2.7 条件测试和字节设置指令条件测试和字节设置指令 基于无符号数比较的字节设置指令基于无符号数比较的字节设置指令SETB/SETNAE/S

60、ETCSETB/SETNAE/SETC、SETNB/SETAE/SETNCSETNB/SETAE/SETNC、SETBE/SETNASETBE/SETNA和和SETNBE/SETA SETNBE/SETA SETB/SETNAE/SETCSETB/SETNAE/SETCSETNB/SETAE/SETNCSETNB/SETAE/SETNCSETBE/SETNASETBE/SETNASETNBE/SETASETNBE/SETA自自学学703.2.7 3.2.7 条件测试和字节设置指令条件测试和字节设置指令基于有符号数比较的字节设置指令基于有符号数比较的字节设置指令SETL/SETNGESETL/S

温馨提示

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

最新文档

评论

0/150

提交评论