汇编语言课件:第3章 80x86的指令系统和寻址方式

上传人:cn****1 文档编号:568806945 上传时间:2024-07-27 格式:PPT 页数:111 大小:561.50KB
返回 下载 相关 举报
汇编语言课件:第3章 80x86的指令系统和寻址方式_第1页
第1页 / 共111页
汇编语言课件:第3章 80x86的指令系统和寻址方式_第2页
第2页 / 共111页
汇编语言课件:第3章 80x86的指令系统和寻址方式_第3页
第3页 / 共111页
汇编语言课件:第3章 80x86的指令系统和寻址方式_第4页
第4页 / 共111页
汇编语言课件:第3章 80x86的指令系统和寻址方式_第5页
第5页 / 共111页
点击查看更多>>
资源描述

《汇编语言课件:第3章 80x86的指令系统和寻址方式》由会员分享,可在线阅读,更多相关《汇编语言课件:第3章 80x86的指令系统和寻址方式(111页珍藏版)》请在金锄头文库上搜索。

1、 指令系统指令系统 一组指令的集合一组指令的集合第第3章章 80x86的指令系统和寻址方式的指令系统和寻址方式 操作码操作码操作数操作数.操作操作数数指令指令 寻址方式寻址方式 与数据有关的寻址方式与数据有关的寻址方式 与转移地址有关的寻址方式与转移地址有关的寻址方式1.8086的寻址方式的寻址方式 与数据有关的寻址方式与数据有关的寻址方式:以以MOV指令为例指令为例立即寻址立即寻址MOVAX,3069H寄存器寻址寄存器寻址MOVAL,BH直接寻址直接寻址MOVAX,2000H寄存器间接寻址寄存器间接寻址MOVAX,BX寄存器相对寻址寄存器相对寻址MOVAX,COUNTSI基址变址寻址基址变址

2、寻址MOVAX,BPDI相对基址变址寻址相对基址变址寻址MOVAX,MASKBXSI存储器寻址存储器寻址(1)立即寻址方式立即寻址方式*操作数在指令中给出操作数在指令中给出 指令格式: MOVAL,5MOVAX,3064HMOVAL,A*只能用于只能用于SRC字段字段MOV40H,AL *SRC和和DST的字长一致的字长一致MOVAH,3064H (2)寄存器寻址方式寄存器寻址方式*操作数在指定的寄存器中操作数在指定的寄存器中 MOVAX,BXMOVAL,BHMOVAX,3064H* 字节寄存器只有字节寄存器只有AHALBHBLCHCLDHDL*SRC和和DST的字长一致的字长一致MOVAH,

3、BX *CS不能用不能用MOV指令改变指令改变MOVCS,AX (3)直接寻址方式直接寻址方式*有效地址有效地址EA由指令直接给出由指令直接给出 例例:MOVAX,2000HEA=2000H,假设假设(DS)=3000H,那么那么PA=32000H* 隐含的段为数据段隐含的段为数据段DS* 可使用段跨越前缀可使用段跨越前缀MOVAX,ES:2000H*操作数地址可由变量(符号地址)表示操作数地址可由变量(符号地址)表示,但要注意但要注意VALUEDB10变量的属性变量的属性MOVAH,VALUE MOVAX,VALUE MOVAX,WORDPTRVALUE 5030 32000AHAL3050

4、(AX)=3050H寄存器间接寻址寄存器间接寻址*EA在基址寄存器在基址寄存器(BX/BP)或变址寄存器或变址寄存器(SI/DI)中中 MOVAX,BXPA=16d (DS)+(BX)MOVAX,ES:BXPA=16d (ES)+(BX)MOVAX,BPPA=16d (SS)+(BP)*不允许使用不允许使用AX、CX、DX存放存放EAMOVAX,CX *SRC和和DST的字长一致的字长一致MOVDL,BX;BX指示一个字节单元指示一个字节单元MOVDX,BX;BX指示一个字单元指示一个字单元*适于数组、字符串、表格的处理适于数组、字符串、表格的处理 有效地址有效地址=(BX)(BP)8位位(S

5、I)16位位(DI)+位移量位移量(5)寄存器相对寻址方式寄存器相对寻址方式*指令格式指令格式: MOV AX, COUNTSI MOV AX, COUNTSI 或或 MOV AX, COUNT+SIMOV AX, COUNT+SI假设假设(DS)=3000H, (SI)=2000H, COUNT=3000H(DS)=3000H, (SI)=2000H, COUNT=3000H,则则:PA = 35000HPA = 35000H假设假设(35000H)=1234H, (35000H)=1234H, 那那么么 (AX)=1234H(AX)=1234H*适于数组、字符串、表格的处理适于数组、字符串

6、、表格的处理(6)基址变址寻址方式基址变址寻址方式*指令格式:指令格式: MOV AX, BX DIMOV AX, BX DI MOV AX, BX+DI MOV AX, BX+DI MOV AX, ES:BX SI MOV AX, ES:BX SI*适于数组、字符串、表格的处理适于数组、字符串、表格的处理*必须是一个基址寄存器和一个变址寄存器的组合必须是一个基址寄存器和一个变址寄存器的组合MOVAX,BXBP MOVAX,SIDI 有效地址有效地址=(BX)(SI)(BP)(DI)+(7)相对基址变址寻址方式相对基址变址寻址方式 MOVAX,MASKBXSI或或MOVAX,MASKBX+SI

7、或或MOVAX,MASK+BX+SI 有效地址有效地址=(BX)(SI)8位位(BP)(DI)16位位+位移量位移量访问存储器的方式访问存储器的方式 默认的默认的段寄存器段寄存器可可跨越的跨越的段寄存器段寄存器偏移地址偏移地址取取指令指令 CS 无 IP堆栈操作堆栈操作 SS 无 SP一般数据访问一般数据访问 DS CS ES SS 有效地址EABP作为基址的寻址作为基址的寻址 SS CS DS ES BP串操作的源操作数串操作的源操作数 DS CS ES SS SI串操作的目的操作数串操作的目的操作数 ES 无 DI段段寄寄存存器器的的使使用用规规定定例例:编写一段显示字符串编写一段显示字符

8、串STRING的程序的程序DATA SEGMENTDATA SEGMENT STRING DB HAPPY NEW YEAR! , 0DH , 0AH , $ STRING DB HAPPY NEW YEAR! , 0DH , 0AH , $ COUNT DW 17 COUNT DW 17 DATA ENDS DATA ENDS (1)直接寻址直接寻址 movmov dl, string dl, string movmov ah, 2 ah, 2 intint 21h 21h ; ; 显示字符显示字符 HH movmov dl, string+1 dl, string+1 movmov ah,

9、 2 ah, 2 intint 21h 21h ; ; 显示字符显示字符 AA : : : :(2)寄存器间接寻址寄存器间接寻址movmov cxcx, count , count ; ; movmov cxcx, 17, 17 movmov bxbx, offset string , offset string ; string; string的偏址的偏址 bxbxNext : Next : movmov dl, dl, bxbx movmov ah, 2 ah, 2 intint 21h 21h ; ; 显示一个字符显示一个字符 inc inc bxbx loop next loop ne

10、xt ; ; 循环指令循环指令(3)寄存器相对寻址寄存器相对寻址movmov cxcx, count , count ; ; movmov cxcx, 17, 17 movmov si si, 0 , 0 Next : Next : movmov dl, dl, stringsistringsi ; ; movmov dl, dl, string+sistring+si movmov ah, 2 ah, 2 intint 21h 21h ; ; 显示一个字符显示一个字符 inc inc si si loop next loop next ; ; 循环指令循环指令(4)基址变址寻址基址变址寻址m

11、ovmov cxcx, count , count ; ; movmov cxcx, 17, 17 movmov bxbx, offset string , offset string ; string; string的偏址的偏址 bxbx movmov si si, 0, 0Next : Next : movmov dl, dl, bxbx si si ; ; movmov dl, dl, bx+sibx+si movmov ah, 2 ah, 2 intint 21h 21h ; ; 显示一个字符显示一个字符 inc inc si si loop next loop next ; ; 循环

12、指令循环指令(5)DOS显示字符串功能显示字符串功能movmov dxdx, offset string , offset string ; string; string的偏址的偏址 dxdx ; lea ; lea dxdx, string, string movmov ah, 9 ah, 9 intint 21h 21h ; ; 显示一串字符显示一串字符80x86新增的寻址方式新增的寻址方式EA= =(基址寄存器基址寄存器)+(变址寄存器变址寄存器) 比例因子比例因子+位移位移量量(1)比例变址寻址方式比例变址寻址方式例:例:MOVEAX,COUNTESI 4(2)基址比例变址寻址方式基址

13、比例变址寻址方式 例:例:MOVECX,EAXEDI 4 (3)相对基址比例变址寻址方式相对基址比例变址寻址方式例:例:MOVEAX,TABLEEBPEDI 4 16 16位和位和3232位寻址的差异位寻址的差异地址成分地址成分 1616位寻址位寻址 3232位寻址位寻址基址寄存器基址寄存器 BXBX、BP BP 任何任何3232位通用寄存器位通用寄存器变址寄存器变址寄存器 SISI、DI DI 除除ESPESP外的任何外的任何3232位通用寄存器位通用寄存器比例因子比例因子 1 11 1、2 2、4 4、8 8 与转移地址有关的寻址方式:与转移地址有关的寻址方式: 段内寻址段内寻址 段内直接

14、寻址段内直接寻址 JMPNEARPTRNEXT 段内间接寻址段内间接寻址 JMPTABLEBX段间寻址段间寻址段间直接寻址段间直接寻址 JMPFARPTRNEXT 段间间接寻址段间间接寻址 JMPDWORDPTRBX用来确定转移指令及转子指令的转向地址用来确定转移指令及转子指令的转向地址。(1)段内直接寻址段内直接寻址转向的有效地址转向的有效地址=当前当前(IP)+位移量位移量(8bit/16bit)例例: JMPNEAR PTRNEXT近转移近转移-32768+32767JMPSHORTNEXT短转移短转移-128+127(2)段内间接寻址段内间接寻址 转向的有效地址是一个寄存器或存储单元的

15、内容。转向的有效地址是一个寄存器或存储单元的内容。(可用除立即数以外的任何一种数据寻址方式得到可用除立即数以外的任何一种数据寻址方式得到)例:例:TABLE = 20A2H (BX) = 1256H (SI) = 528EHTABLE = 20A2H (BX) = 1256H (SI) = 528EH (DS) = 2000H (232F8H) = 3280H (264E4H) = (DS) = 2000H (232F8H) = 3280H (264E4H) = 2450H2450H JMPBX;(IP)=1256HJMPTABLEBXJMPWORD PTRTABLEBX;(IP)=3280H

16、JMPBXSIJMPWORD PTRBXSI;(IP)=2450Hcode1 segmentcode1 segment jmpjmp far far ptrptr next next code1 endscode1 endscode2 segment code2 segment next: . next: . code2 endscode2 ends(3)段间直接寻址段间直接寻址 用指令中提供的转向段地址和偏移地址取代用指令中提供的转向段地址和偏移地址取代CS和和IP 例例:(4)段间间接寻址段间间接寻址 用存储器中的两个相继字的内容取代用存储器中的两个相继字的内容取代CS和和IP(存储单元的

17、地址可用存储器寻址方式得到存储单元的地址可用存储器寻址方式得到) 例:例:JMPDWORD PTRINTERS+BXPA=(DS)PA=(DS)2 24 4 + (BX) + INTERS+ (BX) + INTERS (PA+1, PA)IP (PA+1, PA)IP (PA+3, PA+2) CS (PA+3, PA+2) CS第第3章章练习练习Page 107 3.1 3.3 3.5 3.7 3.11 3.13 数据传送指令数据传送指令 算术指令算术指令 逻辑指令逻辑指令 串处理指令串处理指令 控制转移指令控制转移指令 处理机控制与杂项操作指令处理机控制与杂项操作指令2. 8086的指令

18、系统的指令系统重点关注:重点关注:指令的汇编格式指令的汇编格式指令的基本功能指令的基本功能指令支持的寻址方式指令支持的寻址方式指令的执行对标志位的影响指令的执行对标志位的影响指令的特殊要求指令的特殊要求数据传送指令数据传送指令: 通用数据传送指令通用数据传送指令MOV、PUSH、POP、XCHG 累加器专用传送指令累加器专用传送指令IN、OUT、XLAT 地址传送指令地址传送指令LEA、LDS、LES 标志寄存器传送指令标志寄存器传送指令LAHF、SAHF、PUSHF、POPF 类型转换类型转换指令指令CBW、CWD传送指令:传送指令:MOVDST,SRC执行操作:执行操作:(DST)(SRC

19、)注意注意:*DST、SRC不能同时为段寄存器不能同时为段寄存器MOVDS,ES *立即数不能直接送段寄存器立即数不能直接送段寄存器MOVDS,2000H *DST不能是立即数和不能是立即数和CS*DST、SRC不能同时为存储器寻址不能同时为存储器寻址*不影响标志位不影响标志位 通用数据传送指令通用数据传送指令MOVAX,DSEGMOVDS,AX 进栈指令:进栈指令:PUSHSRC执行操作:执行操作:(SP)(SP)2(SP)+1,(SP)(SRC)出栈指令:出栈指令:POPDST执行操作:执行操作:(DST)(SP)+1,(SP)(SP)(SP)+2堆栈:堆栈:先进后出先进后出的存储区,段地

20、址存放在的存储区,段地址存放在SSSS中,中, SP在任何时候都指向栈顶,进出栈后自动修改在任何时候都指向栈顶,进出栈后自动修改SPSP。注意注意:*堆栈操作必须以字为单位。堆栈操作必须以字为单位。*不影响标志位不影响标志位*不能用立即寻址方式不能用立即寻址方式PUSH1234H *DST不能是不能是CSPOPCS 例:假设例:假设(AX)=2107H,执行执行PUSHAX* * * * *(SP)PUSHAX执行前执行前(SP)* * * * *07H07H21H21H低低地址地址高地址高地址PUSHAX执行后执行后进栈方向进栈方向(SP)* * * * *07H07H21H21HPOPBX

21、执行执行前前(SP)* * * * *07H07H21H21H低低地址地址高地址高地址POPBX执行后执行后(BX)=2107H例:例:POPBX出栈方向出栈方向例:例:PUSH DSPUSH DS SUB AX, AX SUB AX, AX PUSH AX PUSH AX RET RET例:例:PUSH AXPUSH AX PUSH BX PUSH BX PUSH CX PUSH CX ;其间用到其间用到AX、BX、CX POP CX POP CX ; ; 后进先出后进先出 POP BXPOP BX POP AX POP AX 交换指令:交换指令:XCHGOPR1,OPR2执行操作:执行操作

22、:(OPR1)(OPR2)注意注意:*不影响标志位不影响标志位*不允许使用段寄存器不允许使用段寄存器例:例:XCHGBX,BP+SIXCHGAL,BH 累加器专用传送指令累加器专用传送指令(只限使用(只限使用AX或或AL) 输入指令输入指令IN(I/OCPU) 长格式:长格式:INAL,PORT(字节)字节)INAX,PORT(字)字)执行操作:执行操作:(AL)(PORT)(字节)字节)(AX)(PORT+1,PORT)(字)字)短格式:短格式:INAL,DX(字节)字节)INAX,DX(字)字)执行操作:执行操作:(AL)(DX)(字节)字节)(AX)(DX)+1,(DX)(字)字) 输出

23、指令输出指令OUT(CPUI/O)长格式:长格式:OUTPORT,AL(字节)字节)OUTPORT,AX(字)字)执行操作:执行操作:(PORT)(AL)(字节)字节)(PORT+1,PORT)(AX)(字)字)短格式:短格式:OUTDX,AL(字节)字节)OUTDX,AX(字)字)执行操作:执行操作:(DX)(AL)(字节)字节)(DX)+1,(DX)(AX)(字)字)注意注意:*不影响标志位不影响标志位*前前256个端口号个端口号00HFFH可直接在指令中指定(长格式)可直接在指令中指定(长格式)*如果如果端口号端口号 256,端口号端口号DX(短格式)短格式)例:例: IN AX, 28

24、H IN AX, 28H MOV DATA_WORD, AX MOV DATA_WORD, AX例:例: MOV DX, 3FCHMOV DX, 3FCH IN AX, DX IN AX, DX例:例: OUT 5, ALOUT 5, AL例:测试某状态寄存器(端口号例:测试某状态寄存器(端口号27H27H)的第的第2 2位是否为位是否为1 1 IN AL, 27H IN AL, 27H TEST AL, 00000100B TEST AL, 00000100B JNZ ERROR JNZ ERROR ;若第2位为1,转ERROR处理例:例:Sound程序程序 movmov dxdx, 100

25、, 100 in al, 61h in al, 61h and al,11111100b and al,11111100bsoundsound: xorxor al, 2 ; al, 2 ; 1 0 11 0 1 out 61h, al out 61h, al ;ON OFF ONON OFF ON movmov cxcx, 140h , 140h ;脉宽脉宽Wait1Wait1: loop wait1loop wait1 decdec dxdx jnejne sound sound设备控制寄存器设备控制寄存器端口端口61H1/00控制其它外部设备控制其它外部设备与与门门放大器放大器2号定时器

26、门控号定时器门控1 0(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H换码指令:换码指令:XLAT或或XLATOPR执行操作:执行操作:(AL)(BX)+(AL)例:例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE指令执行后指令执行后(AL)=33H注意注意:*不影响标志位不影响标志位*字节表格字节表格(长度不超过长度不超过256)首地址首地址(BX)*需转换的代码位移量需转换的代码位移量(AL) 地址传送指令地址传送指令 有效地址送寄存器指令:有效地址送寄存器指令:LEAREG,SR

27、C执行操作:执行操作:(REG)SRC指针送寄存器和指针送寄存器和DS指令:指令:LDSREG,SRC执行操作:执行操作:(REG)(SRC)(DS)(SRC+2)相继二字相继二字寄存器寄存器、DS 指针送寄存器和指针送寄存器和ES指令:指令:LESREG,SRC执行操作:执行操作:(REG)(SRC)(ES)(SRC+2)相继二字相继二字寄存器寄存器、ES例:例:LEABX,BX+SI+0F62H LDSSI,10H LESDI,BX40H00H00H30HTABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEA

28、BX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H;(DS)=3000HLESBX,TABLE;(BX)=0040H;(ES)=3000H注意注意:*不影响标志位不影响标志位*REG不能是不能是段寄存器段寄存器*SRC必须为存储器寻址方式必须为存储器寻址方式 标志寄存器传送指令标志寄存器传送指令标志送标志送AH指令:指令:LAHF执行操作:执行操作:(AH)(FLAGS的低字节的低字节)AH送标志寄存器指令:送标志寄存器指令:SAHF执行操作:执行操作:(FLAGS的低字节的低字节)(AH)标志进栈指令:标志进栈指令:PUSHF执行操作:执行操作:(SP)(SP

29、)-2(SP)+1,(SP)(FLAGS)标志出栈标志出栈指令:指令:POPF执行操作:执行操作:(FLAGS)(SP)+1,(SP)(SP)(SP)+2*影响标志位影响标志位 类型转换指令类型转换指令CBWALAX执行操作:执行操作:若若(AL)的最高有效位为的最高有效位为0,则,则(AH)=00H若若(AL)的最高有效位为的最高有效位为1,则,则(AH)=FFHCWDAX(DX,AX)执行操作:若执行操作:若(AX)的最高有效位为的最高有效位为0,则,则(DX)=0000H若若(AX)的最高有效位为的最高有效位为1,则,则(DX)=FFFFH例:例:(AX)=0BA45HCBW;(AX)=

30、0045HCWD;(DX)=0FFFFH(AX)=0BA45H注意注意:*无操作数指令无操作数指令*隐含对隐含对AL或或AX进行符号扩展进行符号扩展*不影响不影响条件标志位条件标志位算术指令:算术指令: 加法加法指令指令ADD、ADC、INC 减法减法指令指令SUB、SBB、DEC、NEG、CMP 乘法乘法指令指令MUL、IMUL 除法除法指令指令DIV、IDIV 十进制调整十进制调整指令指令DAA、DAS、AAA、AAS、AAM、AAD 加法指令加法指令 加法指令:加法指令:ADDDST,SRC执行操作:执行操作:(DST)(SRC)+(DST)带进位加法指令:带进位加法指令:ADCDST,

31、SRC执行操作:执行操作:(DST)(SRC)+(DST)+CF加加1指令:指令:INCOPR执行操作:执行操作:(OPR)(OPR)+1注意注意:*除除INC指令指令不影响不影响CF标志外,均对条件标志位有影响。标志外,均对条件标志位有影响。加法指令对加法指令对条件标志位条件标志位的影响的影响CF位表示位表示无符号数无符号数相加的溢出。相加的溢出。OF位表示位表示带符号数带符号数相加的溢出。相加的溢出。1结果为负结果为负0否则否则SF=1结果为结果为00否则否则ZF=1和的最高有效位和的最高有效位有有向高位的进位向高位的进位0否则否则CF=1两个操作数符号相同,而结果符号与之相反两个操作数符

32、号相同,而结果符号与之相反0否则否则OF=举例举例:n=8bit带符号数带符号数(-128127),无符号数无符号数(0255)00000100+0000101100001111带:带:(+4)+(+11)=+15OF=0无:无:4+11=15CF=0带符号数和无符号数都不溢出带符号数和无符号数都不溢出00001001+0111110010000101带带:(+9)+(+124)=-123OF=1无无:9+124=133CF=0带符号数溢出带符号数溢出无符号数溢出无符号数溢出00000111+11111011100000010带:带:(+7)+(-5)=+2OF=0无:无:7+251=2CF=

33、1带符号数和无符号数都溢出带符号数和无符号数都溢出10000111+11110101101111100带:带:(-121)+(-11)=+124OF=1无:无:135+245=124CF=1例:双精度数的加法例:双精度数的加法 (DX)=0002H(AX)=0F365H(BX)=0005H(CX)=8100H指令序列指令序列ADDAX,CX;(1)ADCDX,BX;(2)(1)执行后,执行后,(AX)=7465HCF=1OF=1SF=0ZF=0(2)执行后,执行后,(DX)=0008HCF=0OF=0SF=0ZF=0 减法指令减法指令减法指令:减法指令:SUBDST,SRC执行操作:执行操作:

34、(DST)(DST)-(SRC)带借位减法指令:带借位减法指令:SBBDST,SRC执行操作:执行操作:(DST)(DST)-(SRC)-CF减减1指令:指令:DECOPR执行操作:执行操作:(OPR)(OPR)-1求补指令:求补指令:NEGOPR执行操作:执行操作:(OPR)-(OPR)比较指令:比较指令:CMPOPR1,OPR2执行操作:执行操作:(OPR1)-(OPR2)注意注意:*除除DEC指令指令不影响不影响CF标志外,均对条标志外,均对条件标志位有影响。件标志位有影响。减法指令对条件标志位(减法指令对条件标志位(CF/OF/ZF/SF)的影响:的影响:CF位表示位表示无符号数无符号

35、数减法的溢出。减法的溢出。OF位表示位表示带符号数带符号数减法的溢出。减法的溢出。1被减数的最高有效位被减数的最高有效位有有向高位的借位向高位的借位0否则否则CF=1两个操作数符号相反,而结果的符号与减数相同两个操作数符号相反,而结果的符号与减数相同0否则否则OF=1减法转换为加法运算时减法转换为加法运算时无无进位进位0否则否则CF=或或NEG指令对指令对CF/OF的影响的影响0操作数为操作数为01否则否则CF=1操作数为操作数为-128(字节运算)(字节运算)或或操作数为操作数为-32768(字运算)(字运算)0否则否则OF=00011110+00011111NEG指令对指令对CF/OF的影

36、响的影响0操作数为操作数为01否则否则CF=1操作数为操作数为-128(字节运算)(字节运算)或或操作数为操作数为-32768(字运算)(字运算)0否则否则OF=00001111+00011000010000111+00011000例:例:x、y、z均为双精度数,分别存放在地址为均为双精度数,分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,用指令序列实现的存储单元中,用指令序列实现wx+y+24-z,并用并用W,W+2单元存放单元存放wMOV AX, XMOV AX, XMOV DX, X+2MOV DX, X+2ADD AX, YADD AX, YADC DX, Y+2 ;

37、x+yADC DX, Y+2 ; x+yADD AX, 24ADD AX, 24ADC DX, 0 ; x+y+24ADC DX, 0 ; x+y+24SUB AX, ZSUB AX, ZSBB DX, Z+2 ; x+y+24-zSBB DX, Z+2 ; x+y+24-zMOV W, AXMOV W, AXMOV W+2, DX ; MOV W+2, DX ; 结果存入结果存入W, W+2W, W+2单元单元 乘法指令乘法指令 无符号数乘法指令:无符号数乘法指令:MULSRC带符号数乘法指令:带符号数乘法指令:IMULSRC执行操作:执行操作:字节操作数字节操作数(AX)(AL)*(SRC

38、)字操作数字操作数(DX,AX)(AX)*(SRC)注意注意:*AL(AX)为隐含的乘数寄存器。为隐含的乘数寄存器。*AX(DX,AX)为隐含的乘积寄存器。为隐含的乘积寄存器。*SRC不能为立即数。不能为立即数。*除除CF和和OF外,对条件标志位无定义外,对条件标志位无定义。乘法指令对乘法指令对CF/OF的影响:的影响:例:例:(AX)=16A5H,(BX)=0611H(1)IMULBL;(AX)(AL)*(BL) ;A5*115B*11=060BF9F5;(AX)=0F9F5HCF=OF=1(2)MULBX;(DX,AX)(AX)*(BX) ;16A5*0611=00895EF5;(DX)=

39、0089H(AX)=5EF5HCF=OF=100乘积的高一半为零乘积的高一半为零11否则否则MUL指令指令:CF,OF=00乘积的高一半是低一半的符号扩展乘积的高一半是低一半的符号扩展11否则否则IMUL指令指令:CF,OF=1010 01010101 1011 除法指令除法指令 无符号数除法指令:无符号数除法指令:DIVSRC带符号数除法指令:带符号数除法指令:IDIVSRC执行操作:执行操作:字节操作字节操作(AL)(AX)/(SRC)的商的商(AH)(AX)/(SRC)的余数的余数字操作字操作(AX)(DX,AX)/(SRC)的商的商(DX)(DX,AX)/(SRC)的余数的余数注意注意

40、:*AX(DX,AX)为隐含的被除数寄存器。为隐含的被除数寄存器。*AL(AX)为隐含的商寄存器。为隐含的商寄存器。*AH(DX)为隐含的余数寄存器。为隐含的余数寄存器。*SRC不能为立即数。不能为立即数。*对所有条件标志位均无定义。对所有条件标志位均无定义。如何判别结果有效?如何判别结果有效?例:例:x,y,z,v均为均为16位带符号数,计算位带符号数,计算(v-(x*y+z540)/xMOV AX, X MOV AX, X IMUL Y ; x*y IMUL Y ; x*y (DX,AXDX,AX)MOV CX, AXMOV CX, AXMOV BX, DXMOV BX, DXMOV AX

41、, ZMOV AX, ZCWD CWD ;Z Z (DXDX,AXAX)ADD CX, AXADD CX, AXADC BX, DX ; x*y+z ADC BX, DX ; x*y+z (BXBX,CXCX)SUB CX, 540 SUB CX, 540 SBB BX, 0 ; x*y+z-540SBB BX, 0 ; x*y+z-540MOV AX, VMOV AX, VCWD CWD ;V V (DXDX,AXAX)SUB AX, CXSUB AX, CXSBB DX, BX ; v-(x*y+z-540)SBB DX, BX ; v-(x*y+z-540)IDIV X ; (v-(x*

42、y+z-540)/xIDIV X ; (v-(x*y+z-540)/x(AXAX) 余数余数 (DXDX) 十进制调整指令十进制调整指令BCD码:用二进制编码的十进制数,码:用二进制编码的十进制数,又称又称二二-十进制数十进制数压缩的压缩的BCD码:用码:用4位二进制数表示位二进制数表示1位十进制数位十进制数例:例:(59)10(01011001)BCD非压缩的非压缩的BCD码:用码:用8位二进制数表示位二进制数表示1位十进制数位十进制数例:例:(59)10(0000010100001001)BCD数字的数字的ASCII码是一种码是一种非压缩的非压缩的BCD码码DIGITASCIIBCD030

43、H00110000131H00110001232H00110010939H00111001例:写出例:写出(3590)10的压缩的压缩BCD码和非压缩码和非压缩BCD码,并分码,并分别别把它们存入数据区把它们存入数据区PAKED和和UNPAK压缩压缩BCD:(3590)10(0011010110010000)BCD非压缩非压缩BCD:(3590)10(00000011000001010000100100000000)BCDPAKED90H 35HUNPAK00H 09H 05H 03H问题的提出:问题的提出:十进制调整指令十进制调整指令19压缩压缩BCD:000110012700100001+

44、110+08+00001000(00100111)BCDAF=1(1)压缩的)压缩的BCD码调整指令码调整指令DAA加法的十进制调整指令加法的十进制调整指令DAS减法的十进制调整指令减法的十进制调整指令(2)非压缩的)非压缩的BCD码调整指令码调整指令AAA加法的加法的ASCII码调整指令码调整指令AAS减法的减法的ASCII码调整指令码调整指令AAM乘法的乘法的ASCII码调整指令码调整指令AAD除法的除法的ASCII码调整指令码调整指令压缩压缩BCD运算举例:运算举例:(1)MOVAL,BCD1;BCD1=34HADDAL,BCD2;BCD2=59H,(AL)=8DHDAA;8DH+06H

45、=93HMOVBCD3,AL;BCD3=93H(2)MOVAL,BCD1;BCD1=34HSUBAL,BCD2;BCD2=59H,(AL)=0DBHDAS;0DBH60H06H=75HMOVBCD3,AL;BCD3=75=-25(10n补码)补码)非压缩非压缩BCD运算举例:运算举例:(1)MULBL;(AX)=(AL)(BL)=0809AAM;(AL)/0AH=48H/0AH0702(2)AAD;(AX)(AH)0AH+(AL)=48HDIVBL;(AL)=(AX)/(BL)=48H/4=12HAAM;(AL)/0AH=12H/0AH=0108第第3章作业章作业Page 109 3.14 3

46、.17 逻辑指令:逻辑指令: 逻辑运算逻辑运算指令指令AND、OR、NOT、XOR、TEST 移位移位指令指令SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR逻辑非指令:逻辑非指令:NOTOPR*OPR不能为立即数不能为立即数执行操作:执行操作:(OPR) (OPR)*不影响标志位不影响标志位逻辑与指令:逻辑与指令:ANDDST,SRC执行操作:执行操作:(DST)(DST) (SRC)逻辑或指令:逻辑或指令:ORDST,SRC执行操作:执行操作:(DST)(DST) (SRC)异或指令:异或指令:XORDST,SRC执行操作:执行操作:(DST)(DST) (SRC)测试指令:

47、测试指令:TESTOPR1,OPR2执行操作:执行操作:(OPR1) (OPR2)CFOFSFZFPFAF00*无定义无定义 根据运算结果设置根据运算结果设置 逻辑运算指令逻辑运算指令例:屏蔽例:屏蔽AL的第的第0、1两位两位ANDAL,0FCH例:置例:置AL的第的第5位为位为1ORAL,20H例:使例:使AL的第的第0、1位变反位变反XORAL,3例:测试某些位是例:测试某些位是0是是1TESTAL,1JZEVEN*OR00100000*1*01XOR00000011*10*AND11111100*00*AND000000010000000*逻辑左移逻辑左移SHLOPR,CNT逻辑右移逻辑

48、右移SHROPR,CNT算术左移算术左移SALOPR,CNT(同逻辑左移)同逻辑左移)算术右移算术右移SAROPR,CNTCF00CFCF 移位指令移位指令循环左移循环左移ROLOPR,CNT循环右移循环右移ROROPR,CNT带进位循环左移带进位循环左移RCLOPR,CNT带进位循环右移带进位循环右移RCROPR,CNTCFCFCFCF注意注意:*OPR可用除立即数以外的任何寻址方式可用除立即数以外的任何寻址方式*CNT=1,SHLOPR,1CNT1,MOVCL,CNTSHLOPR,CL;以以SHL为例为例*条件标志位:条件标志位:CF=移入的数值移入的数值1CNT=1时,最高有效位的值发生

49、变化时,最高有效位的值发生变化0CNT=1时,最高有效位的值不变时,最高有效位的值不变移位指令:移位指令:SF、ZF、PF根据移位结果设置,根据移位结果设置,AF无定义无定义循环移位指令:循环移位指令:不影响不影响SF、ZF、PF、AFOF=例:例:(AX)=0012H,(BX)=0034H,把它们装配成把它们装配成(AX)=1234H例:例:(BX)=84F0H(1)(BX)为无符号数,求为无符号数,求(BX)/2SHR BX, 1SHR BX, 1 ; (BX) = 4278H; (BX) = 4278H(2)(BX)为带符号数,求为带符号数,求(BX)2 SAL BX, 1SAL BX,

50、 1 ; (BX) = 09E0H, OF=1; (BX) = 09E0H, OF=1(3)(BX)为带符号数,求为带符号数,求(BX)/4 MOV CL, 2 MOV CL, 2 SAR BX, CL ; (BX) = 0E13CH SAR BX, CL ; (BX) = 0E13CHMOV CL, 8MOV CL, 8ROL AX, CLROL AX, CLADD AX, BXADD AX, BXMOV CH, 4 ; MOV CH, 4 ; 循环次数循环次数MOV CL, 4 ; MOV CL, 4 ; 移位移位次数次数NEXT: NEXT: ROL BX, CLROL BX, CLMO

51、V AX, BXMOV AX, BXAND AX, 0FHAND AX, 0FHPUSH AXPUSH AXDEC CHDEC CHJNZ NEXTJNZ NEXT00080004000F0000(SP)(3)(BX)=84F0H(BX)=84F0H,把把(BX)(BX)中的中的 16 16 位数每位数每 4 4 位压入堆栈位压入堆栈串处理指令:串处理指令: 设置方向标志设置方向标志指令指令CLD、STD 串处理串处理指令指令 串重复前缀串重复前缀MOVSB/MOVSWREPSTOSB/STOSWREPE/REPZLODSB/LODSWREPNE/REPNZCMPSB/CMPSWSCASB/S

52、CASW与与REP配合工作的配合工作的MOVS/STOS/LODSREP执行操作:执行操作:(1)如如(CX)=0则退出则退出REP,否则转否则转(2)(2)(CX)(CX)-1(3)执行执行MOVS/STOS/LODS(4)重复重复(1)(3)MOVS串传送指令:串传送指令:MOVSDST,SRCMOVSB(字节)字节)MOVSW(字)字)例:例:MOVSES:BYTEPTRDI,DS:SI执行操作:执行操作:(1)(DI) (SI)(2)字节操作:字节操作:(SI)(SI)1,(DI)(DI)1字操作:字操作:(SI)(SI)2,(DI)(DI)2方向标志方向标志DF=0时用时用+,DF=

53、1时用时用-。REPMOVS:将数据段中的整串数据传送到附加段中。将数据段中的整串数据传送到附加段中。源串(数据段)源串(数据段)目的串(附加段)目的串(附加段)执行执行REPMOVS之前,应先做好:之前,应先做好:(1)源串首地址(末地址)源串首地址(末地址)SI(2)目的串首地址(末地址)目的串首地址(末地址)DI(3)串长度串长度CX(4)建立方向标志建立方向标志(CLD使使DF=0,STD使使DF=1)(SI)(DI)DF=0DF=1数据段数据段 附加段附加段(SI)(DI)data segmentdata segment mess1 db personal_computer mess

54、1 db personal_computerdata endsdata endsextra segmentextra segment mess2 db 17 dup (?) mess2 db 17 dup (?)extra endsextra endscode segmentcode segment movmov ax, data ax, data movmovds,axds,ax movmovax, extraax, extra movmov eses, ax, ax lea lea sisi, mess1, mess1 lea lea didi, mess2, mess2 movmov c

55、xcx, 17, 17 cldcld rep rep movsbmovsb code endscode endslea lea sisi, mess1+16, mess1+16lea lea didi, mess2+16, mess2+16movmov cxcx, 17, 17stdstdrep rep movsbmovsbdata segmentdata segment mess1 db personal_computer mess1 db personal_computermess2db17dup(?)data endsdata endscode segmentcode segment m

56、ovmov ax, data ax, data movmovdsds, a, ax movmov eses, ax, ax lea lea sisi, mess1, mess1 lea lea didi, mess2, mess2 movmov cxcx, 17, 17 cldcld rep rep movsbmovsb code endscode endsSTOS存入串指令:存入串指令:STOSDSTSTOSB(字节)字节)STOSW(字)字)执行操作:执行操作:字节操作:字节操作:(DI)(AL),(DI)(DI)1字操作:字操作:(DI)(AX),(DI)(DI)2例:把例:把附加段附加

57、段中的中的10个字节缓冲区置为个字节缓冲区置为20Hlea lea didi, mess2, mess2movmov al, 20H al, 20Hmovmov cxcx, 10, 10cldcldrep rep stosbstosblea lea didi, mess2, mess2movmov ax, 2020H ax, 2020Hmovmov cxcx, 5, 5cldcldrep rep stoswstoswLODS从串取指令:从串取指令:LODSSRCLODSB(字节)字节)LODSW(字)字)执行操作:执行操作:字字节节操操作作:(AL)(SI),(SI)(SI)1字字操操作作:(

58、AX)(SI),(SI)(SI)2注意注意:*LODS指令一般不与指令一般不与REP联用联用*源串一般在数据段中(允许使用段跨越前缀来修改),源串一般在数据段中(允许使用段跨越前缀来修改),目的串必须在附加段中目的串必须在附加段中*不影响条件标志位不影响条件标志位与与REPE/REPZ(REPNE/REPNZ)配合工作的配合工作的CMPS和和SCASREPE/REPZREPNE/REPNZ执行操作:执行操作:(1)如如(CX)=0或或ZF=0(ZF=1)则退出串操作,则退出串操作,否则转否则转(2)(2)(CX)(CX)-1(3)执行执行CMPS/SCAS(4)重复重复(1)(3)CMPS串比

59、较指令:串比较指令: CMPSSRC,DSTCMPSB(字节)字节)CMPSW(字)字)执行操作:执行操作:(1)(SI)-(DI)根据比较结果置条件标志位:相等根据比较结果置条件标志位:相等ZF=1不等不等ZF=0(2)字字 节节 操操 作作 : (SI)(SI)1,(DI)(DI)1字字 操操 作作 : (SI)(SI)2,(DI)(DI)2SCAS串扫描指令:串扫描指令:SCASDSTSCASB(字节)字节)SCASW(字)字)执行操作:执行操作:字节操作:字节操作:(AL)-(DI),(DI)(DI)1字操作:字操作:(AX)-(DI),(DI)(DI)2例:从一个字符串中查找一个指定

60、的字符例:从一个字符串中查找一个指定的字符 mess db COMPUTERmess db COMPUTER lea lea didi, mess, mess movmov al, T al, T movmov cxcx, 8, 8 cldcld repnerepne scasbscasbC CO OM MP PU UT TE ER R(didi)(didi):相匹配字符的下一个地址相匹配字符的下一个地址(cxcx):剩下还未比较的字符个数剩下还未比较的字符个数(didi)(CX)=2例:比较两个字符串,找出它们不相匹配的位置例:比较两个字符串,找出它们不相匹配的位置例:反向传送例:反向传送l

61、ea lea sisi, mess1, mess1lea lea didi, mess2, mess2movmov cxcx, 8, 8cldcldreperepe cmpsbcmpsblea lea sisi, mess1+7, mess1+7lea lea didi, mess2+7, mess2+7movmov cxcx, 8, 8STdSTdrep rep movsbmovsb控制转移指令:控制转移指令: 无条件转移无条件转移指令指令JMP 条件转移条件转移指令指令JZ/JNZ、JE/JNE、JS/JNS、JO/JNO、JP/JNP、JB/JNB、JL/JNL、JBE/JNBE、JLE

62、/JNLE、JCXZ 循环循环指令指令LOOP、LOOPZ/LOOPE、LOOPNZ/LOOPNE 子程序调用和返回子程序调用和返回指令指令CALL、RET 中断与中断返回中断与中断返回指令指令INT、INTO、IRET无条件转移指令:无条件转移指令:段内直接短转移:段内直接短转移:JMPSHORTOPR执行操作:执行操作:(IP) (IP)+8位位移量位位移量段内直接近转移:段内直接近转移:JMPNEARPTROPR执行操作:执行操作:(IP) (IP)+16位位移量位位移量段内间接转移:段内间接转移:JMPWORDPTROPR执行操作:执行操作:(IP) (EA)段间直接远转移:段间直接远

63、转移:JMPFARPTROPR执行操作:执行操作:(IP) OPR的段内偏移地址的段内偏移地址(CS) OPR所在段的段地址所在段的段地址段间间接转移:段间间接转移:JMPDWORDPTROPR执行操作:执行操作:(IP) (EA)(CS) (EA+2)条件转移指令:条件转移指令:注意:只能使用段内直接寻址的注意:只能使用段内直接寻址的8位位移量位位移量(1)根据单个条件标志的设置情况转移根据单个条件标志的设置情况转移格式格式 测试条件测试条件JZ(JE)OPRZF=1JNZ(JNE)OPRZF=0JSOPRSF=1JNSOPRSF=0JOOPROF=1JNOOPROF=0JPOPRPF=1J

64、NPOPRPF=0JCOPRCF=1JNCOPRCF=0(2)比较两个无符号数,并根据比较结果转移比较两个无符号数,并根据比较结果转移* 格式格式 测试条件测试条件JB(JNAE,JC)OPRCF=1JNB(JAE,JNC)OPRCF=0 JBE(JNA)OPRCFZF=1JNBE(JA)OPRCFZF=0* 适用于地址或双精度数低位字的比较适用于地址或双精度数低位字的比较(3)比较两个带符号数,并根据比较结果转移比较两个带符号数,并根据比较结果转移* 格式格式 测试条件测试条件JL(JNGE)OPRSF OF=1 JNL(JGE)OPRSF OF=0 JLE(JNG)OPR(SF OF)ZF

65、=1JNLE(JG)OPR(SF OF)ZF=0* 适用于带符号数的比较适用于带符号数的比较(4)测试测试CX的值为的值为0则转移则转移 格式格式 测试条件测试条件JCXZOPR(CX)=0例例 : 如如 果果 X50, 转转 到到 TOO_HIGH; 否否 则则 |X-Y| RESULT,如果溢出转到如果溢出转到OVERFLOW, JGJGJOJOJNSJNS MOV AX, XMOV AX, XCMP AX, 50CMP AX, 50 TOO_HIGH TOO_HIGHSUB AX, YSUB AX, Y OVERFLOW OVERFLOW NONNEG NONNEGNEG AXNEG A

66、X NONNEG: NONNEG: MOV RESULT, AX MOV RESULT, AXTOO_HIGH:TOO_HIGH: OVERFLOW: OVERFLOW: 例:例: 、 是双精度数,分别存于是双精度数,分别存于DX,AX及及BX,CX中,中, 时转时转L1,否则转否则转L2 CMP DX, BX CMP DX, BX JG L1 JG L1 JL L2 JL L2 CMP AX, CX CMP AX, CX JA L1 JA L1L2: L2: L1: L1: 循环指令:循环指令:注意:注意:*CX中存放循环次数中存放循环次数*只能使用段内直接寻址的只能使用段内直接寻址的8位位

67、移量位位移量LOOPLOOPZ/LOOPELOOPNZ/LOOPNE执行步骤:执行步骤:(1)(CX)(CX)-1(2)检查是否满足测试条件,如满足则检查是否满足测试条件,如满足则(IP) (IP)+8位位移量,实行循环;位位移量,实行循环;不满足则不满足则IP不变,退出循环。不变,退出循环。循环指令:循环指令:LOOPOPR测试条件:测试条件:(CX) 0为零或相等时循环指令:为零或相等时循环指令:LOOPZ(LOOPE)OPR测试条件:测试条件:ZF=1且且(CX) 0不为零或不相等时循环指令:不为零或不相等时循环指令:LOOPNZ(LOOPNE)OPR测试条件:测试条件:ZF=0且且(C

68、X) 0LOOPAGAINDECCXJNZAGAIN例:求首地址为例:求首地址为ARRAY的的M个字之和,个字之和,结果存入结果存入TOTALMOV CX, MMOV CX, MMOV AX, 0MOV AX, 0MOV SI, AXMOV SI, AXAGAIN: AGAIN: ADD AX, ARRAYSIADD AX, ARRAYSIADD SI, 2ADD SI, 2LOOP AGAINLOOP AGAINMOV TOTAL, AXMOV TOTAL, AX例:在多重循环的程序结构中,例:在多重循环的程序结构中,CX计数器的保存和恢复计数器的保存和恢复 MOV CX, M MOV CX

69、, MAGAIN: AGAIN: PUSH CX PUSH CX MOV CX, N MOV CX, NNEXT: NEXT: LOOP NEXT LOOP NEXT POP CX POP CX LOOP AGAIN LOOP AGAIN MOV DI, M MOV DI, MAGAIN: AGAIN: MOV CX, N MOV CX, NNEXT: NEXT: LOOP NEXT LOOP NEXT DEC DI DEC DI JNZ AGAIN JNZ AGAIN子程序调用和返回指令:子程序调用和返回指令:code1 segmentcode1 segmentmain proc main

70、proc farfar callcall far far ptrptr subpsubp ret retmain main endpendpcode1 endscode1 endscode2 segmentcode2 segmentsubpsubp proc proc farfar retretsubpsubp endpendpcode2 endscode2 ends段间调用和返回段间调用和返回code segmentcode segmentmain proc main proc farfar call call subpsubp ret retmain main endpendpsubpsu

71、bp proc proc nearnear retretsubpsubp endpendpcode endscode ends段内调用和返回段内调用和返回 CALL调用指令调用指令段内直接近调用:段内直接近调用:CALLDST执行操作:执行操作:(SP) (SP)-2(SP)+1,(SP) (IP)(IP) (IP)+16位位移量位位移量段内间接近调用:段内间接近调用:CALLDST执行操作:执行操作:(SP) (SP)-2(SP)+1,(SP) (IP)(IP) (EA)段间直接远调用:段间直接远调用:CALLDST执行操作:执行操作:(SP) (SP)-2(SP)+1,(SP) (CS)(

72、SP) (SP)-2(SP)+1,(SP) (IP)(IP) 偏移地址偏移地址(CS) 段地址段地址段间间接远调用:段间间接远调用:CALLDST执行操作:执行操作:(SP) (SP)-2(SP)+1,(SP) (CS)(SP) (SP)-2(SP)+1,(SP) (IP)(IP) (EA)(CS) (EA+2)RET返回指令返回指令段内近返回:段内近返回:RET执行操作:执行操作:(IP) (SP)+1,(SP)(SP) (SP)+2段内带立即数近返回:段内带立即数近返回:RETEXP段间远返回:段间远返回:RET执行操作:执行操作:(IP) (SP)+1,(SP)(SP) (SP)+2(C

73、S) (SP)+1,(SP)(SP) (SP)+2段间带立即数远返回:段间带立即数远返回:RETEXP例:带立即数返回例:带立即数返回(SP)(SP) 堆栈段堆栈段code segmentcode segmentmain proc farmain proc far push ax push ax push push bxbx push push cxcx call sub call sub ret retmain main endpendpsub proc sub proc nearnear ret 6 ret 6sub sub endpendpcode endscode ends(IP)(I

74、P)( (cxcx) )( (bxbx) )(ax)(ax)(SP)(SP)(SP)(SP)中断指令:中断指令:类型类型0的的(IP)类型类型0的的(CS)类型类型1的的(IP)类型类型1的的(CS)类型类型N的的(IP)类型类型N的的(CS)类型类型255的的(IP)类型类型255的的(CS)00000000044*N003FC中断向量表中断向量表中断向量:中断向量:中中断断例例行行程程序序的的入入口口地地址址,存放于中断向量区存放于中断向量区。 00000H003FFHA0000HC0000HF0000H640K 640K (RAM)(RAM)128K 128K (RAM)(RAM)192

75、K 192K (ROM)(ROM) 64K 64K (ROM)(ROM)中断指令:中断指令:INTTYPE或或INT执行操作:执行操作:(SP) (SP)-2(SP)+1,(SP) (FLAGS)(SP) (SP)-2(SP)+1,(SP) (CS)(SP) (SP)-2(SP)+1,(SP) (IP)(IP) (TYPE*4)(CS) (TYPE*4+2)溢出中断指令:溢出中断指令:INTO执行操作:执行操作:若若OF=1,(IP) (10H)(CS) (12H)从中断返回指令:从中断返回指令:IRET执行操作:执行操作:(IP) (SP)+1,(SP)(SP) (SP)+2(CS) (SP

76、)+1,(SP)(SP) (SP)+2(FLAGS) (SP)+1,(SP)(SP) (SP)+2 注意:注意:*TYPE(0255)是中断类型号是中断类型号,隐含的类型号为隐含的类型号为3*INT指令还把指令还把IF和和TF置置0,但不影响其它标志位,但不影响其它标志位*IRET指令执行完,标志位由堆栈中取出的值确定指令执行完,标志位由堆栈中取出的值确定处理机控制与杂项操作指令:处理机控制与杂项操作指令: 标志处理标志处理指令指令CLC、STC、CMC、CLD、STD、CLI、STI 其他其他处理机控制与杂项操作处理机控制与杂项操作指令指令NOP、HLT、WAIT、ESC、LOCK标志处理指

77、令:标志处理指令:CLCCF 0CMCCF CFSTCCF 1CLDDF 0STDDF 1CLIIF 0STIIF 1注意注意:*只影响本指令指定的标志只影响本指令指定的标志其他其他处理机控制与杂项操作处理机控制与杂项操作指令指令: NOP无操作无操作( (机器码占一个字节机器码占一个字节) )HLT暂停机暂停机( (等待一次外中断,之后继续执行程序等待一次外中断,之后继续执行程序) )WAIT等待等待( (等待外中断,之后仍继续等待等待外中断,之后仍继续等待) )ESC换码换码LOCK封锁封锁( (维持总线的锁存信号,直到其后的指令维持总线的锁存信号,直到其后的指令 执行完执行完) )注意注

78、意:*不影响条件标志不影响条件标志80x86 的指令系统:的指令系统:(1)指令集的指令集的32位扩展位扩展*所有所有16位指令都可扩展到位指令都可扩展到32位位MOVEAX,1*可使用可使用32位的存储器寻址方式位的存储器寻址方式MOVEAX,EDX(2)使用方式的扩展使用方式的扩展*IMUL:单操作数指令单操作数指令双操作数指令双操作数指令/三操作数指令三操作数指令IMULREG,SRC*PUSH:允许使用立即数寻址方式允许使用立即数寻址方式PUSH36H*移位指令:移位次数可用移位指令:移位次数可用8位立即数位立即数(131)(3)新增指令新增指令MOVSX带符号扩展传送带符号扩展传送M

79、OVZX带零扩展传送带零扩展传送PUSHA/PUSHAD所有寄存器进栈所有寄存器进栈POPA/POPAD所有寄存器出栈所有寄存器出栈LFS/LGS/LSS指针送寄存器和指针送寄存器和FS/GS/SSPUSHFD标志进栈标志进栈POPFD标志出栈标志出栈CWDE字转换为双字字转换为双字EAXCDQ双字转换为双字转换为4字字EDX EAXBSWAP32位寄存器的字节次序变反位寄存器的字节次序变反XADD交换加交换加CMPXCHG比较并交换比较并交换(486)CMPXCHG8B比较并交换比较并交换8字节字节(Pentium)ABT位测试位测试BTS位测试并置位测试并置1BTR位测试并置位测试并置0B

80、TC位测试并变反位测试并变反BSF正向位扫描正向位扫描BSR反向位扫描反向位扫描SHLD双精度左移双精度左移SHRD双精度右移双精度右移INSB/INSW/INSD串输入串输入OUTSB/OUTSW/OUTSD串输出串输出条件设置指令条件设置指令(1)根据单个条件标志的值把目的字节置根据单个条件标志的值把目的字节置1SETZ/SETESETNZ/SETNESETS/SETNSSETO/SETNOSETP/SETPESETNP/SETPOSETC/SETB/SETNAESETNC/SETNB/SETAE(2)比较两个无符号数,根据比较结果把目的字节置比较两个无符号数,根据比较结果把目的字节置1SETB/SETNAE/SETCSETNB/SETAE/SETNCSETBE/SETNASETNBE/SETA(3)比较两个带符号数,根据比较结果把目的字节置比较两个带符号数,根据比较结果把目的字节置1SETL/SETNGESETNL/SETGESETLE/SETNGSETNLE/SETG其他处理机控制指令其他处理机控制指令BOUND界限指令界限指令ENTER建立堆栈帧建立堆栈帧LEAVE释放堆栈帧释放堆栈帧特权指令特权指令第第3章章练习练习Page 109 3.14 3.17Page 107 3.23 3.26 3.30 3.31 3.34 3.36 3.38 3.393.22

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号