第三章80868088指令系统和寻址方式PPT课件

上传人:大米 文档编号:593216423 上传时间:2024-09-23 格式:PPT 页数:111 大小:1.89MB
返回 下载 相关 举报
第三章80868088指令系统和寻址方式PPT课件_第1页
第1页 / 共111页
第三章80868088指令系统和寻址方式PPT课件_第2页
第2页 / 共111页
第三章80868088指令系统和寻址方式PPT课件_第3页
第3页 / 共111页
第三章80868088指令系统和寻址方式PPT课件_第4页
第4页 / 共111页
第三章80868088指令系统和寻址方式PPT课件_第5页
第5页 / 共111页
点击查看更多>>
资源描述

《第三章80868088指令系统和寻址方式PPT课件》由会员分享,可在线阅读,更多相关《第三章80868088指令系统和寻址方式PPT课件(111页珍藏版)》请在金锄头文库上搜索。

1、第三章第三章 8086/80888086/8088指令系统和指令系统和寻址方式寻址方式3.1 3.1 概述(了解)概述(了解)3.2 8086/80883.2 8086/8088寻址方式(掌握寻址方式(掌握 重点重点)3.3 8086/80883.3 8086/8088指令系统(熟练掌握指令系统(熟练掌握 重点重点)3.4 3.4 高档高档CPUCPU扩充与增加的指令(了解)扩充与增加的指令(了解)3.1 概述n n指令系统指令系统指令系统指令系统CPUCPUCPUCPU能执行的各种指令的集合。能执行的各种指令的集合。能执行的各种指令的集合。能执行的各种指令的集合。n n计算机的机器指令由若干

2、个字节组成,主要计算机的机器指令由若干个字节组成,主要计算机的机器指令由若干个字节组成,主要计算机的机器指令由若干个字节组成,主要包括两部分内容:操作码和操作数。包括两部分内容:操作码和操作数。包括两部分内容:操作码和操作数。包括两部分内容:操作码和操作数。n n指令的一般格式为:指令的一般格式为:指令的一般格式为:指令的一般格式为:操作码操作码操作数操作数1操作数操作数23.1 概述n操作码操作码(Operation Code)指明计算机主要执指明计算机主要执行的操作类型,在汇编语言中用助记符表示,行的操作类型,在汇编语言中用助记符表示,在机器语言中由一组二进制代码表示,如:数在机器语言中由

3、一组二进制代码表示,如:数据传送指令据传送指令MOVMOV,加法指令,加法指令ADDADD。n操作数(操作数(Operated Data)指明指令执行的操作指明指令执行的操作过程中所需的数据,过程中所需的数据,80868086指令中操作数可以有指令中操作数可以有零个、一个或两个。零个、一个或两个。3.1 概述每条指令应包括以下基本信息:每条指令应包括以下基本信息:指明计算机的有关部件执行什么操作;指明计算机的有关部件执行什么操作;指明参加操作的是一些什么样的数;指明参加操作的是一些什么样的数;指明这些操作数存放在什么地方,以及指明这些操作数存放在什么地方,以及通过什么方式才能够找到它们。通过什

4、么方式才能够找到它们。3.2 寻址方式一、操作数的种类一、操作数的种类一、操作数的种类一、操作数的种类二、有效地址二、有效地址二、有效地址二、有效地址EAEA三、段约定和段超越三、段约定和段超越三、段约定和段超越三、段约定和段超越四、数据寻址方式四、数据寻址方式四、数据寻址方式四、数据寻址方式五、地址寻址方式(留到控制转移指令再作介绍)五、地址寻址方式(留到控制转移指令再作介绍)五、地址寻址方式(留到控制转移指令再作介绍)五、地址寻址方式(留到控制转移指令再作介绍)一、操作数的种类一、操作数的种类数据操作数数据操作数数据操作数数据操作数立即操作数。数据在指令中(直接写出)立即操作数。数据在指令

5、中(直接写出)立即操作数。数据在指令中(直接写出)立即操作数。数据在指令中(直接写出)寄存器操作数。数据在寄存器中(寄存器名)寄存器操作数。数据在寄存器中(寄存器名)寄存器操作数。数据在寄存器中(寄存器名)寄存器操作数。数据在寄存器中(寄存器名)存储器操作数。数据在存储器中(用存储器操作数。数据在存储器中(用存储器操作数。数据在存储器中(用存储器操作数。数据在存储器中(用 表示)表示)表示)表示)I/OI/O操作数。数据在操作数。数据在操作数。数据在操作数。数据在I/OI/O端口中端口中端口中端口中转移地址操作数转移地址操作数转移地址操作数转移地址操作数立即操作数。地址在指令中立即操作数。地址

6、在指令中立即操作数。地址在指令中立即操作数。地址在指令中寄存器操作数。地址在寄存器中寄存器操作数。地址在寄存器中寄存器操作数。地址在寄存器中寄存器操作数。地址在寄存器中存储器操作数。地址在某存储单元中存储器操作数。地址在某存储单元中存储器操作数。地址在某存储单元中存储器操作数。地址在某存储单元中二、有效地址二、有效地址EA(Effective Address) 当操作数存放在存储器中时,当操作数存放在存储器中时,当操作数存放在存储器中时,当操作数存放在存储器中时,操作数通常只操作数通常只操作数通常只操作数通常只给出该存储单元的偏移地址,这个地址就是有效给出该存储单元的偏移地址,这个地址就是有效

7、给出该存储单元的偏移地址,这个地址就是有效给出该存储单元的偏移地址,这个地址就是有效地址地址地址地址EAEA。 三、段约定与段超越三、段约定与段超越 段约定:段约定:段约定:段约定:80868086指令系统对存储器操作数所在指令系统对存储器操作数所在指令系统对存储器操作数所在指令系统对存储器操作数所在的段基址有一个基本的规定,称为段约定。的段基址有一个基本的规定,称为段约定。的段基址有一个基本的规定,称为段约定。的段基址有一个基本的规定,称为段约定。如:一般数据的默认段寄存器为如:一般数据的默认段寄存器为如:一般数据的默认段寄存器为如:一般数据的默认段寄存器为DSDSDSDS或或或或ESESE

8、SES 堆栈数据的默认段寄存器为堆栈数据的默认段寄存器为堆栈数据的默认段寄存器为堆栈数据的默认段寄存器为SSSSSSSS 指令代码的默认段寄存器为指令代码的默认段寄存器为指令代码的默认段寄存器为指令代码的默认段寄存器为CSCSCSCS 段超越:段超越:段超越:段超越:若存储器操作数的有效地址没有在若存储器操作数的有效地址没有在若存储器操作数的有效地址没有在若存储器操作数的有效地址没有在约定的逻辑段内,而是在指令直接给出的逻辑段约定的逻辑段内,而是在指令直接给出的逻辑段约定的逻辑段内,而是在指令直接给出的逻辑段约定的逻辑段内,而是在指令直接给出的逻辑段中,称为段超越。中,称为段超越。中,称为段超

9、越。中,称为段超越。 操作类型操作类型隐含的隐含的段基址段基址可替换的段基址可替换的段基址偏移地址来偏移地址来源源取指令取指令CS无无IP堆栈操作堆栈操作SS无无SPBP用作基址寄存器用作基址寄存器SSCS、DS、ESEA通用数据读通用数据读/写写DSCS、SS、ESEA数据串操作(源地址)数据串操作(源地址)DSCS、SS、ESSI数据串操作(目的地址)数据串操作(目的地址)ES无无DI三、段约定与段超越三、段约定与段超越四、四、数据操作数寻址方式数据操作数寻址方式寻址方式:指令中用于说明操作数所在地方的方法。寻址方式:指令中用于说明操作数所在地方的方法。寻址方式:指令中用于说明操作数所在地

10、方的方法。寻址方式:指令中用于说明操作数所在地方的方法。(1 1)立即寻址方式)立即寻址方式)立即寻址方式)立即寻址方式 egeg:MOVMOV AL AL,20H20H(2 2)寄存器寻址方式)寄存器寻址方式)寄存器寻址方式)寄存器寻址方式 egeg:MOV ALMOV AL,BLBL(3 3)直接寻址方式)直接寻址方式)直接寻址方式)直接寻址方式 egeg:MOV ALMOV AL,2000H2000H(4 4)寄存器间接寻址方式)寄存器间接寻址方式)寄存器间接寻址方式)寄存器间接寻址方式 egeg:MOV ALMOV AL,SISI(5 5)寄存器相对寻址方式)寄存器相对寻址方式)寄存器

11、相对寻址方式)寄存器相对寻址方式 egeg:MOV ALMOV AL,BX+3BX+3(6 6)基址变址寻址方式)基址变址寻址方式)基址变址寻址方式)基址变址寻址方式 egeg:MOV ALMOV AL,BPDIBPDI(7 7)基址变址相对寻址方式)基址变址相对寻址方式)基址变址相对寻址方式)基址变址相对寻址方式 egeg:MOV ALMOV AL,BX+DI+13BX+DI+13存储器操作数存储器操作数1、立即寻址:操作数直接在指令中给出、立即寻址:操作数直接在指令中给出MOVMOVMOVMOVALALALAL,67H67H67H67H ;AL67HAL67HAL67HAL67HMOVMO

12、VMOVMOVAXAXAXAX,0F478H0F478H0F478H0F478H ;AXF478HAXF478HAXF478HAXF478H注:以注:以A AF F打头的数字出现在指令中时,前面一定要加一个数字打头的数字出现在指令中时,前面一定要加一个数字0 0。MOVMOVMOVMOVALALALAL,COUNT COUNT COUNT COUNT ;ALCOUNTALCOUNTALCOUNTALCOUNT所代表的数所代表的数所代表的数所代表的数 操作码操作码78H78HF4HF4H代码段代码段 AHAH ALALAXAX操作数操作数 操作码操作码67H67H代码段代码段 AL AL操作数操

13、作数1、立即寻址:操作数直接在指令中给出、立即寻址:操作数直接在指令中给出特点:特点:(1 1)不需要访问外部总线,指令执行速度快;)不需要访问外部总线,指令执行速度快;(2 2)主要用来给寄存器或存储器赋初值。)主要用来给寄存器或存储器赋初值。注意:注意:(1 1)立即数可以为)立即数可以为8 8位,可以为位,可以为1616位;位;(2 2)立即数只能做为源操作数。)立即数只能做为源操作数。MOVMOVALAL,BHBH ;ALBHALBHMOVMOVDSDS,AXAX ;DS AX DS AX 2、寄存器寻址:操作数在、寄存器寻址:操作数在CPU的寄存器中的寄存器中特点:特点: 不需要访问

14、外部总线,指令执行速度快。不需要访问外部总线,指令执行速度快。注意:注意: 源操作数的长度必须与目的操作数一致。源操作数的长度必须与目的操作数一致。3、直接寻址:操作数在存储器中,存储单元的、直接寻址:操作数在存储器中,存储单元的有效地址有效地址EA直接在指令中给出直接在指令中给出MOVMOVAXAX,6700H6700H ;AXAX( DSDS16+6700H16+6700H)代码段代码段操作码操作码00H00H67H67HDSDS3000H3000HAXAXAH ALAH AL16 30000H30000H6700H6700HEAEA+ +36700H36700H数据段数据段36700H3

15、6700H34H 34H 12H12H12H12H34H34HMOVMOVBLBL,ES:1000H ES:1000H ;BL BL ( ESES16+1000H16+1000H)3、直接寻址:操作数在存储器中,存储单元的、直接寻址:操作数在存储器中,存储单元的有效地址有效地址EA直接在指令中给出直接在指令中给出注意:注意:(1 1)默认为操作数在存储器的数据段,段寄存)默认为操作数在存储器的数据段,段寄存器为器为DS,PADS16EA ;(2 2)若操作数放在其它段中,应在指令中指定)若操作数放在其它段中,应在指令中指定段超越前缀;段超越前缀;(3 3)指令中有效地址上必须加一个方括号,以)

16、指令中有效地址上必须加一个方括号,以便与立即数相区别;便与立即数相区别;(4 4)允许用符号地址代替数值地址,即给存储)允许用符号地址代替数值地址,即给存储单元取一个名字。如:单元取一个名字。如:MOV AL,ADDR或或MOV AL,ADDR4、寄存器间接寻址:操作数在存储器中,存储、寄存器间接寻址:操作数在存储器中,存储单元的有效地址在寄存器中单元的有效地址在寄存器中寄存器间接寻址方式可用的寄存器有四个:寄存器间接寻址方式可用的寄存器有四个:SISI、DIDI、BXBX、BPBP,且只能是这四个。,且只能是这四个。若指令中指定若指令中指定BXBX、SISI、DIDI为间址寄存器,则操作为间

17、址寄存器,则操作数在数据段中。数在数据段中。 PADS16 BXSIDI若指令中指定若指令中指定BPBP为间址寄存器,则操作数在堆栈为间址寄存器,则操作数在堆栈段中。段中。 PASS16BPDSDS3000H3000H16 30000H30000HBXBX2000H2000HEAEA2000H2000H+ +32000H32000H12H12HALAL数据段数据段32000H32000H. . . . . . . . . . . . .注意:也可在指令中指定段超越前缀来取得其它注意:也可在指令中指定段超越前缀来取得其它段中的操作数。段中的操作数。 如如:MOV AX,ES:BXMOVMOV B

18、X BX,AL AL ;(;(DSDS16+BX16+BX)ALALMOVMOV DX DX,BPBP ;DX DX (SSSS16+BP16+BP)12H 12H 5、寄存器相对寻址:操作数在存储器中,存储、寄存器相对寻址:操作数在存储器中,存储单元的有效地址由间址寄存器加单元的有效地址由间址寄存器加8位或位或16位位移位位移量(补码)得到量(补码)得到间址寄存器可以是:间址寄存器可以是:SISI、DIDI、BXBX、BPBP若指令中指定若指令中指定BXBX、SISI、DIDI为间址寄存器,则操作为间址寄存器,则操作数在数据段中。数在数据段中。若指令中指定若指令中指定BPBP为间址寄存器,则

19、操作数在堆栈为间址寄存器,则操作数在堆栈段中。段中。 PADS16 BXSIDIDisp8Disp16 PASS16BPDisp8Disp16SSSS2000H2000H16 20000H20000HBPBP1000H1000H+ +20FFDH20FFDHBLBLMOVMOV BL BL,BP+0FDH BP+0FDH ;ALAL(SSSS16+BP-316+BP-3)MOVMOV DX DX,BX+10HBX+10H ;DX DX (DSDS16+BX+1616+BX+16)堆栈段堆栈段20FFDH20FFDH. . . . . . . . . . . . .12H 12H 代码段代码段操

20、作码操作码FDHFDH1000H1000HFFFDHFFFDH+ +1 1 0FFDH 0FFDHEAEA0FFDH0FFDH12H12HMOVMOV SI+COUNT SI+COUNT ,CXCX ;(;(DSDS16+SI+COUNT16+SI+COUNT)CX CX 注意:注意:(1)在计算)在计算EA时,位移量若为时,位移量若为8位,则应将其扩位,则应将其扩展为展为16位方能相加,且结果取低位方能相加,且结果取低16位有效位有效 ; 扩展方法为:扩展方法为: 正数正数高高8位扩展为位扩展为00H 负数负数高高8位扩展为位扩展为FFH(2 2)位移量可以用符号表示;位移量可以用符号表示;

21、(3)允许段超越。)允许段超越。如如: MOV DL,DS:COUNTBP5、寄存器相对寻址:操作数在存储器中,存储单元的、寄存器相对寻址:操作数在存储器中,存储单元的有效地址由间址寄存器加有效地址由间址寄存器加8位或位或16位位移量(补码)得位位移量(补码)得到到6、基址变址寻址:操作数在存储器中,存储单、基址变址寻址:操作数在存储器中,存储单元的有效地址由基址寄存器加变址寄存器得到元的有效地址由基址寄存器加变址寄存器得到基址寄基址寄存器为:存器为:BXBX、BPBP;变址寄存器为:;变址寄存器为:SISI、DIDI若基址寄存器为若基址寄存器为BXBX,则操作数在数据段中。,则操作数在数据段

22、中。若基址寄存器为若基址寄存器为BPBP,则操作数在堆栈段中。,则操作数在堆栈段中。 PADS16BX+SIDI PASS16BPSIDI注意:注意:(1 1)不允许将两个基址寄存器或两个变址寄存器组)不允许将两个基址寄存器或两个变址寄存器组合在一起寻址;合在一起寻址; 如:如:MOV AX, BXBP或或MOV AX,SIDI都是错的都是错的 (2 2)允许段超越;如:)允许段超越;如:MOV AX,ES:BX+SI 例:例:MOV AXMOV AX,BX+SIBX+SI 设设DSDS2000H2000H,BXBX8000H8000H,SISI10FEH10FEH,则,则BXBXSISI80

23、00H8000H10FEH10FEH90FEH90FEH,得:,得:EAEA90FEH90FEH PA PA2000H2000H1616EAEA290FEH290FEH 指令执行后,指令执行后,ALAL(290FEH)(290FEH),AHAH(290FFH)(290FFH)。7、基址变址相对寻址:操作数在存储器中,存储单元的、基址变址相对寻址:操作数在存储器中,存储单元的有效地址由基址寄存器加变址寄存器再加有效地址由基址寄存器加变址寄存器再加8位或位或16位位移位位移量(补码)得到量(补码)得到基址寄基址寄存器为:存器为:BXBX、BPBP;变址寄存器为:;变址寄存器为:SISI、DIDI若

24、基址寄存器为若基址寄存器为BXBX,则操作数在数据段中。,则操作数在数据段中。若基址寄存器为若基址寄存器为BPBP,则操作数在堆栈段中。,则操作数在堆栈段中。 PADS16BX+SIDIDisp8Disp16 PASS16BPSIDIDisp8Disp163.3 指令系统一、数据一、数据传送指令传送指令二、二、算术运算指令算术运算指令三、逻辑运算和移位指令三、逻辑运算和移位指令四、串操作指令四、串操作指令五、控制转移指令五、控制转移指令六、处理器指令六、处理器指令srcsrc:源操作数:源操作数dstdst:目的操作数:目的操作数opropr:操作数:操作数datadata:立即数:立即数re

25、greg:寄存器:寄存器memmem:存储器:存储器 :指令中存储器的表示:指令中存储器的表示( )( ):注释中存储器的表示:注释中存储器的表示为方便讲解,约定一些符号为方便讲解,约定一些符号: :一、数据传送指令一、数据传送指令1 1、通用、通用、通用、通用传送指令传送指令传送指令传送指令2 2、输入输出指令输入输出指令输入输出指令输入输出指令3 3、地址传送指令、地址传送指令、地址传送指令、地址传送指令4 4、标志传送指令标志传送指令标志传送指令标志传送指令1、通用传送指令、通用传送指令(1 1)最基本的数据传送指令)最基本的数据传送指令)最基本的数据传送指令)最基本的数据传送指令MOV

26、MOV指令格式:指令格式:MOV dstMOV dst,src src ;dstsrcdstsrc 可以实现:寄存器可以实现:寄存器可以实现:寄存器可以实现:寄存器寄存器寄存器寄存器寄存器 寄存器寄存器寄存器寄存器内存内存内存内存 寄存器寄存器寄存器寄存器立即数立即数立即数立即数 存储器存储器存储器存储器立即数立即数立即数立即数不影响状态标志位。不影响状态标志位。不影响状态标志位。不影响状态标志位。NOTENOTE:1 1)操作数类型要匹配)操作数类型要匹配 MOVAX,BL MOVAL,BX MOVAL,123H MOVAX,12H2 2)不允许向段寄存器传送立即数)不允许向段寄存器传送立即

27、数 MOVDS,1234H 若要传送,须以其它寄存器作桥梁,如:若要传送,须以其它寄存器作桥梁,如: MOVAX,1234H MOVDS,AXNOTENOTE:3 3)段寄存器之间不能直接传递数据)段寄存器之间不能直接传递数据 MOVES,DS4 4)CSCS和和IPIP不能作为目的操作数,可以作为源操作数不能作为目的操作数,可以作为源操作数 MOVCS,2000H MOVIP,AX5 5)立即数不能作为目的操作数:)立即数不能作为目的操作数: MOV12H,AL6)存储器之间不能直接传递数据)存储器之间不能直接传递数据 MOVSI,2000H 若要传送,须以寄存器作桥梁,如:若要传送,须以寄

28、存器作桥梁,如: MOVAX,2000H MOVSI,AX(2)堆栈操作指令)堆栈操作指令PUSH和和POP指令格式:指令格式:PUSH src PUSH src ;先移后入;先移后入POP dst POP dst ;先出后移;先出后移NOTE:1 1)堆栈操作为字操作,不允许对字节进行操作;)堆栈操作为字操作,不允许对字节进行操作; PUSHAL2 2)立即数不能作为操作数;)立即数不能作为操作数; PUSH 1234H3 3)CSCS可以作为源操作数,可以作为源操作数,CSCS作为目的操作数时只能弹作为目的操作数时只能弹出断点;出断点; PUSH CSPOPCS AX12H34HSP堆栈段

29、堆栈段SP34HSP12HSP+1PUSH AXSPSP-2(SP+1)AH(SP)ALPOP AXAXSP堆栈段堆栈段56H78HSP78HSP56HSP+1AL(SP)AH(SP+1)SPSP+2(3)数据交换指令)数据交换指令XCHG指令格式:指令格式:XCHG opr1XCHG opr1,opr2 opr2 ;opr1opr1opr2opr2不影响标志位不影响标志位NOTE:1 1)两个操作数不能同时为存储器;)两个操作数不能同时为存储器; XCHG 2000H,3000H 2 2)两个操作数不能同时为段寄存器;)两个操作数不能同时为段寄存器; XCHG ES,DS 3 3)操作数不能

30、是立即数。)操作数不能是立即数。(4)换码指令)换码指令XLAT(查表指令)(查表指令)指令格式:指令格式:XLAT src_table XLAT src_table ;src_tablesrc_table可可以省略以省略将将AL中的值转换为内存表中对应的某个值中的值转换为内存表中对应的某个值1 1)预先将表头偏移地址赋给预先将表头偏移地址赋给BX;2)AL中存放表格中某一项到表格首地址的中存放表格中某一项到表格首地址的位移量;位移量;3)AL(DS16+BX+AL)。)。(4)换码指令)换码指令XLAT(查表指令)(查表指令)BX例:用查表指令求例:用查表指令求09的平方。的平方。MOVAL

31、,7MOVBX,2000HXLAT执行结果:(执行结果:(AL)=490181DS:2000H4972、输入输出指令、输入输出指令(1 1)输入指令)输入指令)输入指令)输入指令ININ:从外设端口接收数据:从外设端口接收数据:从外设端口接收数据:从外设端口接收数据指令格式:指令格式: IN AL/AXIN AL/AX,port port ;直接寻址;直接寻址将将8 8位或位或1616位数据直接经端口位数据直接经端口portport送到送到ALAL或或AXAX中,其中,其中中portport地址范围地址范围0000FFHFFH ININ AL/AXAL/AX,DX DX ;间接寻址间接寻址从从

32、DXDX寄存器指定的端口中将寄存器指定的端口中将8/168/16位数据送入位数据送入AL/AXAL/AX中,中,其中其中DXDX指定的端口地址范围指定的端口地址范围00000000FFFFHFFFFH2、输入输出指令、输入输出指令(2 2)输出指令)输出指令)输出指令)输出指令OUTOUT:向外设端口发送数据:向外设端口发送数据:向外设端口发送数据:向外设端口发送数据指令格式:指令格式: OUT portOUT port,AL/AX AL/AX ;直接寻;直接寻址址从从ALAL或或AXAX中输出中输出8/168/16位数据到指定的位数据到指定的portport端口,端口,其中其中portpor

33、t地址范围地址范围0000FFHFFH OUTOUT DXDX,AL/AX AL/AX ;间接寻址;间接寻址从从ALAL或或AXAX中输出中输出8/168/16位数据到位数据到DXDX指定的指定的I/OI/O端口,端口,其中其中DXDX指定的端口地址范围指定的端口地址范围00000000FFFFHFFFFH注意:注意:端口地址端口地址256256时,只能使用间接输入时,只能使用间接输入/ /输出指输出指令,即:令,即:IN AL/AX,DX 或或OUT DX,AL/AX3、地址传送指令、地址传送指令(1 1)取偏移地址指令)取偏移地址指令)取偏移地址指令)取偏移地址指令LEALEA指令格式:指

34、令格式:LEA reg16 , memLEA reg16 , mem将源操作数的将源操作数的1616位偏移地址送到目标操作数位偏移地址送到目标操作数目标操作数必须为十六位通用寄存器目标操作数必须为十六位通用寄存器源操作数必须为存储器源操作数必须为存储器LEA AXLEA AX,BUFFERBUFFER(BUFFERBUFFER为符号表示的存储为符号表示的存储器)等价于器)等价于MOV AXMOV AX,OFFSET BUFFEROFFSET BUFFER3、地址传送指令、地址传送指令(2 2)地址指针装入)地址指针装入)地址指针装入)地址指针装入DSDS指令指令指令指令 指令格式:指令格式:L

35、DS reg16 , mem32LDS reg16 , mem32 将源操作数指示的存储单元开始,将源操作数指示的存储单元开始,将连续将连续4 4个字节单元的内容分别送入目标操个字节单元的内容分别送入目标操作数指定的寄存器和作数指定的寄存器和DSDS中。中。3、地址传送指令、地址传送指令(3 3)地址指针装入)地址指针装入)地址指针装入)地址指针装入ESES指令指令指令指令 指令格式:指令格式:LES reg16 , mem32LES reg16 , mem32 将源操作数指示的存储单元开始,将源操作数指示的存储单元开始,将连续将连续4 4个字节单元的内容分别送入目标操个字节单元的内容分别送入

36、目标操作数指定的寄存器和作数指定的寄存器和ESES中。中。使用地址传送指令时注意:使用地址传送指令时注意:(1)目标操作数不能是段寄存器)目标操作数不能是段寄存器(2)源操作数必须是存储器源操作数必须是存储器(3)常用于在串操作时建立初始的地常用于在串操作时建立初始的地址指针址指针00H30H00H40H1000HDS例:例:LEA BX,1000H3、地址传送指令、地址传送指令 BX 1000HSI 3000H LDS SI,1000HDS4000H4、标志传送指令、标志传送指令(1 1)取标志指令)取标志指令)取标志指令)取标志指令LAHFLAHF指令格式:指令格式:LAHFLAHF将标志

37、寄存器的低将标志寄存器的低8 8位取到位取到AHAH中中FLAGSFLAGS OFOFDFDFIFIFTFTFSFSFZFZFAFAFPFPFCFCF AHAHD D7 7D D6 6D D4 4D D2 2D D0 04、标志传送指令、标志传送指令(2 2)置标志指令)置标志指令)置标志指令)置标志指令SAHFSAHF指令格式:指令格式:SAHFSAHF将将AHAH寄存器的内容传送到标志寄存器的低寄存器的内容传送到标志寄存器的低8 8位,位,以对状态标志以对状态标志SFSF、ZFZF、AFAF、PFPF和和CFCF进行设置。进行设置。FLAGSFLAGS OFOFDFDFIFIFTFTFSF

38、SFZFZFAFAFPFPFCFCF AHAHD D7 7D D6 6D D4 4D D2 2D D0 04、标志传送指令、标志传送指令(3 3)标志压栈指令)标志压栈指令)标志压栈指令)标志压栈指令PUSHFPUSHF指令格式:指令格式:PUSHFPUSHF将标志寄存器的内容压入堆栈。将标志寄存器的内容压入堆栈。(4 4)标志弹出堆栈指令)标志弹出堆栈指令)标志弹出堆栈指令)标志弹出堆栈指令POPFPOPF指令格式:指令格式:POPFPOPF将堆栈内容弹出到标志寄存器。将堆栈内容弹出到标志寄存器。传送指令小结:传送指令小结:1)只有传送指令可以对段寄存器操作,以后讲到的只有传送指令可以对段寄

39、存器操作,以后讲到的五类指令都不能对段寄存器操作;五类指令都不能对段寄存器操作;2)传送指令不影响标志位(标志传送指令除外)。传送指令不影响标志位(标志传送指令除外)。出栈,并送入标志寄存器出栈,并送入标志寄存器POPF输出输出OUT标志寄存器入栈指令标志寄存器入栈指令PUSHF输入输入INAHAH内容装入标志寄存器低字节内容装入标志寄存器低字节SAHF输入输出指令输入输出指令标志寄存器低字节装入标志寄存器低字节装入AHAHLAHF查表查表XLAT标志传送指令标志传送指令交换字或字节交换字或字节XCHG装入附加段寄存器装入附加段寄存器LES出栈指令出栈指令POP装入数据段寄存器装入数据段寄存器

40、LDS入栈指令入栈指令PUSH装入有效(偏移)地址装入有效(偏移)地址LEA字节或字传送字节或字传送MOV地址目标传送指令地址目标传送指令通用数据传送指令通用数据传送指令二、算术运算指令二、算术运算指令1 1、加法、加法、加法、加法指令指令指令指令2 2、减法、减法、减法、减法指令指令指令指令3 3、乘法指令、乘法指令、乘法指令、乘法指令4 4、除法、除法、除法、除法指令指令指令指令5 5、符号扩展指令、符号扩展指令、符号扩展指令、符号扩展指令6 6、十进制、十进制、十进制、十进制调整指令调整指令调整指令调整指令1、加法指令(影响状态标志位)、加法指令(影响状态标志位)指令格式指令格式ADDA

41、DDdstdst,srcsrc;dstdst+srcdstdst+srcADCADCdstdst,srcsrc;dstdst+src+CFdstdst+src+CFINCINCopropr ;opropr+1 opropr+1 不影响不影响CFCF2、减法指令(影响状态标志位)、减法指令(影响状态标志位)指令格式指令格式SUBSUBdstdst,srcsrc;dstdst dstdst src srcSBBSBBdstdst,srcsrc;dstdst dstdst src src CFCFDECDEC opr opr ;opropr opropr 1 1 不影响不影响CFCFNEG opr

42、NEG opr ;opr0 opr0 opr oprCMP opr1CMP opr1,opr2 opr2 ;opr1-opr2opr1-opr2关于加减法指令的几点说明:关于加减法指令的几点说明:关于加减法指令的几点说明:关于加减法指令的几点说明:dstdst和和srcsrc不能同时为存储器,不能同时为立即数;不能同时为存储器,不能同时为立即数;dstdst不能是立即数;不能是立即数;INCINC、DECDEC、NEGNEG指令的操作数不能是立即数;指令的操作数不能是立即数;ADCADC、SBBSBB指令常用于多字节加减法运算;指令常用于多字节加减法运算;INCINC、DECDEC指令的操作数

43、若为存储器,则要说明是字操作还是指令的操作数若为存储器,则要说明是字操作还是字节操作;字节操作;2000H2001HFFH 01H(2000H)=00H (2001H)=02H0 1 F FH0 0 0 1 H0 2 0 0 H+ 例:例: INC WORD PTR 2000H INC BYTE PTR 2000H F F H0 1 H0 0 H+(2000H)=00H (2001H)=01HINCINC、DECDEC常在循环结构中用于修改循环计数;常在循环结构中用于修改循环计数;CMPCMP指令用目的操作数减源操作数,但结果不送回指令用目的操作数减源操作数,但结果不送回目的操作数,比较结果反

44、映在状态标志位上;目的操作数,比较结果反映在状态标志位上; 对无符号数可用对无符号数可用ZF、CF来判断大小来判断大小 对带符号数可用对带符号数可用ZF和和OF SF来判断大小来判断大小CMP A,BZFCFA=B1AB0AB0ABNEGNEG指令实际为求负操作,利用指令实际为求负操作,利用NEGNEG指令可以得到负数指令可以得到负数的绝对值;的绝对值; 例:例:AL=0FFHAL=0FFH,执行指令,执行指令NEG ALNEG AL以后,以后,AL=01HAL=01H;3、乘法指令、乘法指令(1 1)无符号数乘法指令)无符号数乘法指令)无符号数乘法指令)无符号数乘法指令MULMUL 指令格式

45、:指令格式:MUL srcMUL src AXALAXALsrc src (字节乘法)(字节乘法) DXDX,AXAX AXAX src src(字乘法)(字乘法) (2 2)带符号数乘法指令)带符号数乘法指令)带符号数乘法指令)带符号数乘法指令IMULIMUL 指令格式:指令格式:IMUL srcIMUL src AXAL AXALsrc src (字节乘法)(字节乘法) DXDX,AXAX AXAX src src(字乘法)(字乘法)4、除法指令(除数只能是被除数的一半字长)、除法指令(除数只能是被除数的一半字长)(1 1)无符号数除法指令)无符号数除法指令)无符号数除法指令)无符号数除法

46、指令DIVDIV 指令格式:指令格式:DIV srcDIV srcAL AXAL AXsrcsrc的商,的商,AH AXAH AXsrcsrc的余数(字节除法)的余数(字节除法)AXDXAXAXDXAXsrcsrc的商,的商,DXDXAXDXDXAXsrcsrc的余数(字除法)的余数(字除法)(2 2)带符号数除法指令)带符号数除法指令)带符号数除法指令)带符号数除法指令IDIVIDIV 指令格式:指令格式:IDIV srcIDIV srcAL AXAL AXsrcsrc的商,的商,AH AXAH AXsrcsrc的余数(字节除法)的余数(字节除法)AXDXAXAXDXAXsrcsrc的商,的

47、商,DXDXAXDXDXAXsrcsrc的余数(字除法)的余数(字除法)4、除法指令(除数只能是被除数的一半字长)、除法指令(除数只能是被除数的一半字长)注意:注意:乘除法指令的源操作数不能为立即数乘除法指令的源操作数不能为立即数余数的符号与被除数相同余数的符号与被除数相同在乘法指令中,两个操作数的字长必须相等在乘法指令中,两个操作数的字长必须相等在除法指令中,被除数必须是除数的双倍字在除法指令中,被除数必须是除数的双倍字长长 因此,有时需要将一个因此,有时需要将一个8位数扩展成位数扩展成16位,位,或者将或者将16位数扩展为位数扩展为32位位5、符号扩展指令、符号扩展指令(1 1)字节扩展指

48、令)字节扩展指令)字节扩展指令)字节扩展指令CBWCBW 指令格式:指令格式: CBW CBW 将将ALAL的符号位扩展到的符号位扩展到AHAH的的8 8位中位中(2 2)字扩展指令)字扩展指令)字扩展指令)字扩展指令CWDCWD 指令格式:指令格式: CWD CWD 将将AXAX的符号位扩展到的符号位扩展到DXDX的的1616位中位中6、十进制调整指令、十进制调整指令(1 1)压缩)压缩)压缩)压缩BCDBCD码调整指令码调整指令码调整指令码调整指令DAADAA(加法)(加法)(加法)(加法) 指令格式:指令格式: DAA DAA 用于加法指令后,将用于加法指令后,将ALAL调整到压缩调整到

49、压缩BCDBCD码格式码格式(2 2)非压缩)非压缩)非压缩)非压缩BCDBCD码调整指令码调整指令码调整指令码调整指令AAAAAA(加法)(加法)(加法)(加法) 指令格式:指令格式: AAA AAA 用于加法指令后,将用于加法指令后,将ALAL调整到非压缩调整到非压缩BCDBCD码格式码格式AHAH放调整所产生的进位放调整所产生的进位6、十进制调整指令、十进制调整指令(3 3)压缩)压缩)压缩)压缩BCDBCD码调整指令码调整指令码调整指令码调整指令DASDAS(减法)(减法)(减法)(减法) 指令格式:指令格式: DAS DAS 用于减法指令后,将用于减法指令后,将ALAL调整到压缩调整

50、到压缩BCDBCD码格式码格式(4 4)非压缩)非压缩)非压缩)非压缩BCDBCD码调整指令码调整指令码调整指令码调整指令AASAAS(减法)(减法)(减法)(减法) 指令格式:指令格式: AAS AAS 用于减法指令后,将用于减法指令后,将ALAL调整到非压缩调整到非压缩BCDBCD码格式码格式AHAH放调整所产生的借位放调整所产生的借位例例1:计算:计算36+45 MOV AL,36H ; ADD AL,45H ;AL=7BH DAA ;调整后,;调整后,AL=81H例例2:计算:计算6+5 MOV AL,06H ; ADD AL,05H ;AL=0BH AAA ;调整后,;调整后,AL=

51、01H,AH=01H注意:注意:调整指令要紧跟在加减法指令之后调整指令要紧跟在加减法指令之后加法指令加法指令加法指令加法指令ADDADDdstdst,srcsrcADCADCdstdst,src src INCINCopropr减法指令减法指令减法指令减法指令SUBSUBdstdst,srcsrcNEGNEGopr opr SBBSBBdstdst,srcsrcCMPCMP opr1opr1,opr2opr2DECDECopropr乘法指令乘法指令乘法指令乘法指令MULMUL src IMUL src src IMUL src除法指令除法指令除法指令除法指令DIVDIV src IDIV sr

52、c src IDIV src符号扩展指令符号扩展指令符号扩展指令符号扩展指令CBW CWDCBW CWD十进制调整指令十进制调整指令十进制调整指令十进制调整指令DAA DASDAA DASAAA AASAAA AAS算术运算指令小结:算术运算指令小结:三、逻辑运算和移位指令三、逻辑运算和移位指令1 1、逻辑运算、逻辑运算、逻辑运算、逻辑运算指令指令指令指令2 2、移位、移位、移位、移位指令指令指令指令1、逻辑运算指令、逻辑运算指令(1 1)逻辑)逻辑)逻辑)逻辑“ “与与与与” ”指令指令指令指令 指令格式:指令格式: AND dstAND dst,src src ;dst dst dst s

53、rcdst src可以用于将某些位清零(和与),而其余位可以用于将某些位清零(和与),而其余位保持不变(和与)保持不变(和与) 。典型应用:典型应用:将将0909的的ASCIIASCII码转换为相应的非压缩码转换为相应的非压缩BCD BCD 码;码; MOV ALMOV AL,6 6 ;AL=00110110BAL=00110110B AND AL AND AL,0FH 0FH ;AL=00000110BAL=00000110B1、逻辑运算指令、逻辑运算指令将小写字母转换为大写字母;将小写字母转换为大写字母; MOV ALMOV AL,a a ;AL=01100001BAL=01100001B

54、 AND AL AND AL,11011111B 11011111B ;AL=01000001BAL=01000001B1、逻辑运算指令、逻辑运算指令(2 2)逻辑)逻辑)逻辑)逻辑“ “或或或或” ”指令指令指令指令 指令格式:指令格式: OR dstOR dst,src src ;dst dst dst dst srcsrc可以用于将某些位置可以用于将某些位置1 1(和(和1 1或),而其余位或),而其余位保持不变(和或)。保持不变(和或)。如:如:将非压缩将非压缩BCD BCD 码转换为相应十进制数的码转换为相应十进制数的ASCIIASCII码码 MOV ALMOV AL,09H 09H

55、 ;AL=00001001BAL=00001001B OR AL OR AL,30H 30H ;AL=00111001BAL=00111001B 将某寄存器自身和自身进行将某寄存器自身和自身进行“与与”或者或者“或或”操操作,寄存器内容不变,但影响作,寄存器内容不变,但影响SF、ZF、PF标标志位,且将志位,且将OF和和CF清零。清零。 据此,可以判断数据的正负及是否为零。据此,可以判断数据的正负及是否为零。1、逻辑运算指令、逻辑运算指令(3 3)逻辑)逻辑)逻辑)逻辑“ “异或异或异或异或” ”指令指令指令指令 指令格式:指令格式:XOR dstXOR dst,src src ;dst ds

56、t dstsrcdstsrc可以用于将某些位取反(和可以用于将某些位取反(和1 1异或),而其余异或),而其余位保持不变(和位保持不变(和0 0异或)。异或)。 如:如:MOV ALMOV AL,10001111B 10001111B ;AL=10001111BAL=10001111B XOR AL XOR AL,01111111B 01111111B ;AL=11110000BAL=11110000B寄存器自身与自身异或,可将内容清零。寄存器自身与自身异或,可将内容清零。 如:如:XOR AXXOR AX,AXAX1、逻辑运算指令、逻辑运算指令(4 4)逻辑)逻辑)逻辑)逻辑“ “非非非非”

57、 ”指令指令指令指令 指令格式:指令格式:NOT opr NOT opr ;opropropropr注意:注意:NOT指令的操作数只能是存储器或寄存指令的操作数只能是存储器或寄存器,不能是立即数。器,不能是立即数。 NOT 87H 1、逻辑运算指令、逻辑运算指令(5 5)测试指令)测试指令)测试指令)测试指令 指令格式:指令格式: TEST opr1TEST opr1,opr2 opr2 ;opr1 opr1 opr2opr2与与ANDAND指令类似,但运算结果不送回目的操作数,指令类似,但运算结果不送回目的操作数,反映在状态标志位上反映在状态标志位上 。例:判断奇偶性例:判断奇偶性 MOV

58、AL,0AEH TEST AL,00000001B JZ EVEN;ZF=1,跳转,跳转 ;奇数处理;奇数处理EVEN: ;偶数处理;偶数处理2、移位指令、移位指令算术右移算术右移SAR opr,cnt逻辑右移逻辑右移SHR opr,cnt算术左移算术左移SAL opr,cntcnt可可以是以是1或者或者CL,表示移表示移位次数。位次数。B/W 逻辑左移逻辑左移SHL opr,cnt说明说明操作操作移位指令移位指令0CF高位高位低位低位CF00CF高位高位低位低位高位高位低位低位CF高位高位低位低位2、移位指令、移位指令NOTE:1)移位次数)移位次数1,必须把移位次数放到,必须把移位次数放到

59、CL寄存寄存器中。器中。SHL AL,5 2)逻辑移位指令把操作数看成是无符号数,)逻辑移位指令把操作数看成是无符号数,算术移位指令把操作数看成是带符号数。算术移位指令把操作数看成是带符号数。3)只有移位次数为)只有移位次数为1时,时,OF才有意义。左移才有意义。左移后如果后如果CF和最高位不同则和最高位不同则OF=1,逻辑右移,逻辑右移后如果最高位与次高位不同则后如果最高位与次高位不同则OF=1。2、移位指令、移位指令带进位循环右移带进位循环右移RCR opr,cnt带进位循环左移带进位循环左移RCL opr,cnt循环右移循环右移ROR opr,cntcnt可为可为1或或CL,表示移表示移

60、位次数位次数.B/W循环左移循环左移ROL opr,cnt说明说明操作操作循环移位指令循环移位指令CFCFCFCF例:做例:做4510的运算(利用左移实现乘法运算)的运算(利用左移实现乘法运算) MOV CL,3 ;置移位次数;置移位次数 MOV AX,-45 ; MOV BX,-45 ; SAL AX,CL ;乘;乘8后送后送AX SAL BX,1 ;乘;乘2后送后送BX ADD AX,BX ;乘;乘10后送后送AX随堂程序设计:以下小程序主要用哪些指随堂程序设计:以下小程序主要用哪些指随堂程序设计:以下小程序主要用哪些指随堂程序设计:以下小程序主要用哪些指令来完成?令来完成?令来完成?令来

61、完成? 实现多字节数相加实现多字节数相加实现多字节数相加实现多字节数相加 比较两个数的大小比较两个数的大小比较两个数的大小比较两个数的大小(包括带符号数和无符号数)(包括带符号数和无符号数)(包括带符号数和无符号数)(包括带符号数和无符号数) 判断一个带符号数的正负判断一个带符号数的正负判断一个带符号数的正负判断一个带符号数的正负 判断一个数是否为判断一个数是否为判断一个数是否为判断一个数是否为 判断一个数的奇偶性判断一个数的奇偶性判断一个数的奇偶性判断一个数的奇偶性 将一个数求负将一个数求负将一个数求负将一个数求负 非压缩非压缩非压缩非压缩BCDBCDBCDBCD码转换为码转换为码转换为码转

62、换为ASCIIASCIIASCIIASCII码码码码 小写字母转换为大写字母小写字母转换为大写字母小写字母转换为大写字母小写字母转换为大写字母 将某寄存器清零将某寄存器清零将某寄存器清零将某寄存器清零 简单的乘除法运算简单的乘除法运算简单的乘除法运算简单的乘除法运算四、串操作指令四、串操作指令实现对一个字节串或一个字串的操作。实现对一个字节串或一个字串的操作。实现对一个字节串或一个字串的操作。实现对一个字节串或一个字串的操作。串操作指令的共同特点:串操作指令的共同特点:串操作指令的共同特点:串操作指令的共同特点:1 1)DSDS:SISI寻址源操作数,允许段超越,寻址源操作数,允许段超越,寻址

63、源操作数,允许段超越,寻址源操作数,允许段超越,ESES:DIDI寻址目的操作数,不允许段超越;寻址目的操作数,不允许段超越;寻址目的操作数,不允许段超越;寻址目的操作数,不允许段超越;2 2)DF=0DF=0时,时,时,时,SISI和和和和DIDI增量变化,增量变化,增量变化,增量变化,DF=1DF=1时,时,时,时,SISI和和和和DIDI减量变化;减量变化;减量变化;减量变化;3 3)通过在指令前加重复前缀实现串操作。)通过在指令前加重复前缀实现串操作。)通过在指令前加重复前缀实现串操作。)通过在指令前加重复前缀实现串操作。基本串操作指令基本串操作指令基本串操作指令基本串操作指令1)串传

64、送串传送串传送串传送 MOVSB ;(DI)(SI) SI1,DI1 MOVSW ;(DI)(SI) SI2,DI 23)串存入串存入串存入串存入 STOSB ;(DI)AL DI1 STOSW ;(DI)AX DI 22)串装载串装载串装载串装载 LODSB ;AL(SI) SI1 LODSW ;AX(SI) SI24)串比较)串比较)串比较)串比较 CMPSB ;(SI)()(DI) SI1,DI1 CMPSW ;(SI)()(DI) SI2,DI 25)串扫描串扫描串扫描串扫描 SCASB ;AL(DI) DI1 SCASW ;AX(DI) DI 2MOVS、STOS指令前可以加重复前缀

65、指令前可以加重复前缀REPCMPS、SCAS指令前可以加重复前缀指令前可以加重复前缀REPZ/REPE(查找不相等)或(查找不相等)或REPNZREPNE(查找相等)(查找相等)REP如果如果CX=0,则退出,则退出REP 执行执行REP后面的基本串操作指令一次后面的基本串操作指令一次 CX CX1,修改,修改SI、DI 重复重复 REPE/REPZ如果如果CX=0或或ZF=0,则退出,则退出REP 执行执行REP后面的基本串操作指令一次后面的基本串操作指令一次 CX CX1,修改,修改SI、DI 重复重复 REPNE/REPNZ如果如果CX=0或或ZF=1,则退出,则退出REP 执行执行RE

66、P后面的基本串操作指令一次后面的基本串操作指令一次 CX CX1,修改,修改SI、DI 重复重复 串操作指令重复前缀含义串操作指令重复前缀含义串操作指令重复前缀含义串操作指令重复前缀含义执行重复串操作之前的准备工作:执行重复串操作之前的准备工作:1)对)对SI、DI赋值,分别指向源串和目的串;赋值,分别指向源串和目的串;2)若为串扫描,还要对)若为串扫描,还要对AL或或AX赋值;赋值;3)对)对CX赋值,置循环次数;赋值,置循环次数;4)设置方向标志位)设置方向标志位DF,决定,决定SI、DI的变化方向的变化方向例例例例1 1:将数据段中首地址为:将数据段中首地址为:将数据段中首地址为:将数据

67、段中首地址为BUFFER1BUFFER1的的的的200200个字节传送到个字节传送到个字节传送到个字节传送到附加段首地址为附加段首地址为附加段首地址为附加段首地址为BUFFER2BUFFER2的内存单元中。的内存单元中。的内存单元中。的内存单元中。.BUFFER1BUFFER2200个个200个个.LEA SI,BUFFER1LEA DI,BUFFER2MOV CX,200CLDREP MOVSBREP MOVSB执行过程:执行过程:如果如果CX=0,则退出,则退出REP传送一个字节传送一个字节CX1,SI+1,DI+1重复重复 例例例例2 2:在:在:在:在ES:2000H4000HES:2

68、000H4000H中查找中查找中查找中查找 A A 。MOV DI,2000HMOV AL,AMOV CX,2001HCLDREPNE SCASBDEC DIREPNE SCASB执行过程:执行过程:如果如果CX=0或或ZF=1,则退出,则退出REPNE将(将(DI)与)与AL比较比较若相等,令若相等,令ZF=1CX1,DI+1重复重复 .ES:2000HES:4000H.41H五、控制转移指令五、控制转移指令n n转移地址操作数的寻址方式转移地址操作数的寻址方式转移地址操作数的寻址方式转移地址操作数的寻址方式n n控制转移指令控制转移指令控制转移指令控制转移指令(一)转移地址操作数的寻址方式

69、(一)转移地址操作数的寻址方式n n段内直接寻址段内直接寻址段内直接寻址段内直接寻址n n段内间接寻址段内间接寻址段内间接寻址段内间接寻址n n段间直接寻址段间直接寻址段间直接寻址段间直接寻址n n段间间接寻址段间间接寻址段间间接寻址段间间接寻址在同一代码段内寻址在同一代码段内寻址在同一代码段内寻址在同一代码段内寻址在两个代码段之间寻址在两个代码段之间寻址在两个代码段之间寻址在两个代码段之间寻址1、段内直接寻址:转移地址的有效地址由当、段内直接寻址:转移地址的有效地址由当前前IP加加8位或位或16位位移量(带符号数)得到位位移量(带符号数)得到例:例:JMP 06HJMP 06HIP=0020

70、HIP=0026H.JMP06HMOV06H1、段内直接寻址:转移地址的有效地址由当、段内直接寻址:转移地址的有效地址由当前前IP加加8位或位或16位位移量(带符号数)得到位位移量(带符号数)得到若为若为8位位移量,转移范围在位位移量,转移范围在 -128+127之间,之间,常称为常称为短转移短转移;若为若为16位位移量,转移范围在位位移量,转移范围在 -32768+32767之间,常称为之间,常称为近转移近转移;转移地址可以用符号来表示,若为转移地址可以用符号来表示,若为8位,在符位,在符号前加号前加SHORT ;若为;若为16位,在符号前加位,在符号前加NEAR PTR。2、段内间接寻址:

71、转移地址的有效地址在寄、段内间接寻址:转移地址的有效地址在寄存器或内存单元中存器或内存单元中例:例:JMP BX JMP BX ;IPIPBXBXJMP JMP WORD PTRWORD PTR BP+1000H BP+1000H3、段间直接寻址:指令中直接给出转移地址、段间直接寻址:指令中直接给出转移地址的段基址和偏移地址的段基址和偏移地址例:例:JMP 2000HJMP 2000H:0100H 0100H ;CSCS2000H2000H,IP IP 0100H0100HJMP JMP FAR PTRFAR PTR NEXT NEXT用符号表示的转移地址用符号表示的转移地址段间转移操作符段间

72、转移操作符4、段间间接寻址:转移地址的段基址和偏移、段间间接寻址:转移地址的段基址和偏移地址在四个内存单元中地址在四个内存单元中例:例:J JMP MP DWORD PTRDWORD PTR BX BX取双字取双字设设DS=3000HDS=3000H,BX=2000HBX=2000H32000H当当前前数数据据段段.10H00H40H00HIP=0010HCS=4000HJMP.当当前前代代码码段段转转移移到到的的代代码码段段.MOV40010H(二)控制转移指令(二)控制转移指令1 1、无条件转移、无条件转移、无条件转移、无条件转移指令指令指令指令2 2、条件转移、条件转移、条件转移、条件转

73、移指令指令指令指令3 3、循环控制指令、循环控制指令、循环控制指令、循环控制指令4 4、过程调用指令、过程调用指令、过程调用指令、过程调用指令1、无条件转移指令、无条件转移指令指令格式:指令格式:JMPSHORT opr ;段内直接短转移;段内直接短转移JMPNEAR PTR opr ;段内直接近转移;段内直接近转移JMPWORD PTR opr ;段内间接转移;段内间接转移JMPreg ;段内间接转移;段内间接转移JMPFAR PTR opr ;段间直接转移;段间直接转移JMPDWORD PTR opr ;段间间接转移;段间间接转移1、无条件转移指令、无条件转移指令对操作数的说明:对操作数的

74、说明:1)opr常用符号表示。对于直接转移,常用符号表示。对于直接转移,opr是是转移地址;对于间接转移,转移地址;对于间接转移,opr是存放转移是存放转移地址的存储单元。地址的存储单元。2)reg只能是只能是BX、SI、DI、BP2、条件转移指令、条件转移指令条件转移指令只能是短转移,条件转移指令只能是短转移,即:转即:转移指令的下一条指令到目标地址之间移指令的下一条指令到目标地址之间的位移量必须在的位移量必须在-128+127之间。之间。指令格式:指令格式:教材教材P84条件转移指令前边要有条件转移指令前边要有影响相关状态影响相关状态标志位的指令标志位的指令。3、循环控制指令、循环控制指令

75、LOOP opr ; CXCX1, ; 若若CX0则转移到则转移到oprLOOPZ/LOOPE opr ; CXCX1, ; ZF=1且且CX0则转移到则转移到oprLOOPNZ/LOOPNE opr ; CXCX1, ; ZF=0且且CX0则转移到则转移到opr opr为符号地址,也称为标号;为符号地址,也称为标号; 使用使用LOOP指令前,应给计数器指令前,应给计数器CX预置计数值预置计数值4、过程调用指令、过程调用指令(1 1)过程调用指令)过程调用指令)过程调用指令)过程调用指令CALLCALL 指令格式:指令格式:CALL oprCALL opr 若是段内调用,若是段内调用,opro

76、pr为子程序的入口偏移地址;为子程序的入口偏移地址; 若是段间调用,若是段间调用,opropr为子程序的入口段地址和偏为子程序的入口段地址和偏移地址移地址(2 2)过程返回指令)过程返回指令)过程返回指令)过程返回指令RETRET 指令格式:指令格式:RETRETCALL proc1CS:IP(断点)(断点)主程序主程序proc1RET将断点将断点CS、IP压入堆栈压入堆栈将将proc1送新的送新的CS、IP调用调用将断点从堆栈弹出将断点从堆栈弹出到到CS:IP返回返回六、处理器指令六、处理器指令CLCCLC;清进位标志,;清进位标志,CF 0CF 0STCSTC;置进位标志,;置进位标志,C

77、F 1CF 1CMCCMC ;进位标志取反,;进位标志取反,CF CF CLDCLD;清方向标志,;清方向标志,DF 0 DF 0 STDSTD;置方向标志,;置方向标志,DF 1 DF 1 CLICLI;清中断标志,;清中断标志,IF 0 IF 0 STISTI;置中断标志,;置中断标志,IF 1 IF 1 CFCF六、处理器指令六、处理器指令WAIT WAIT ;等待,;等待,TESTTEST引脚有效后退出等待状态引脚有效后退出等待状态NOPNOP ;不执行操作,占用;不执行操作,占用3 3个时钟周期个时钟周期HLTHLT ;暂停;暂停CPUCPU的工作,等待外部中断到来,的工作,等待外部

78、中断到来, ;中断结束后,;中断结束后,CPUCPU继续工作继续工作一、一、一、一、8028680286扩充与增加的指令扩充与增加的指令扩充与增加的指令扩充与增加的指令 二、二、二、二、8038680386扩充与增加的指令扩充与增加的指令扩充与增加的指令扩充与增加的指令 三、三、三、三、8048680486增加的指令增加的指令增加的指令增加的指令 四、四、四、四、PentiumPentium系列系列系列系列CPUCPU的指令系统的指令系统的指令系统的指令系统3.4 高档CPU扩充与增加的指令1 1压入堆栈指令压入堆栈指令压入堆栈指令压入堆栈指令PUSHPUSH。 指令格式及操作:指令格式及操作

79、:指令格式及操作:指令格式及操作: PUSH srcPUSH src 指令格式与指令格式与指令格式与指令格式与8086/80888086/8088指令系统中的指令系统中的指令系统中的指令系统中的PUSHPUSH指令格式一样,但其操作数除指令格式一样,但其操作数除指令格式一样,但其操作数除指令格式一样,但其操作数除了可以是了可以是了可以是了可以是1616位的寄存器和存储器之外,还可以是一个位的寄存器和存储器之外,还可以是一个位的寄存器和存储器之外,还可以是一个位的寄存器和存储器之外,还可以是一个1616位的立即数。也位的立即数。也位的立即数。也位的立即数。也就是说,就是说,就是说,就是说,802

80、8680286允许将一个允许将一个允许将一个允许将一个1616位的立即数压入堆栈位的立即数压入堆栈位的立即数压入堆栈位的立即数压入堆栈。例如:。例如:。例如:。例如: PUSH 2AC0HPUSH 2AC0H PUSH -100 PUSH -100 PUSH 5600 PUSH 56002 2带符号数乘法指令带符号数乘法指令带符号数乘法指令带符号数乘法指令IMULIMUL。 指令格式及操作:指令格式及操作:指令格式及操作:指令格式及操作:IMUL src IMUL src ;AXALAXAL(srcsrc)(字节乘法)(字节乘法)(字节乘法)(字节乘法) DXDX,AXAXAXAX(srcsr

81、c)(字)(字)(字)(字乘法)乘法)乘法)乘法)IMUL reg16IMUL reg16,datadata ;reg16 reg16 datareg16 reg16 dataIMUL reg16IMUL reg16,reg16/mem16reg16/mem16,datadata ;reg16 reg16/mem16 datareg16 reg16/mem16 data一、一、80286扩充与增加的指令扩充与增加的指令 3 3移位指令移位指令移位指令移位指令8028680286的移位指令的移位指令的移位指令的移位指令允许用一个常数来指定移位或循环移位的次数允许用一个常数来指定移位或循环移位的次

82、数允许用一个常数来指定移位或循环移位的次数允许用一个常数来指定移位或循环移位的次数,以逻辑左移为例,指令的格式为:以逻辑左移为例,指令的格式为:以逻辑左移为例,指令的格式为:以逻辑左移为例,指令的格式为: SHL destSHL dest,datadata目标操作数仍然是目标操作数仍然是目标操作数仍然是目标操作数仍然是8 8位或位或位或位或1616位的寄存器或存储器操作数,源操作数位的寄存器或存储器操作数,源操作数位的寄存器或存储器操作数,源操作数位的寄存器或存储器操作数,源操作数datadata的取值范围为的取值范围为的取值范围为的取值范围为131131之间之间之间之间。例如:。例如:。例如

83、:。例如:SHL BXSHL BX,9 9SAR BYTE PTR BX+SISAR BYTE PTR BX+SI,5 5ROR ALROR AL,4 4RCL WORD PTR DI+DATARCL WORD PTR DI+DATA,一、一、80286扩充与增加的指令扩充与增加的指令 4 4堆栈指令堆栈指令堆栈指令堆栈指令8028680286增加了两条堆栈指令。增加了两条堆栈指令。增加了两条堆栈指令。增加了两条堆栈指令。(1 1)通用寄存器压栈指令通用寄存器压栈指令通用寄存器压栈指令通用寄存器压栈指令PUSHAPUSHA。指令格式及操作:。指令格式及操作:。指令格式及操作:。指令格式及操作:

84、 PUSHAPUSHAPUSHAPUSHA指令将所有的指令将所有的指令将所有的指令将所有的1616位通用寄存器,即位通用寄存器,即位通用寄存器,即位通用寄存器,即AXAX、CXCX、DXDX、BXBX、SPSP、BPBP、SISI和和和和DIDI的内容顺序压入堆栈。的内容顺序压入堆栈。的内容顺序压入堆栈。的内容顺序压入堆栈。(2 2)通用寄存器出栈指令通用寄存器出栈指令通用寄存器出栈指令通用寄存器出栈指令POPAPOPA。指令格式及操作:。指令格式及操作:。指令格式及操作:。指令格式及操作: POPAPOPA该指令将当前堆栈栈顶的内容,按照与该指令将当前堆栈栈顶的内容,按照与该指令将当前堆栈栈

85、顶的内容,按照与该指令将当前堆栈栈顶的内容,按照与PUSHAPUSHA指令相反的顺序弹出到各通用寄存指令相反的顺序弹出到各通用寄存指令相反的顺序弹出到各通用寄存指令相反的顺序弹出到各通用寄存器,即器,即器,即器,即DIDI、SISI、BPBP、SPSP、BXBX、DXDX、CXCX和和和和AXAX。5 5串输入、输出指令串输入、输出指令串输入、输出指令串输入、输出指令8028680286增加了两种串操作指令:增加了两种串操作指令:增加了两种串操作指令:增加了两种串操作指令:串输入指令串输入指令串输入指令串输入指令INSINS和串输出指令和串输出指令和串输出指令和串输出指令OUTSOUTS。6

86、6检查边界指令检查边界指令检查边界指令检查边界指令BOUNDBOUND。指令格式及操作:指令格式及操作:指令格式及操作:指令格式及操作:BOUND reg16BOUND reg16,mem16mem16此指令的操作是检查寄存器给出的带符号数是否在存储器给出的边界范围之内此指令的操作是检查寄存器给出的带符号数是否在存储器给出的边界范围之内此指令的操作是检查寄存器给出的带符号数是否在存储器给出的边界范围之内此指令的操作是检查寄存器给出的带符号数是否在存储器给出的边界范围之内 一、一、80286扩充与增加的指令扩充与增加的指令 一、一、80286扩充与增加的指令扩充与增加的指令 7设置堆栈空间指令设

87、置堆栈空间指令ENTER。指令格式及操作:指令格式及操作:ENTER data16,data8ENTER指令为高级语言正在执行的过程设置一个堆栈空间,指令有指令为高级语言正在执行的过程设置一个堆栈空间,指令有两个操作数,第一个操作数为两个操作数,第一个操作数为16位的常数(取值位的常数(取值0FFFFH),表示堆),表示堆栈空间的字节数;第二个操作数为栈空间的字节数;第二个操作数为8位常数(取值位常数(取值0FFH),表示允许),表示允许过程嵌套的层数。过程嵌套的层数。8释放堆栈空间指令释放堆栈空间指令LEAVE。指令格式及操作:指令格式及操作:LEAVELEAVE指令没有操作数,其功能是释放

88、上述指令没有操作数,其功能是释放上述ENTER指令所设置的堆指令所设置的堆栈空间。栈空间。9保护模式控制指令。保护模式控制指令。80286微处理器允许有两种工作模式:实地址模式和保护虚地址模式。微处理器允许有两种工作模式:实地址模式和保护虚地址模式。保护模式通常由操作系统进行初始化和控制,因此这些指令一般由系统保护模式通常由操作系统进行初始化和控制,因此这些指令一般由系统程序员使用,而应用程序员通常不需要使用这些指令。程序员使用,而应用程序员通常不需要使用这些指令。二、二、80386扩充与增加的指令扩充与增加的指令 132位操作位操作80386的指令除了可以进行的指令除了可以进行8位和位和16

89、位操作以外,还位操作以外,还可以进行可以进行32位(双字)操位(双字)操作作,例如:,例如: MOV ECX,0FFFF0000H ;32位常数传送,位常数传送,ECX为为32位寄存器位寄存器 ADD EAX,ESI ;32位加法运算,位加法运算,EAX、ESI都为都为32位寄存器位寄存器 MOVSD ;双字串传送;双字串传送 PUSH 12345678H ;双字压入堆栈;双字压入堆栈 SHL EAX,30 ;32位寄存器逻辑左移位寄存器逻辑左移2可同时使用可同时使用四个数据段寄存器四个数据段寄存器DS、ES、FS和和GS,因此在指令中可以加,因此在指令中可以加段超越前缀段超越前缀“FS:”或

90、或“GS:”例如:例如: MOV FS:SI+5,AX ADD ECX,GS:DATABX二、二、80386扩充与增加的指令扩充与增加的指令 380386扩充的寻址方式。扩充的寻址方式。(1)80386还允许使用不超过还允许使用不超过32位的立即数作为操作数,也允许位的立即数作为操作数,也允许使用使用32位的通用寄存器位的通用寄存器EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI作为操作数,段寄存器除了作为操作数,段寄存器除了CS、DS、SS、ES外,还可以使用外,还可以使用FS和和GS。例如:。例如: MOV EAX,0FFFFFFFFH ;立即寻址;立即寻址 MOV EAX,

91、EBX ;寄存器寻址;寄存器寻址 MOV EAX,FS ;寄存器寻址;寄存器寻址(2)80386的存储器寻址方式也完全兼容的存储器寻址方式也完全兼容8086/8088的存储器寻址的存储器寻址方式,方式,8个个32位通用寄存器都可以作为基址寄存器使用位通用寄存器都可以作为基址寄存器使用,除了除了ESP以以外的外的7个个32位通用寄存器都可以作为变址寄存器使用位通用寄存器都可以作为变址寄存器使用。另外,还可以。另外,还可以将变址寄存器的内容乘以比例因子(将变址寄存器的内容乘以比例因子(1、2、4、8),形成带比例变),形成带比例变址的各种寻址方式。址的各种寻址方式。二、二、80386扩充与增加的指

92、令扩充与增加的指令 4 4其他扩充功能的指令。其他扩充功能的指令。其他扩充功能的指令。其他扩充功能的指令。(1 1)带符号数乘法指令)带符号数乘法指令)带符号数乘法指令)带符号数乘法指令IMULIMUL。80286CPU80286CPU与与与与8086/80888086/8088相比,已经扩充了相比,已经扩充了相比,已经扩充了相比,已经扩充了IMULIMUL指令的功能,增加指令的功能,增加指令的功能,增加指令的功能,增加了两种操作数的形式。在此基础上,了两种操作数的形式。在此基础上,了两种操作数的形式。在此基础上,了两种操作数的形式。在此基础上,8038680386又扩充了又扩充了又扩充了又扩

93、充了IMULIMUL指令的功指令的功指令的功指令的功能,不仅可以进行能,不仅可以进行能,不仅可以进行能,不仅可以进行3232位的乘法运算,而且位的乘法运算,而且位的乘法运算,而且位的乘法运算,而且当指令中有两个操作数时,当指令中有两个操作数时,当指令中有两个操作数时,当指令中有两个操作数时,不再限定其中一个必须是常数,不再限定其中一个必须是常数,不再限定其中一个必须是常数,不再限定其中一个必须是常数,即又扩充了以下指令格式:即又扩充了以下指令格式:即又扩充了以下指令格式:即又扩充了以下指令格式: IMUL regIMUL reg,reg/mem reg/mem ;reg reg mem reg

94、 reg mem (2 2)条件转移指令)条件转移指令)条件转移指令)条件转移指令JccJcc。在在在在8086/80888086/8088和和和和8028680286中,条件转移指令的操作数必须是一个短标号,中,条件转移指令的操作数必须是一个短标号,中,条件转移指令的操作数必须是一个短标号,中,条件转移指令的操作数必须是一个短标号,即指令的转移范围只能在即指令的转移范围只能在即指令的转移范围只能在即指令的转移范围只能在-128+127-128+127字节之间。字节之间。字节之间。字节之间。8038680386扩充了条件转扩充了条件转扩充了条件转扩充了条件转移指令的功能,不仅可以转移到一个短标

95、号,而且也移指令的功能,不仅可以转移到一个短标号,而且也移指令的功能,不仅可以转移到一个短标号,而且也移指令的功能,不仅可以转移到一个短标号,而且也可以实现可以实现可以实现可以实现3232位位位位的长位移量的条件转移的长位移量的条件转移的长位移量的条件转移的长位移量的条件转移。二、二、80386扩充与增加的指令扩充与增加的指令 5 5数据扩展并传送指令。数据扩展并传送指令。数据扩展并传送指令。数据扩展并传送指令。 MOVSX destMOVSX dest,src src ;符号扩展传送;符号扩展传送;符号扩展传送;符号扩展传送 MOVZX destMOVZX dest,src src ;零扩展

96、传送;零扩展传送;零扩展传送;零扩展传送6 63232位标志寄存器压入堆栈和弹出堆栈指令。位标志寄存器压入堆栈和弹出堆栈指令。位标志寄存器压入堆栈和弹出堆栈指令。位标志寄存器压入堆栈和弹出堆栈指令。 PUSHFDPUSHFD POPFD POPFD7 7远地址指针传送指令。远地址指针传送指令。远地址指针传送指令。远地址指针传送指令。 LFS destLFS dest,srcsrc LGS dest LGS dest,srcsrc LSS dest LSS dest,srcsrc8 8符号扩展指令。符号扩展指令。符号扩展指令。符号扩展指令。 CWDE CWDE ;将;将;将;将AXAX最高位送到

97、最高位送到最高位送到最高位送到EAXEAX高高高高1616位中的每一位位中的每一位位中的每一位位中的每一位 CDQ CDQ ;将;将;将;将EAXEAX的最高位送到的最高位送到的最高位送到的最高位送到EDXEDX中的每一位中的每一位中的每一位中的每一位二、二、80386扩充与增加的指令扩充与增加的指令 9 9双精度移位指令。双精度移位指令。双精度移位指令。双精度移位指令。 SHLD dest1SHLD dest1,dest2dest2,count/CL count/CL ;将(;将(;将(;将(dest1dest1,dest2dest2)左移)左移)左移)左移countcount位或位或位或位

98、或CL CL 指定的位数指定的位数指定的位数指定的位数 SHRD dest1SHRD dest1,dest2dest2,count/CL count/CL ;将(;将(;将(;将(dest1dest1,dest2dest2)右移)右移)右移)右移countcount位或位或位或位或CLCL 指定的位数指定的位数指定的位数指定的位数1010条件设置指令。条件设置指令。条件设置指令。条件设置指令。 SETcc destSETcc dest1111位测试指令。位测试指令。位测试指令。位测试指令。 BT destBT dest,count/reg count/reg ;对指定位测试;对指定位测试;对指

99、定位测试;对指定位测试 BTC destBTC dest,count/reg count/reg ;对指定位测试并求反;对指定位测试并求反;对指定位测试并求反;对指定位测试并求反 BTR destBTR dest,count/reg count/reg ;对指定位测试并置;对指定位测试并置;对指定位测试并置;对指定位测试并置0 0 BTS dest BTS dest,count/reg count/reg ;对指定位测试并置;对指定位测试并置;对指定位测试并置;对指定位测试并置1 11212位扫描指令。位扫描指令。位扫描指令。位扫描指令。 BSF destBSF dest,src src ;从

100、低位开始扫描;从低位开始扫描;从低位开始扫描;从低位开始扫描 BSR destBSR dest,src src ;从高位开始扫描;从高位开始扫描;从高位开始扫描;从高位开始扫描三、三、80486增加的指令增加的指令 1 1字节交换指令字节交换指令字节交换指令字节交换指令BSWAPBSWAP。 BSWAP reg32 BSWAP reg32 ;第一字节与第四字节,第二字节与第三字节交换;第一字节与第四字节,第二字节与第三字节交换;第一字节与第四字节,第二字节与第三字节交换;第一字节与第四字节,第二字节与第三字节交换2 2互换并相加指令互换并相加指令互换并相加指令互换并相加指令XADDXADD。

101、XADD destXADD dest,src src ;destdestdest+srcdest+src,src src destdest3 3比较并交换指令比较并交换指令比较并交换指令比较并交换指令CMPXCHGCMPXCHG。 CMPXCHG opr1CMPXCHG opr1,opr2opr24 4使超高速缓存无效并不写回内存指令使超高速缓存无效并不写回内存指令使超高速缓存无效并不写回内存指令使超高速缓存无效并不写回内存指令INVDINVD。 INVDINVD5 5使超高速缓存无效并写回内存指令使超高速缓存无效并写回内存指令使超高速缓存无效并写回内存指令使超高速缓存无效并写回内存指令WBI

102、NVDWBINVD。 INVDINVD6 6使使使使TLBTLB(转换后援缓冲器)无效指令(转换后援缓冲器)无效指令(转换后援缓冲器)无效指令(转换后援缓冲器)无效指令INVLPGINVLPG。 INVLPG memINVLPG mem四、四、Pentium系列系列CPU的指令系统的指令系统PentiumPentium指令系统主要在指令系统主要在指令系统主要在指令系统主要在8048680486的基础上新增了的基础上新增了的基础上新增了的基础上新增了6 6条指令。条指令。条指令。条指令。1 18 8字节比较交换指令字节比较交换指令字节比较交换指令字节比较交换指令CMPXCHG8BCMPXCHG8

103、B。 CMPXCHG8B mem64CMPXCHG8B mem642 2处理器特征识别指令处理器特征识别指令处理器特征识别指令处理器特征识别指令CPUIDCPUID。 CPUID CPUID ;根据;根据;根据;根据EAXEAX中的不同值返回厂商识别标识等不同的信息中的不同值返回厂商识别标识等不同的信息中的不同值返回厂商识别标识等不同的信息中的不同值返回厂商识别标识等不同的信息3 3读时间标识计数器指令读时间标识计数器指令读时间标识计数器指令读时间标识计数器指令RDTSCRDTSC。 RDTSC RDTSC ;将时间标识计数器的;将时间标识计数器的;将时间标识计数器的;将时间标识计数器的646

104、4位值返回到(位值返回到(位值返回到(位值返回到(EDXEDX,EAXEAX)中)中)中)中4 4读测试寄存器指令读测试寄存器指令读测试寄存器指令读测试寄存器指令RDMSRRDMSR。 RDMSRRDMSR;将;将;将;将ECXECX指定的测试寄存器的值送到(指定的测试寄存器的值送到(指定的测试寄存器的值送到(指定的测试寄存器的值送到(EDXEDX,EAXEAX)中)中)中)中5 5写测试寄存器指令写测试寄存器指令写测试寄存器指令写测试寄存器指令WRMSRWRMSR。 WRMSRWRMSR;将(;将(;将(;将(EDXEDX,EAXEAX)的)的)的)的6464位值写入位值写入位值写入位值写入

105、ECXECX指定的测试寄存器中指定的测试寄存器中指定的测试寄存器中指定的测试寄存器中6 6从系统管理方式返回指令从系统管理方式返回指令从系统管理方式返回指令从系统管理方式返回指令RSMRSM。 RSMRSM;从系统管理工作方式返回;从系统管理工作方式返回;从系统管理工作方式返回;从系统管理工作方式返回本章小结指令系统:指令系统:传送指令、算术运算指令、逻辑运算指传送指令、算术运算指令、逻辑运算指令、串操作指令、控制转移指令、处理器指令令、串操作指令、控制转移指令、处理器指令寻址方式:寻址方式:操作数操作数数据操数据操作数作数转移地址转移地址操作数操作数立即操作数立即操作数寄存器操作数寄存器操作

106、数存储器操作数存储器操作数I/OI/O接口操作数接口操作数立即操作数立即操作数寄存器操作数寄存器操作数存储器操作数存储器操作数七种寻址方式七种寻址方式四种寻址方式四种寻址方式指令格式:指令格式:操作码操作码操作数,操作数操作数,操作数例:计算两个多字节例:计算两个多字节16进制数之和:进制数之和:3B74AC60F8H+20D59E36C1H=?3BH74HACH60HF8H9EHC1H36HD5H20HDATA1DATA2DISILEA SI,DATA2LEA DI,DATA1MOV CX,5CLCMOV AL,SIADC DI,ALINC SIINC DIDEC CXJNZ LP:B9HD

107、ILP;ZF=0,跳转,跳转LOOP LP ;CX-1,CX0,跳转,跳转97H4AH4AH5CHSIDISI作业作业1.指出下列指令中哪些指令是错误的,简述理由。指出下列指令中哪些指令是错误的,简述理由。(1) MOVAL,SI(2)MOV2000H,3000H(3) PUSHAL(4)INC1000H (5)XCHGBX,1234H(6)MOVCS,AX(7)MOVDS,7654H (8)MULDX,7654H (9)AND7654H,DX(10) SHLAL,6(11) JEDWORD PTR 2000H(12) ADDES,BX(13) SUBAX,DX2. 请用指令实现以下要求:请用

108、指令实现以下要求:(1)将)将AL寄存器的内容清零;寄存器的内容清零;(2)将)将AL寄存器的内容符号位置寄存器的内容符号位置1;(3)将)将AL寄存器的内容高寄存器的内容高4位清零;位清零;(4)将)将AL寄存器的内容寄存器的内容D2位置位置1,其余位不变;,其余位不变;(5)将)将AL寄存器的内容寄存器的内容D2位清位清0,其余位不变;,其余位不变;(6)将)将AL寄存器的内容寄存器的内容D0 D2 D4 D6 位取反,其余位不变。位取反,其余位不变。3.已知有关寄存器的内容为:已知有关寄存器的内容为:DS=0F100H,SS=0A100H,SI=1000H, DI=2000H, BX=3

109、000H, BP=4000H,偏移量,偏移量TABLE=0AH,COUNT=8BH,说明下列指令源操作数的物理地址:,说明下列指令源操作数的物理地址:(1)MOVAX,BP(2)MOVCX,SI+5 (3)MOVAL,TABLEBPDI(4)MOVAL,COUNTBX (5)MOV AL,BXSI4. 阅读下列程序说明其运行结果阅读下列程序说明其运行结果(1)设初值:(设初值:(4000H)=A, (4100H)=B MOVBX,4000HMOVBH,BXMOVAL,BX 结果:结果:AL=?(2) LEABX,TABLEMOVCL,BXLOOPER:INCBXMOVAL,BXCMPAL,0A

110、HJNCX1ADDAL,30HJMPNEXTX1:ADDAL,37HNEXT:MOV BX ,ALDECCLJNZ LOOPER05H01H0CH09H0FH06H0AH08H05H0DHTABLE5. 编写程序,并用编写程序,并用emu调试,调试,附调试结果截图。附调试结果截图。(1)已知被减数和减数均为)已知被减数和减数均为6个字节的十六进制数,分别存放在首地址为个字节的十六进制数,分别存放在首地址为DATA1和和DATA2的内存区,低位在前,高位在后,使用的内存区,低位在前,高位在后,使用8086指令编写减指令编写减法程序段并将相减的结果存放在首地址为法程序段并将相减的结果存放在首地址为

111、DATA3的内存区。的内存区。 (可参考(可参考P63例例3-1)(2)屏幕第一行显示屏幕第一行显示“Please input string:”,第二行显示,第二行显示“The output string:”,从键盘接收一串字符,并逆序显示。(提示:用,从键盘接收一串字符,并逆序显示。(提示:用int 21h 的的09H、0AH号和号和02H号功能调用。号功能调用。P108-109)(3)比较以)比较以BUFFER为首地址的内存区为首地址的内存区10个个16位带符号数,找出最大数放入位带符号数,找出最大数放入MAX和和MAX+1单元。(可参考单元。(可参考P88例例3-15)(4)计算)计算36-29,并将结果的压缩,并将结果的压缩BCD码放入码放入SUM单元。单元。(5)编写延时一秒子程序,并实现每隔编写延时一秒子程序,并实现每隔1秒钟屏幕显示一次秒钟屏幕显示一次A字符,显示字符,显示5次。(调试现象次。(调试现象大概大概1秒钟即可)秒钟即可)6. 编程实现将编程实现将AZ存放到存放到6000H:0000H开始的开始的26个存储单元,在个存储单元,在protues存储器设计(存储器设计(8086连接两片连接两片6264)中调试成功。)中调试成功。

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

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

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