大学计算机微机原理--第3章指令系统_第1页
大学计算机微机原理--第3章指令系统_第2页
大学计算机微机原理--第3章指令系统_第3页
大学计算机微机原理--第3章指令系统_第4页
大学计算机微机原理--第3章指令系统_第5页
已阅读5页,还剩185页未读 继续免费阅读

下载本文档

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

文档简介

1、1第3章 指令系统2主要内容:n指令系统的一般概念指令系统的一般概念n对操作数的寻址方式对操作数的寻址方式n六大类指令的操作原理:六大类指令的操作原理:操作码的含义操作码的含义指令对操作数的要求指令对操作数的要求指令执行的结果指令执行的结果33.13.1 概述4了解:n指令及指令系统;指令及指令系统;n指令的格式;指令的格式;n指令中的操作数类型;指令中的操作数类型;n指令字长与机器字长;指令字长与机器字长;n指令的执行时间指令的执行时间nCISCCISC和和RISCRISC指令系统指令系统5一、指令与指令系统指令:指令:控制计算机完成某种操作的命令控制计算机完成某种操作的命令指令系统:指令系

2、统:处理器所能识别的所有指令的集合处理器所能识别的所有指令的集合指令的兼容性:指令的兼容性:同一系列机的指令都是兼容的。同一系列机的指令都是兼容的。6二、指令格式指令中应包含的信息:指令中应包含的信息:运算数据的来源运算数据的来源运算结果的去向运算结果的去向执行的操作执行的操作7指令格式操作码操作码 操作数操作数,操作数操作数执行何种操作执行何种操作目标操作数目标操作数源操作数源操作数参加操作的数据或数据存放的地址参加操作的数据或数据存放的地址8指令格式: 零操作数指令:零操作数指令: 操作码操作码 单操作数指令:单操作数指令: 操作码操作码 操作数操作数双操作数指令:双操作数指令: 操作码操

3、作码 操作数,操作数操作数,操作数多操作数指令:多操作数指令: 三操作数及以上三操作数及以上9三、指令中的操作数立即数立即数寄存器寄存器存储器存储器表征参加操作的数据本身表征参加操作的数据本身表征数据存放的地址表征数据存放的地址10立即数操作数n立即数本身是参加操作的数据,可以是立即数本身是参加操作的数据,可以是8位或位或16位,只能作为源操作数。位,只能作为源操作数。 例:例: MOV AX,1234H MOV BL,22Hn立即数无法作为目标操作数立即数无法作为目标操作数n立即数可以是无符号或带符号数,其数值应在立即数可以是无符号或带符号数,其数值应在可取值范围内。可取值范围内。11寄存器

4、操作数:n参加运算的数存放在指令给出的寄存器中,参加运算的数存放在指令给出的寄存器中,可以是可以是16位或位或8位。位。n例:例:nMOV AX,BXnMOV DL,CH12存储器操作数n参加运算的数存放在存储器的某一个或某两参加运算的数存放在存储器的某一个或某两个单元中。个单元中。n表现形式:表现形式: 立即数或寄存器立即数或寄存器 中的内容是存放所寻找数据的单元的偏移地址中的内容是存放所寻找数据的单元的偏移地址13存储器操作数例n例:例: MOV AX,1200H MOV AL,1200H22H11H1200H偏移地址偏移地址AH AL 14四、指令字长n指令字长:指令字长:n由操作码的长

5、度、操作数地址长度、操作数个由操作码的长度、操作数地址长度、操作数个数决定。数决定。15五、指令的执行速度n指令的字长影响指令的执行速度指令的字长影响指令的执行速度n对不同的操作数,指令执行的时间不同:对不同的操作数,指令执行的时间不同: 存储器存储器快!快!立即数立即数寄存器寄存器16六、CISC和RISC指令系统nCISC(complex instruction set computer)n指令的功能强,种类多,常用指令用硬件实现;指令的功能强,种类多,常用指令用硬件实现;n指令系统复杂,难使用。指令系统复杂,难使用。nRISC指令系统指令系统n指令功能较弱,种类少,格式简单;指令功能较弱

6、,种类少,格式简单;n多数指令在一个计算机周期内完成;多数指令在一个计算机周期内完成;n对存储器的结构和存取速度要求较高。对存储器的结构和存取速度要求较高。173.2 寻址方式18寻址方式 寻找操作数所在地址的方法寻找操作数所在地址的方法 寻找转移地址的方法寻找转移地址的方法 本节本节19寻址方式n操作数可能的来源或存放处:操作数可能的来源或存放处:n由指令直接给出由指令直接给出n寄存器寄存器n内存单元内存单元n寻找操作数所在地址的方法可以有三种大类型寻找操作数所在地址的方法可以有三种大类型n指令直接给出的方式指令直接给出的方式n存放于寄存器中的寻址方式存放于寄存器中的寻址方式n存放于存储器中

7、的寻址方式存放于存储器中的寻址方式20一、立即寻址n指令中的源操作数是立即数,即源操作数是参指令中的源操作数是立即数,即源操作数是参加操作的数据本身加操作的数据本身n例:例:MOV AX,1200H12H00HAH ALMOV代代码码段段 立即寻址仅适合于源操作数立即寻址仅适合于源操作数21二、寄存器寻址n参加操作的操作数在参加操作的操作数在CPU的通用寄存器中。的通用寄存器中。n例:例:MOV AX,BX AX BX22三、直接寻址n指令中直接给出操作数的偏移地址指令中直接给出操作数的偏移地址n默认在数据段默认在数据段n例:例:MOV AX,1200H22H11H1200H偏移地址偏移地址

8、数数据据段段AH AL23直接寻址n直接寻址方式下,操作数的段地址默认为数据直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。段,但允许段重设,即由指令定义段。n例:例:MOV AX,ES:1200H24四、寄存器间接寻址n参与操作的操作数存放在内存中,其偏参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。移地址为指令中的寄存器的内容。25寄存器间接寻址例n例:例:MOV AX,BX 设设BX=1200H22H11H1200H偏移地址偏移地址AH AL 11 22数数据据段段代代码码段段MOV26寄存器间接寻址n由寄存器间接给出操作数的偏移地址;由寄存器间

9、接给出操作数的偏移地址;n存放偏移地址的寄存器称为存放偏移地址的寄存器称为间址寄存器间址寄存器,它们,它们是:是:BX,BP,SI,DIn操作数的段地址(数据处于哪个段)取决于选操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:择哪一个间址寄存器: BX,SI,DI BP默认在数据段默认在数据段默认在堆栈段默认在堆栈段27寄存器间接寻址 寄存器寄存器间接寻址间接寻址基址寻址(间址基址寻址(间址寄存器为基址寄存寄存器为基址寄存 器器BX,BP)变址寻址(间址变址寻址(间址寄存器为变址寄存寄存器为变址寄存 器器SI,DI)28五、寄存器相对寻址n操作数的偏移地址为寄存器的内容加上一个位操

10、作数的偏移地址为寄存器的内容加上一个位移量移量n例:例:nMOV AX,BX+DATA 设:设:DS=2000H,BX=0220H,DATA=05H n则:则:AX=20225H29六、基址、变址寻址n操作数的偏移地址为操作数的偏移地址为n一个基址寄存器的内容一个基址寄存器的内容 + 一个变址寄存器的内容;一个变址寄存器的内容;n操作数的段地址由选择的基址寄存器决定操作数的段地址由选择的基址寄存器决定n基址寄存器为基址寄存器为BX,默认在数据段,默认在数据段n基址寄存器为基址寄存器为BP,默认在堆栈段,默认在堆栈段n基址变址寻址方式与相对寻址方式一样,主要基址变址寻址方式与相对寻址方式一样,主

11、要用于一维数组操作。用于一维数组操作。30例:n执行下列指令:执行下列指令:nMOV SI,1100HnMOV BX,SInMOV AX,SI+BX22H11H2200H偏移地址偏移地址AH AL 11 22数数据据段段31七、基址、变址、相对寻址n操作数的偏移地址为:操作数的偏移地址为:n基址寄存器内容基址寄存器内容+变址寄存器内容变址寄存器内容+位移量位移量n操作数的段地址由选择的基址寄存器决定。操作数的段地址由选择的基址寄存器决定。n基址变址相对寻址方式主要用于二维表格操作。基址变址相对寻址方式主要用于二维表格操作。32例:n执行以下程序段:执行以下程序段:nMOV DI,1100HnM

12、OV BP,DInMOV AL,BPDI522H11H2205H偏移地址偏移地址AL 22堆堆栈栈段段33八、隐含寻址n指令中隐含了一个或两个操作数的地址,即操指令中隐含了一个或两个操作数的地址,即操作数在默认的地址中。作数在默认的地址中。n例:例: nMUL BLn指令执行:指令执行:nALBLAX343.3 80863.3 8086指令系统35掌握:n指令码的含义指令码的含义n指令对操作数的要求指令对操作数的要求n指令的对标志位的影响指令的对标志位的影响n指令的功能指令的功能3680868086指令系统从功能上包括六大类:从功能上包括六大类:数据传送数据传送算术运算算术运算逻辑运算和移位逻

13、辑运算和移位串操作串操作程序控制程序控制处理器控制处理器控制37数据传送指令n通用数据传送通用数据传送n输入输出输入输出n地址传送地址传送n标志位操作标志位操作38一、通用数据传送一般数据传送指令一般数据传送指令堆栈操作指令堆栈操作指令交换指令交换指令查表转换指令查表转换指令字位扩展指令字位扩展指令n特点:特点:n该类指令的执行对标志位不产生影响该类指令的执行对标志位不产生影响 391. 一般数据传送指令n一般数据传送指令一般数据传送指令 MOVn格式:格式:nMOV dest,srcn操作:操作:nsrcn例:例:n MOV AL,BL dest40一般数据传送指令n注意点:注意点:n两操作

14、数字长必须相同两操作数字长必须相同;n两操作数不允许同时为存储器操作数;两操作数不允许同时为存储器操作数;n两操作数不允许同时为段寄存器;两操作数不允许同时为段寄存器;n在源操作数是立即数时,目标操作数不能是段寄存在源操作数是立即数时,目标操作数不能是段寄存器;器;nIP和和CS不作为目标操作数,不作为目标操作数,FLAGS一般也不作为一般也不作为操作数在指令中出现。操作数在指令中出现。41一般数据传送指令例n判断下列指令的正确性:判断下列指令的正确性:nMOV AL,BXnMOV AX,SI05HnMOV BXBP,BXnMOV DS,1000HnMOV DX,09HnMOV 1200,SI

15、42一般数据传送指令应用例n将将( (* *) )的的ASCIIASCII码码2 2AHAH送入内存数据段送入内存数据段1000H1000H开开始的始的100100个单元中。个单元中。n题目分析:题目分析:n确定首地址确定首地址n确定数据长度确定数据长度n写一次数据写一次数据n修改单元地址修改单元地址n修改长度值修改长度值n判断写完否?判断写完否?n未完继续写入,否则结束未完继续写入,否则结束1063H100B1000H 2AH数据段数据段2AH2AH2AH43一般数据传送指令应用例程序段:程序段: MOV DIMOV DI,1000H1000H MOV CX MOV CX,64H64H MO

16、V AL MOV AL,2AH2AHAGAINAGAIN:MOV DIMOV DI,ALAL INC DI INC DI ;DI+1DI+1 DEC CX DEC CX ;CX-1CX-1 JNZ AGAIN JNZ AGAIN ;CX0CX0则继续则继续 HLT HLT 44上段程序在代码段中的存放形式n設設CS=109EHCS=109EH,IP=0100HIP=0100H,则各条指令在代码段中的存则各条指令在代码段中的存放地址如下:放地址如下: CS : IP CS : IP 机器指令机器指令 汇编指令汇编指令 109E 109E:0100 B80010 MOV DI0100 B80010

17、 MOV DI,1000H1000H 109E 109E:0103 0103 . . MOV CX MOV CX,64H64H 109E 109E:0105 0105 . . MOV AL MOV AL,2AH2AH 109E 109E:0107 0107 . . MOV DI MOV DI,ALAL 109E 109E:0109 INC DI0109 INC DI 109E 109E:010A DEC CX010A DEC CX 109E 109E:010B JNZ 0107H010B JNZ 0107H 109E 109E:010D HLT010D HLT45数据段中的分布 n送上送上2

18、2AHAH后数据段中相应存储单元的内容改变后数据段中相应存储单元的内容改变如下:如下:DSDS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2

19、A 2A 2A 2A 2A 2A 2A 2A 1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2ADSDS:1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS

20、:1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A 1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DSDS:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 001060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00偏移地址偏移地址DI462. 堆栈操作指令掌握:掌握:n有关堆栈的概念有关堆栈的概念n栈顶、栈首、栈底栈顶、栈首、栈底n堆栈指令的操作原理堆栈指令的操作原理n执行过程,

21、执行结果执行过程,执行结果47堆栈操作的原则n先进后出先进后出n以字为单位以字为单位48堆栈操作指令n压栈指令压栈指令 PUSH 格式格式: PUSH OPRDn出栈指令出栈指令 POP 格式格式: POP OPRD16位寄存器或位寄存器或存储器两单元存储器两单元16位寄存器或位寄存器或存储器两单元存储器两单元49压栈指令 PUSHn指令执行过程:指令执行过程:nSP - 2 SP - 2 SP SPn操作数高字节操作数高字节 SP+1SP+1n操作数低字节操作数低字节 SPSP SP堆堆栈栈段段SP高高8位位低低8位位50压栈指令的操作设设AX=1234H,SP=1200H执行执行 PUSH

22、 AX 指令后堆栈区的状态:指令后堆栈区的状态: 1200H 堆堆栈栈段段 SP-2=11FEH12H34H1200H 堆堆栈栈段段12H 34HAX入栈后入栈后入栈前入栈前51出栈指令POPn指令执行过程:指令执行过程: SPSP SP+1 SP+1 SP SP+2 SP SP+2操作数低字节操作数低字节操作数高字节操作数高字节 SP堆堆栈栈段段SP高高8位位低低8位位52出栈指令的操作执行执行 POP AX 12H34H11FEH 堆堆栈栈段段代代码码段段PUSH 12 34 AX SP+21200H 出栈后出栈后出栈前出栈前53堆栈操作指令说明n指令的操作数必须是指令的操作数必须是161

23、6位的;位的;n操作数可以是寄存器或存储器两单元,但不能操作数可以是寄存器或存储器两单元,但不能是立即数;是立即数;n不能从栈顶弹出一个字给不能从栈顶弹出一个字给CSCS;nPUSHPUSH和和POPPOP指令在程序中一般成对出现;指令在程序中一般成对出现;nPUSHPUSH指令的操作方向是从高地址向低地址,而指令的操作方向是从高地址向低地址,而POPPOP指令的操作正好相反。指令的操作正好相反。54堆栈操作指令例nMOV AX,1234HnMOV SP,AXnMOV BX,5678HnMOV BX,AHnMOV BX+1,BLnPUSH AXnPUSH BXnPUSH WORD PTRBX

24、nPOP WORD PTRBXnPOP AXnPOP BX 如此,会使如此,会使AX和和BX的内容互换的内容互换553. 交换指令n格式:格式: XCHG REG XCHG REG,MEM/REGMEM/REGn注:注:n两操作数必须有一个是寄存器操作数两操作数必须有一个是寄存器操作数n不允许使用段寄存器不允许使用段寄存器。n例:例: nXCHGXCHGAXAX,BXBXnXCHGXCHG20002000,CLCL564. 查表指令n格式:格式: XLATn说明:说明:n用用BX的内容代表表格首地址,的内容代表表格首地址,AL内容为表内位移量,内容为表内位移量,BX+AL得到要查找元素的偏移地

25、址得到要查找元素的偏移地址n操作:操作:n将将BX+AL所指单元的内容送所指单元的内容送AL57查表指令例数据段中存放有一数据段中存放有一张张ASCIIASCII码转换表,码转换表,设首地址为设首地址为20002000H H,现欲查出表中第现欲查出表中第1111个代码的个代码的ASCIIASCII码码303132.394142.45462000H+02000H+110129ABEF58查表指令例nMOV BX,2000HnMOV AL,BX+0BH595. 字位扩展指令 n将符号数的符号位扩展到高位;将符号数的符号位扩展到高位;n指令为零操作数指令,采用隐含寻址,隐含指令为零操作数指令,采用隐

26、含寻址,隐含的操作数为的操作数为AX及及AX,DXn无符号数的扩展规则为在高位补无符号数的扩展规则为在高位补060字节到字的扩展指令n格式:格式:nCBWn操作:操作:n将将AL内容扩展到内容扩展到AXn规则:规则:n若最高位若最高位=1,则执行后,则执行后AH=FFHn若最高位若最高位=0,则执行后,则执行后AH=00H61字到双字的扩展指令n格式:格式:nCWDn操作:操作:n将将AX内容扩展到内容扩展到DX AXn规则:规则:n若最高位若最高位=1,则执行后,则执行后DX=FFFFHn若最高位若最高位=0,则执行后,则执行后DX=0000H62字位扩展指令例判断以下指令执行结果:判断以下

27、指令执行结果: MOV AL,44H CBW MOV AX,0AFDEH CWD MOV AL,86H CBW63二、输入输出指令掌握:掌握:n指令的格式及操作指令的格式及操作n指令的两种寻址方式指令的两种寻址方式n指令对操作数的要求指令对操作数的要求64输入输出指令n专门面向专门面向I/O端口操作的指令端口操作的指令n指令格式:指令格式:n输入指令:输入指令: IN acc,PORTn输出指令输出指令 :OUT PORT,acc端口地址端口地址65指令寻址方式n根据端口地址码的长度,指令具有两种不同的根据端口地址码的长度,指令具有两种不同的端口地址表现形式。端口地址表现形式。n直接寻址直接寻

28、址n端口地址为端口地址为8位时,指令中直接给出位时,指令中直接给出8位端口地址;位端口地址;n寻址寻址256个端口。个端口。n间接寻址间接寻址n端口地址为端口地址为16位时,指令中的端口地址必须由位时,指令中的端口地址必须由DX指指定;定;n可寻址可寻址64K个端口。个端口。66I/O指令例nIN AX,80HnMOV DX,2400HnIN AL,DXnOUT 35H ,AXnOUT AX,35H67三、三、地址传送指令取偏移地址指令取偏移地址指令LEA*LDS指令指令*LES指令指令68取偏移地址指令LEAn操作:操作:n将变量的将变量的1616位偏移地址取出送目标寄存器位偏移地址取出送目

29、标寄存器n当程序中用符号地址表示内存偏移地址时,当程序中用符号地址表示内存偏移地址时,须使用该指令。须使用该指令。n格式:格式: LEA REGLEA REG,MEMMEM n指令要求:指令要求:n源操作数源操作数必须是一个必须是一个存储器操作数存储器操作数,目标操作数,目标操作数通常是间址寄存器。通常是间址寄存器。符号地址符号地址69LEA指令n比较下列指令:比较下列指令: MOV SI,DATA1 LEA SI,DATA1 MOV BX,BX LEA BX,BX DATA1符号符号地址地址12H34H1100H88H77HBX=1100H执行结果:执行结果:SI=1234H执行结果:执行结

30、果:SI=DATA1执行结果:执行结果:BX=7788H执行结果:执行结果:BX=1100H70LEA指令在程序中的应用n将数据段中首地址为将数据段中首地址为MEM1 的的50个字节的数个字节的数据传送到同一逻辑段首地址为据传送到同一逻辑段首地址为MEM2的区域的区域存放。编写相应的程序段存放。编写相应的程序段 。 71LEA指令在程序中的应用 开开 始始取源地取源地址址取目标地取目标地址址送数据块长度送数据块长度到到CL传送一个字传送一个字节节修改地址指修改地址指针针修改计数值修改计数值计数值计数值=0? 结结 束束NY72LEA指令在程序中的应用 LEA SI,MEM1 LEA DI,ME

31、M2 MOV CL,50NEXT: MOV AL,SI MOV DI,AL INC SI INC DI DEC CL JNZ NEXT HLT MEM112H34HMEM273四、标志位操作指令 LAHFSAHFPUSHFPOPF隐含操作数隐含操作数AH隐含操作数隐含操作数FLAGS741. LAHF,SAHFnLAHF n操作:操作:n将将FLAGS的低的低8位装入位装入AHCFPFAFZFCF.AHFLAGSD15D0D7D0n SAHF执行与执行与LAHF相反的操作相反的操作752. PUSHF,POPFn针对针对FLAGS的堆栈操作指令的堆栈操作指令 将标志寄存器压栈或从堆栈弹出将标志

32、寄存器压栈或从堆栈弹出76算术运算类指令77算术运算类指令n加法运算指令加法运算指令n减法运算指令减法运算指令n乘法指令乘法指令n除法指令除法指令算术运算指令的执行大多对状态标志位会产生影响算术运算指令的执行大多对状态标志位会产生影响78一、加法指令 普通加法指令普通加法指令ADD 带进位位的加法指令带进位位的加法指令ADC 加加1指令指令INC加法指令对操作数的要求与加法指令对操作数的要求与MOV指令相同指令相同791. ADD指令n格式:格式:n ADD OPRD1,OPRD2n操作:操作:n OPRD1+OPRD2ADD指令的执行对全部指令的执行对全部6个状态标志位都产生影响个状态标志位

33、都产生影响OPRD180ADD指令例 MOV AL,78H ADD AL,99H指令执行后指令执行后6个状态标志位的状态个状态标志位的状态81ADD指令例 01111000 + 10011001 000100011标志位状态:标志位状态: CF= SF= AF= ZF= PF= OF=101010822. ADC指令n指令格式、对操作数的要求、对标志位的影响指令格式、对操作数的要求、对标志位的影响与与ADD指令完全一样指令完全一样n指令的操作:指令的操作:n OPRD1+OPRD2+CF OPRD1nADC指令多用于多字节数相加,使用前要先将指令多用于多字节数相加,使用前要先将CF清零。清零。

34、83ADC指令应用例求两个求两个20B20B数的和数的和nLEA SI,M1nLEA DI,M2nMOV CX,20nCLC ;使;使CF=0NEXT : MOV AL,SI ADC DI,ALnINC SInINC DInDEC CX nJNZ NEXTnHLT M112H34HM2843. INC指令n格式:格式: INC OPRDn操作:操作: OPRD+1 OPRD常用于在程序中修改地址指针常用于在程序中修改地址指针不能是段寄存器不能是段寄存器或立即数或立即数85二、减法指令普通减法指令普通减法指令SUB考虑借位的减法指令考虑借位的减法指令SBB减减1指令指令DEC比较指令比较指令CM

35、P求补指令求补指令NEG减法指令对操作数的要求与对应的加法指令相同减法指令对操作数的要求与对应的加法指令相同861. SUB指令n格式:格式:nSUB OPRD1,OPRD2n操作:操作:nOPRD1- OPRD2 OPRD1n对标志位的影响与对标志位的影响与ADD指令同指令同872. SBB指令n指令格式、对操作数的要求、对标志位的影响指令格式、对操作数的要求、对标志位的影响与与SUB指令完全一样指令完全一样n指令的操作:指令的操作:nOPRD1- OPRD2- CF OPRD1883. DEC指令n格式:格式:nDEC OPRDn操作:操作:nOPRD - 1 OPRD指令对操作数的要求与

36、指令对操作数的要求与INCINC相同相同指令常用于在程序中修改计数值指令常用于在程序中修改计数值89应用程序例 MOV BL,2NEXT1 :MOV CX,0FFFFHNEXT2: DEC CX JNZ NEXT2 ; ZF=0转转NEXT2 DEC BL JNZ NEXT1 ; ZF=0转转NEXT1 HLT ; 暂停执行暂停执行904. NEG指令n格式:格式:nNEG OPRDn操作:操作:n0 - OPRD OPRD8/16位寄存器或位寄存器或存储器操作数存储器操作数用用0减去操作数,相当于对该操作数求补码减去操作数,相当于对该操作数求补码915. CMP指令n格式:格式:nCMP O

37、PRD1,OPRD2n操作:操作:nOPRD1- OPRD2 n指令执行的结果不影响目标操作数,仅影响指令执行的结果不影响目标操作数,仅影响标志位!标志位!92CMP指令n用途:用途:n用于比较两个数的大小,可作为条件转移指令转移用于比较两个数的大小,可作为条件转移指令转移的条件的条件n指令对操作数的要求及对标志位的影响与指令对操作数的要求及对标志位的影响与SUB指令相同指令相同93CMP指令n两个无符号数的比较:两个无符号数的比较: CMP AX,BX 若若 AX BX 若若 AX BX OF和和SF状态不同状态不同 AX BX95CMP指令例 LEA BX,MAX LEA SI,BUF M

38、OV CL,20 MOV AL,SINEXT:INC SI CMP AL,SI JNC GOON ;CF=0转移转移 XCHG SI,ALGOON:DEC CL JNZ NEXT MOV BX,AL HLT96程序功能 MAXBUFXXHXXHXXH在在20个数中找最大个数中找最大的数,并将其存放的数,并将其存放在在MAX单元中。单元中。97三、乘法指令无符号的乘法指令无符号的乘法指令MUL*带符号的乘法指令带符号的乘法指令IMULn注意点:注意点:n乘法指令采用隐含寻址,隐含的是存放被乘数的累乘法指令采用隐含寻址,隐含的是存放被乘数的累加器加器ALAL或或AXAX及存放结果的及存放结果的AX

39、AX,DX.DX.981. 无符号数乘法指令n格式:格式: MUL OPRD 不能是立即数不能是立即数n操作:操作: OPRD为字节数为字节数 OPRD为为16位数位数 ALOPRDAXOPRDDXAXAX99无符号数乘法指令例nMUL BYTE PTRBX BXXXHAL XXHAX100四、除法指令无符号除法指令无符号除法指令n格式:格式:nDIV OPRD有符号除法指令有符号除法指令n格式:格式:nIDIV OPRD101除法指令的操作若若OPRD是字节数是字节数n执行:执行:AX/OPRD n结果:结果:nAL=商商 AH=余数余数若若OPRD是双字节数是双字节数n执行:执行: DXA

40、X/OPRDn结果:结果:nAX=商商 DX=余数余数指指令令要要求求被被除除数数是是除除数数的的双双倍倍字字长长102五、BCD码调整指令n将指令执行的二进制运算结果调整为压缩将指令执行的二进制运算结果调整为压缩BCD码或扩展码或扩展BCD码表示的十进制数。码表示的十进制数。n共共6条,均为隐含寻址方式,隐含的操作数是条,均为隐含寻址方式,隐含的操作数是 AL或或AL、AH;n不能单独使用,要紧跟在相应的算术运算指令不能单独使用,要紧跟在相应的算术运算指令 之后;之后;103逻辑运算和移位指令104指令类型n逻辑运算逻辑运算n与,或,非,异或与,或,非,异或n移位操作移位操作n非循环移位,循

41、环移位非循环移位,循环移位105 一、逻辑运算n逻辑运算指令对逻辑运算指令对 操作数的操作数的 要求大多与要求大多与MOV指令指令 相同。相同。n“非非”运算指令运算指令 要求操作数要求操作数 不能是立即数;不能是立即数;n除除“非非”运算指令运算指令 外,其余指令的执行都会外,其余指令的执行都会使标志位使标志位OF=CF=01061.“与”指令:n格式:格式: n AND OPRD1,OPRD2n操作:操作: n两操作数相两操作数相“与与”,结果送目标地址。,结果送目标地址。107“与”指令的应用n实现两操作数实现两操作数 按位相与的按位相与的 运算运算nAND BL,SIn使目标操作数的使

42、目标操作数的 某些位不变,某些位清零某些位不变,某些位清零nAND AL,0FHn在操作数在操作数 不变的不变的 情况下使情况下使CF和和OF清零清零nAND AX,AX108“与”指令应用例n从地址为从地址为3F8H 端口中读入一个字节数,端口中读入一个字节数,如果该数如果该数 bit1位为位为1,则可从,则可从38FH端口将端口将DATA为首地址的为首地址的 一个字输出,否则就不一个字输出,否则就不能进行数能进行数 据传送。据传送。 编写相应的编写相应的 程序段。程序段。109“与”指令应用例开开 始始取待输出数的取待输出数的偏移地址偏移地址读入状态字读入状态字测试测试bit1位状态位状态

43、Bit1=1?取输入口地址取输入口地址取输出口地址取输出口地址 输出一个字输出一个字NY110“与”指令应用例 LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX AND AL,02H JZ WATT ;ZF=1转移转移 MOV DX,38FH MOV AX,SI OUT DX,AX1112.“或”运算指令n格式:格式: nOR OPRD1,OPRD2n操作:操作: n两操作数相两操作数相“或或”,结果送目标地址,结果送目标地址112“或”指令的应用n实现两操作数实现两操作数 相相 “或或”的的 运算运算nOR AX,DIn使某些位不变,某些位置使某些位不变,某些位置“1

44、”nOR CL,0FHn在不改变操作数的在不改变操作数的 情况下使情况下使OF=CF=0nOR AX,AX113“或”指令的应用例 OR AL,AL JPE GOON OR AL,80H GOON:.PF=1转移转移114“或”指令的应用将一个二进将一个二进制数制数9变为字变为字符符9如何实现如何实现?1153.“非”运算指令n格式:格式:nNOT OPRDNOT OPRDn操作:操作:n操作数按位取反再送回原地址操作数按位取反再送回原地址n注:注:n指令中的操作数不能是立即数指令中的操作数不能是立即数n指令的执行对标志位无影响指令的执行对标志位无影响n例:例:NOT BYTE PTRBXNO

45、T BYTE PTRBX1164.“异或”运算指令n格式:格式: nXOR OPRD1,OPRD2n操作:操作:n两操作数相两操作数相“异或异或”,结果送目标地址,结果送目标地址n例:例: XOR BL,80H XOR AX,AX1175.“测试”指令n格式:格式: nTEST OPRD1,OPRD2n操作:操作: n执行执行“与与”运算,但运算的结果不送回目运算,但运算的结果不送回目标地址。标地址。n应用:应用:n常用于测试某些位的状态常用于测试某些位的状态118例:n从地址为从地址为3F8H的的 端口中读入一个字节数,当端口中读入一个字节数,当该数的该数的 bit1, bit3, bit5

46、位同时为位同时为1时时,可从,可从38FH端口将端口将DATA为首地址的为首地址的一个字输出,否则就不能进行数一个字输出,否则就不能进行数 据传送。据传送。 编写相应的编写相应的 程序段。程序段。119源程序代码: LEA SI,DATA MOV DX,3F8HWATT:IN AL,DX MOV DX,38FH MOV AX,SI OUT DX,AXAND AL,2AHCMP AL,2AHJNZ WATTTEST AL,02HJZ WATT ;ZF=1转移转移TEST AL,08HJZ WATTTEST AL,20HJZ WATTAND AL,2AHXOR AL,2AHJNZ WATT120二

47、、移位指令 非循环移位指令非循环移位指令 循环移位指令循环移位指令注:注:n 移动一位时由指令直接给出;移动一位时由指令直接给出;n 移动两位及以上,则移位次数由移动两位及以上,则移位次数由CL指定。指定。1211. 非循环移位指令n逻辑左移逻辑左移n算术左移算术左移n逻辑右移逻辑右移n算术右移算术右移122算术左移和逻辑左移n算术左移指算术左移指 令:令: SAL OPRD,1 SAL OPRD,CLn逻辑左移指逻辑左移指 令:令: SHL OPRD,1 SHL OPRD,CL有符号数有符号数无符号数无符号数123逻辑右移n格式:格式: SHR OPRD,1 SHR OPRD,CL0CF无符

48、号数无符号数的右移的右移124逻辑右移例:nMOV AL,68HnMOV CL,2nSHR AL,CL0CF0 1 1 0 1 0 AL0 0 0 0 0 1 1 0 1 0 0ALCF0 00 0 0 1 1 0 1 0 ALCF0 0移动移动1次次移动移动2次次125算术右移n格式:格式: SAR OPRD,1 SAR OPRD,CL有符号数有符号数的右移的右移CF126非循环移位指令的应用n左移可实现乘法运算左移可实现乘法运算n右移可实现除法运算右移可实现除法运算 1272. 循环移位指令n不带进位位的循环移位不带进位位的循环移位n带进位位的循环移位带进位位的循环移位左移左移 ROL右移

49、右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同128不带进位位的循环移位CFCF129带进位位的循环移位CFCF130循环移位指令的应用n用于对某些位状态的测试;用于对某些位状态的测试;n高位部分和低位部分的交换;高位部分和低位部分的交换;n与非循环移位指令一起组成与非循环移位指令一起组成32位或更长字位或更长字长数的移位。长数的移位。P124例例3-34P124例例3-35131程序功能n将将10001000H H开始存放的开始存放的4 4个压缩个压缩BCDBCD码转换码转换为为ASCIIASCII码存放在

50、码存放在30003000H H开始的单元中开始的单元中去。去。12H34H56H78H1000H3000H132程序例 MOV SI,1000H MOV DI,3000H MOV CX,4Next:MOV AL,SI MOV BL,AL AND AL,0FH OR AL,30H MOV DI,AL INC DI MOV AL,BLPUSH CXMOV CL,4133串操作指令134串操作指令说明n针对数据块或字符串的操作;针对数据块或字符串的操作;n可实现存储器到存储器的数据传送;可实现存储器到存储器的数据传送;n待操作的数据串称为源串,目标地址称为待操作的数据串称为源串,目标地址称为目标串。

51、目标串。135串操作指令的特点n源串一般存放在数据段,偏移地址由源串一般存放在数据段,偏移地址由SI指定。允许段指定。允许段重设;重设;n目标串必须在附加段,偏移地址由目标串必须在附加段,偏移地址由DI指定;指定;n指令自动修改地址指针,修改方向由指令自动修改地址指针,修改方向由DF决定。决定。 DF=0 DF=1n数据块长度值由数据块长度值由CX指定指定n可增加自动重复前缀以实现自动修改可增加自动重复前缀以实现自动修改CX内容。内容。增地址方向;增地址方向;减地址方向;减地址方向;136重复前缀n无条件重复无条件重复nREPn条件重复条件重复nREPE 相等重复相等重复nREPZ 为零重复为

52、零重复nREPNE 不相等重复不相等重复nREPNZ 不为零重复不为零重复CX0 ZF=1CX0 ZF=0CX0 重复重复137串操作指令流程(以传送操作为例)取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?NY设操作方向设操作方向138串操作指令n串传送串传送 MOVSn串比较串比较 CMPSn串扫描串扫描 SCASn串装入串装入 LODSn串送存串送存 STOS1391. 串传送指令n格式:格式: MOVS OPRD1,OPRD2 MOVSB MOVSWn串传送指令常与无条件重复

53、前缀连用串传送指令常与无条件重复前缀连用140串传送指令n对比用对比用MOV指令和指令和MOVS指令实现将指令实现将200个字节数据从内存的一个区域送到个字节数据从内存的一个区域送到另一个区域的程序段。另一个区域的程序段。141串传送指令例n用串传送指令实现用串传送指令实现200个字节数据的传送:个字节数据的传送: LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT1422. 串比较指令n格式:格式: CMPS OPRD1,OPRD2 CMPSB CMPSWn串比较指令常与条件重复前缀连用,指令的执串比较指令常与条件重复前缀连用,指令的执

54、行不改变操作数,仅影响标志位。行不改变操作数,仅影响标志位。n前缀的操作对标志位不影响前缀的操作对标志位不影响143串比较指令例测试测试200个字节数据是否传送正确:个字节数据是否传送正确:LEA SI,MEM1LEA DI,MEM2MOV CX,200CLD REPE CMPSB TEST CX,00FFH JZ STOP DEC SI MOV AL,SI MOV BX,SISTOP:HLT 1443. 串扫描指令n格式:格式: SCAS OPRD SCASB SCASWn执行与执行与CMPS指令相似的操作,只是这里的源指令相似的操作,只是这里的源 操作数是操作数是AX或或AL目目 标标操作

55、数操作数145串扫描指令的应用n常用于在指定存储区域中寻找某个关键字。常用于在指定存储区域中寻找某个关键字。146串装入指令n格式:格式: LODS OPRD LODSB LODSWn操作:操作:n对字节:对字节:n对对 字:字:源操作数源操作数DS:SIDS:SIDS:SIDS:SIALALAXAX1474. 串装入指令n用于将内存某个区域的数据串依次装入累加用于将内存某个区域的数据串依次装入累加 器,以便显示或输出到接口。器,以便显示或输出到接口。nLODS指令一般不加重复前缀。指令一般不加重复前缀。1485. 串存储指令n格式:格式: STOS OPRD STOSB STOSWn操作:操

56、作:n对字节:对字节: ALALn对对 字:字: AXAX目目 标标操作数操作数ES:DIES:DI149串存储指令的应用n常用于将内存某个区域置同样的值常用于将内存某个区域置同样的值n此时:此时:n将待送存的数据放入将待送存的数据放入AL(字节数)或(字节数)或AX(字数据(字数据););n确定操作方向(增地址确定操作方向(增地址/减地址)和区域大小(串减地址)和区域大小(串长度值);长度值);n使用串存储指令使用串存储指令+无条件重复前缀,实现数据传送无条件重复前缀,实现数据传送。150串存储指令例 内存某个区域清零n将内存某单元清零将内存某单元清零n设计思想:设计思想: 区域首地址送区域

57、首地址送ES:DI串长度送串长度送CX置方向标志置方向标志DF0送累加器送累加器AL执行串送存指令执行串送存指令151程序控制指令n转移指令转移指令n循环控制循环控制n过程调用过程调用n中断控制中断控制152程序的执行方向n程序控制类指令的本质是:程序控制类指令的本质是:n控制程序的执行方向控制程序的执行方向n决定程序执行方向的因素:决定程序执行方向的因素:nCS,IPn控制程序执行方向的方法:控制程序执行方向的方法:n修改修改CS 和和IP ,则程序转向另一个代码段执行;,则程序转向另一个代码段执行;n仅修改仅修改IP,则程序将改变当前的执行顺序,转向本,则程序将改变当前的执行顺序,转向本代

58、码段内其它某处执行。代码段内其它某处执行。153一、转移指令无条件无条件转移指令转移指令 无条件转移到目标地址,执行新的指令无条件转移到目标地址,执行新的指令有条件转移指令有条件转移指令 在具备一定条件的情况下转移到目标地址在具备一定条件的情况下转移到目标地址通过修改指令的通过修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址实现程序的转移实现程序的转移1541. 无条件转移指令n格式:格式: JMP OPRD目标地址目标地址与与JMP在同在同一代码段一代码段与与JMP不在同不在同一代码段一代码段原则上可实现在整个内存空间的转移原则上可实现在整个内存空间的转移155无条件段内转移n

59、转移的转移的目标地址目标地址在当前代码段内,段地址不在当前代码段内,段地址不 改改变。变。n即:即:目标地址目标地址是是16位偏移地址。位偏移地址。指令中直接给出指令中直接给出目标地址目标地址由指令中的寄存器或由指令中的寄存器或存储器操作数指出目存储器操作数指出目标地址标地址段内直接转移段内直接转移段内间接转移段内间接转移156段内直接转移n转移的目标地址由指令直接给出转移的目标地址由指令直接给出n格式:格式:nJMP Label近地址标号近地址标号157段内直接转移示图JMPLabel代代码码段段位移量位移量下一条要执行指令的偏移地址下一条要执行指令的偏移地址=当前当前IP+位移量位移量JM

60、P Label158段内间接转移n段内间接转移段内间接转移n转移的目标地址存放在某个转移的目标地址存放在某个16位寄存器或存储器位寄存器或存储器 的某两个单元中的某两个单元中n例:例:nJMP BXn若:若:BX=1200Hn则:转移的目标地址则:转移的目标地址=1200HJMP代代码码段段1200HMOV159段内间接转移例nJMP WORD PTRBX 设:设:BX=1200HJMP代代码码段段数数据据段段BX=1200XXHXXHIP指令码指令码160无条件段间转移n转移的转移的目标地址目标地址不在当前代码段内。不在当前代码段内。n目标地址目标地址为为32位,包括段地址和偏移地址。位,包

温馨提示

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

评论

0/150

提交评论