1、1第第3 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立即数可以是无符号或带符号数,其数值应在立即数可以是无符号或带符号数,其数值应在可取值范围内。可取值范
4、围内。11寄存器操作数:n参加运算的数存放在指令给出的寄存器中,参加运算的数存放在指令给出的寄存器中,可以是可以是16位或位或8位。位。n例:例:nMOV AX,BXnMOV DL,CH12存储器操作数n参加运算的数存放在存储器的某一个或某两参加运算的数存放在存储器的某一个或某两个单元中。个单元中。n表现形式:表现形式: 立即数或寄存器立即数或寄存器 中的内容是存放所寻找数据的单元的偏移地址中的内容是存放所寻找数据的单元的偏移地址13存储器操作数例n例:例: MOV AX,1200H MOV AL,1200H22H11H1200H偏移地址偏移地址AH AL 14四、指令字长n指令字长:指令字长
5、:n由操作码的长度、操作数地址长度、操作数个由操作码的长度、操作数地址长度、操作数个数决定。数决定。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存放于寄存器中的寻址方式存放于寄存器中的寻址方式
7、n存放于存储器中的寻址方式存放于存储器中的寻址方式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
12、,1100HnMOV 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注意点:
14、注意点:n两操作数字长必须相同两操作数字长必须相同;n两操作数不允许同时为存储器操作数;两操作数不允许同时为存储器操作数;n两操作数不允许同时为段寄存器;两操作数不允许同时为段寄存器;n在源操作数是立即数时,目标操作数不能是段寄存在源操作数是立即数时,目标操作数不能是段寄存器;器;nIP和和CS不作为目标操作数,不作为目标操作数,FLAGS一般也不作为一般也不作为操作数在指令中出现。操作数在指令中出现。41一般数据传送指令例n判断下列指令的正确性:判断下列指令的正确性:nMOV AL,BXnMOV AX,SI05HnMOV BXBP,BXnMOV DS,1000HnMOV DX,09HnMOV
15、 1200,SI42一般数据传送指令应用例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,6
16、4H64H MOV 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 DI010
17、0 B80010 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数据段中的分布
18、 n送上送上2 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
19、 2A 2A-2A 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
20、 2A DSDS: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堆栈指令的操作原理堆栈指令的操作
21、原理n执行过程,执行结果执行过程,执行结果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执
22、行执行 PUSH 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指令的操作数必须是指令的操
23、作数必须是1616位的;位的;n操作数可以是寄存器或存储器两单元,但不能操作数可以是寄存器或存储器两单元,但不能是立即数;是立即数;n不能从栈顶弹出一个字给不能从栈顶弹出一个字给CSCS;nPUSHPUSH和和POPPOP指令在程序中一般成对出现;指令在程序中一般成对出现;nPUSHPUSH指令的操作方向是从高地址向低地址,而指令的操作方向是从高地址向低地址,而POPPOP指令的操作正好相反。指令的操作正好相反。54堆栈操作指令例nMOV AX,1234HnMOV SP,AXnMOV BX,5678HnMOV BX,AHnMOV BX+1,BLnPUSH AXnPUSH BXnPUSH WOR
24、D PTRBX 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根据端口地址码的长度,指令具有两种不同的根据端口地址码的长度,指令具有两种不同的端口地址表现形式。端口地址表现形式。
28、n直接寻址直接寻址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 L
31、EA DI,MEM2 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指令多用于多字节数相加,使用前要先将指令多用于多字节数相加,使用前要先将
34、CF清零。清零。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比较
35、指令比较指令CMP求补指令求补指令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格式:格
37、式:nCMP OPRD1,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
38、SI,BUF MOV 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及存放结果的
39、及存放结果的AXAX,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执行
40、:执行: DXAX/OPRDn结果:结果:nAX=商商 DX=余数余数指指令令要要求求被被除除数数是是除除数数的的双双倍倍字字长长102五、BCD码调整指令n将指令执行的二进制运算结果调整为压缩将指令执行的二进制运算结果调整为压缩BCD码或扩展码或扩展BCD码表示的十进制数。码表示的十进制数。n共共6条,均为隐含寻址方式,隐含的操作数是条,均为隐含寻址方式,隐含的操作数是 AL或或AL、AH;n不能单独使用,要紧跟在相应的算术运算指令不能单独使用,要紧跟在相应的算术运算指令 之后;之后;103逻辑运算和移位指令104指令类型n逻辑运算逻辑运算n与,或,非,异或与,或,非,异或n移位操作移位操作
41、n非循环移位,循环移位非循环移位,循环移位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“与”指令应用例开开 始始取待输出数的取待输出数的偏移地址偏移地址读入状态字读入状态字测试测试bi
43、t1位状态位状态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使某些位不变,某些位置使某些位不
44、变,某些位置“1”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
45、 PTRBXNOT 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, bi
46、t3, bit5位同时为位同时为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
47、WATT120二、移位指令 非循环移位指令非循环移位指令 循环移位指令循环移位指令注:注: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
48、,CL0CF无符号数无符号数的右移的右移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带进位位的循环移位带进位位的循环移位左移
49、左移 ROL右移右移 ROR左移左移 RCL右移右移 RCR指令格式、对操作数的要求与非循环移位指令相同指令格式、对操作数的要求与非循环移位指令相同128不带进位位的循环移位CFCF129带进位位的循环移位CFCF130循环移位指令的应用n用于对某些位状态的测试;用于对某些位状态的测试;n高位部分和低位部分的交换;高位部分和低位部分的交换;n与非循环移位指令一起组成与非循环移位指令一起组成32位或更长字位或更长字长数的移位。长数的移位。P124例例3-34P124例例3-35131程序功能n将将10001000H H开始存放的开始存放的4 4个压缩个压缩BCDBCD码转换码转换为为ASCIIA
50、SCII码存放在码存放在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待操作的数据串称为源串,目标地址称为待操作的数据串称为源串,目标