




已阅读5页,还剩143页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章 Intel 8086/8088 CPU 的寻址方式和指令系统,重点关注: 指令的汇编格式 指令的基本功能 指令支持的寻址方式 指令的执行对标志位的影响 指令的特殊要求,二、指令系统,1、数据传送指令 2、算术指令 3、逻辑指令 4、串处理指令 5、控制转移指令 6、处理机控制指令,1、数据传送指令:实现内部寄存器之间、内部寄存器与存储器之间的数据传送。,通用 数据传送指令 MOV PUSH POP XCHG 累加器专用传送指令 IN OUT XLAT 地址传送指令 LEA LDS LES 标志传送指令 LAHF SAHF PUSHF POPF,2、 算术运算指令,加法指令:ADD ADC INC 减法指令:SUB SBB DEC NEG CMP 乘法指令:MUL IMUL 除法指令:DIV IDIV CBW CWD 十进制调整指令: 压缩的BCD码: DAA DAS 非压缩的BCD码: AAA AAS AAM AAD,3、逻辑运算和移位指令,逻辑运算指令 AND OR NOT XOR TEST 移位指令 SAL/SHL SAR SHR 旋转指令 ROL ROR RCL RCR,4、串处理指令,指令 MOVS CMPS SCAS LODS 前缀 REP REPE/REPZ REPNE/REPNZ,5、控制转移指令,无条件转移 JMP 条件转移 JZ/JE JNZ/JNE JS JNS JO JNO JP/JPE JNP/JPO JB/JNAE/JC JNB/JAE/JNC JE/JZ JNE/JNZ JA/JNBE JAE/JNB/JNC JB/JNAE/JC JBE/JNA JE/JZ JNE/JNZ JG/JNLE JGE/JNL JL/JNGE JLE/JNG JCXZ 循环转移 LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE 子程序调用 CALL RET 中断调用 INT INTO IRET,6、处理机控制指令,标志处理指令 CF标志 CLC STC CMC DF标志 CLD STD IF标志 CLI STI 其他处理指令 NOP HLT WAIT ESC LOCK,MOV指令 基本格式 MOV DST,SRC ;(D) (S) D表示目的操作数,S表示源操作数。D和S可以是寄存器或存储器,S还可以是立即数。传送的数可以是字节、字或双字。存储器和通用寄存器传送数据,类型(字节、字、双字)由通用寄存器确定。,注意: * DST 不能是 CS * DST、SRC 不能同时为段寄存器 MOV DS, ES * 立即数不能直接送段寄存器 MOV DS, 2000H * DST 不能是立即数 * DST、SRC 不能同时为存储器寻址,8086微处理器,PUSH POP 基本格式 PUSH SRC POP DST SRC、DST必须为字数据,为REG、SEGREG、MEM。一般情况下成对使用。,进栈指令: PUSH SRC 执行操作: ( SP ) ( SP ) 2 ( ( SP ) + 1 , ( SP ) ) ( SRC ) 出栈指令: POP DST 执行操作: ( DST ) ( ( SP ) + 1 , ( SP ) ) ( SP ) ( SP ) + 2 堆栈:先进后出的存储区,存在于堆栈段,任何时候 SP都指向栈顶。 注意: * 堆栈操作必须以字为单位 * 不影响标志位 * 不能用立即寻址方式 PUSH 1234H * DST 不能是 CS POP CS ,push 指令的执行过程,push ax (1)SP=SP2; (2)将ax中的内容送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。,push 指令的执行过程,pop 指令的执行过程,pop ax (1)将SS:SP指向的内存单元处的数据送入ax中; (2)SP = SP+2,SS:SP指向当前栈顶下面的单元,以当前栈顶下面的单元为新的栈顶。,pop 指令的执行过程,例: PUSH DS SUB AX , AX PUSH AX 例: PUSH AX PUSH BX PUSH CX ;其间用到AX、BX、CX POP CX POP BX POP AX,进栈指令push和出栈指令pop的用法:,注 意,编程的时候要自己操心栈顶超界的问题 ,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。,PUSHF 功能:分别将16位标志寄存器的内容压入堆栈,以后用。 POPF指令 功能:从栈顶弹出一个字送至标志寄存器。, 标志寄存器传送指令 标志送 AH 指令: LAHF 执行操作: ( AH ) ( PSW 的低字节 ) AH 送标志寄存器指令: SAHF 执行操作: ( PSW 的低字节 ) ( AH ) 标志进栈指令: PUSHF 执行操作: ( SP ) ( SP ) - 2 ( ( SP ) + 1 , ( SP ) ) ( PSW ) 标志出栈指令: POPF 执行操作: ( PSW ) ( ( SP ) + 1 , ( SP ) ) ( SP ) ( SP ) + 2 * 影响标志位,XCHG指令 指令格式:XCHG OPR1,OPR2 功能:将源操作数和目的操作数的内容相互交换。 注意:源操作数和目的操作数可以是通用寄存器或存储器,但D和S不得同时是存储器操作数。,交换指令: XCHG OPR1 , OPR2 执行操作: ( OPR1 ) ( OPR2 ) 注意: * 不影响标志位 不允许使用段寄存器 不允许有立即数 例:XCHG BX , BP + SI XCHG AL , BH, 累加器专用传送指令(只限使用 AX 或 AL ) 输入指令( I / O CPU ) 长格式: IN AL , PORT (字节) IN AX , PORT (字) 执行操作:( AL ) ( PORT ) (字节) ( AX ) ( PORT + 1 , PORT ) (字) 短格式: IN AL , DX (字节) IN AX , DX (字) 执行操作:( AL ) ( ( DX ) ) (字节) ( AX ) ( ( DX ) + 1 , ( DX ) ) (字),输出指令( CPU I / O ) 长格式: OUT PORT , AL (字节) OUT PORT , AX (字) 执行操作: ( PORT ) ( AL ) (字节) ( PORT + 1 , PORT ) ( AX ) (字) 短格式: OUT DX , AL (字节) OUT DX , AX (字) 执行操作: ( ( DX ) ) ( AL ) (字节) ( ( DX ) + 1 , ( DX ) ) ( AX ) (字),注意: * 不影响标志位 * 前256个端口号 00H FFH 可直接在指令中指定(长格式) * 如果端口号 256,端口号 DX(短格式),例: IN AX , 28H ; MOV DX , 28H ; IN AX , DX MOV DATA_WORD , AX 例: MOV DX , 3FCH IN AX , DX 例: OUT 5 , AL 例:测试某状态寄存器(端口号 27H)的第 2 位是否为 1 IN AL , 27H TEST AL , 00000100 B JNZ ERROR ; 若第 2 位为 1,转 ERROR 处理,换码指令:XLAT 或 XLAT OPR 执行操作:( AL ) ( ( BX ) + ( AL ) ) 例:MOV BX , OFFSET TABLE ; ( BX ) = 0040H MOV AL, 3 XLAT TABLE 指令执行后 ( AL ) = 33H 注意: * 不影响标志位 * 字节表格(长度不超过256) 首地址 ( BX ) * 需转换代码 ( AL ),LEA指令 指令格式:LEA reg16,EA 其中EA为存储器操作数,reg16为通用寄存器。 功能:取源操作数的有效地址送至目的操作数通用寄存器中。, 地址传送指令 有效地址送寄存器指令: LEA REG , SRC 执行操作: ( REG ) SRC,LDS指令 指令格式:LDS reg,EA ;(Reg16)(EA) (DS)(EA+2) 功能:从存储器中取出操作数的地址指针,首先从存储器取出第一个字或双字送至目的操作数,然后再从EA+2取出后一个字送至段寄存器DS中。 LES指令 指令格式:LES reg,EA ;(Reg16)(EA) (ES)(EA+2) 功能:从存储器中取出操作数的地址指针,首先从存储器取出第一个字或双字送至目的操作数,然后再从EA+2取出后一个字送至段寄存器ES中。, 地址传送指令 指针送寄存器和DS指令: LDS REG , SRC 执行操作: ( REG ) ( SRC ) ( DS ) ( SRC + 2 ) 4个相继字节 寄存器(通常是 SI)、DS 指针送寄存器和ES指令: LES REG , SRC 执行操作: ( REG ) ( SRC ) ( ES ) ( SRC + 2 ) 4个相继字节 寄存器(通常是 DI)、ES,注意: * 不影响标志位 * REG 不能是段寄存器 * SRC 必须为存储器寻址方式,例: LEA BX , BX + SI + 0F62H LDS SI , 10H LES DI , BX ,算术指令: 加法指令 ADD、ADC、INC 减法指令 SUB、SBB、DEC、NEG、CMP 乘法指令 MUL、IMUL 除法指令 DIV、IDIV 十进制调整指令 DAA、DAS、AAA、AAS、AAM、AAD,ADD指令 ADD D,S ;(D)(D)+(S) 功能:将目的操作数与源操作数相加,其结果存放在目的操作数中,且源操作数保持不变。目的操作数可以是通用寄存器或存储器,源操作数可以是通用寄存器、存储器或立即数。注意目的操作数和源操作数不能同时是存储器操作数。段寄存器不能直接参加算术运算。加法指令的操作对象可以是16位或8位。, 加法指令 加法指令: ADD DST , SRC 执行操作: ( DST ) ( SRC ) + ( DST ) 带进位加法指令: ADC DST , SRC 执行操作: ( DST ) ( SRC ) + ( DST ) + CF 加1指令: INC OPR 执行操作: ( OPR ) ( OPR ) + 1,注意: * 除 INC 指令不影响 CF 标志外,均对条件标志位有影响。,加法指令对 条件标志位( CF / OF / ZF / SF )的影响:,CF 位为 1 表示 无符号数 加法的溢出。 OF 位为 1 表示 带符号数 加法的溢出。,n = 8bit 带符号数 ( -128 127 ) 无符号数 ( 0 255 ),例:双精度数的加法 ( DX ) = 0002H ( AX ) = 0F365H ( BX ) = 0005H ( CX ) = 0E024H 指令序列: ADD AX , CX ; (1) ADC DX , BX ; (2) (1) 执行后,( AX ) = 0D389H CF = 1 OF = 0 SF = 1 ZF = 0 (2) 执行后,( DX ) = 0008H CF = 0 OF = 0 SF = 0 ZF = 0,例如: ADD AL,10 ADD AX,BX ADD DX,BETASI ADD MEMDI,SI ADD DELTABX,1250H ;DELTA为字变量 ADD BYTE PTR SI,25H ;指定存储器为字节类型,ADC指令 ADC D,S ;(D)(D)+(S)+(CF) 功能:将目的的操作数与源操作数相加,同时还要加一个进位CF。 用法:该指令常用于多精度加法的计算。,例3.1设在数据段定义了两个多精度的16进制 数:FIRST和SECOND ,求两数之和,并将 结果存放在THIRD为首地址的存储器中。 数据段定义和程序段如下: FIRST DW 758DH,9A5CH SECOND DW 0A524H,8345H THIRD DW 3 DUP(0),LEA SI,FIRST ;取加数的有效地址 LEA DI,SECOND ;取被加数的有效地址 LEA BX,THIRD ;取存放和的有效地址 MOV AX,SI ;取加数的第一个字 ADD AX,DI ;与被加数的第一个字相加 MOV BX,AX ;存第一次运算的部分和 PUSHF ;保护标志位,ADD SI,2 ;加数地址加2,指向下一个加数的地址 ADD DI,2 ;被加数地址加2,指向下一个被加数的地址 ADD BX,2 ;和地址加2,指向下一个部分和的地址 POPF ;恢复标志位 MOV AX,SI ;从加数中取出第二个字 ADC AX,DI ;与被加数中的第二个字进行带进位相加 MOV BX,AX ;存第二次部分和 ADC WORD PTR BX+2,0 ;将进位存入和的第三个字中,INC指令 INC D ;(D)(D)+1 功能:是对指定的操作数加1。 用法:常用于操作数变址,由于对CF无影响,所以无需像上述程序段那样保护状态标志位。 特点:这是一条单操作数指令,操作数可以用通用寄存器,也可以用存储器。,例如: INC CL ;8位寄存器加1 INC SI ;16位寄存器加1 INC BX ;16位寄存器加1 INC MEM-BYTE DI ;字节存储器加1 INC MEM-WORD SI ;字存储器加1,AAA指令 AAA IF(AL&0FH)9 OR AF=1 ) THEN ALAL+6,AHAH+1,AF1, CF1,ALAL&0FH 功能:未组合的BCD加法调整指令,亦可以作为ASCII码加法调整指令。 用法:必须将其和放在累加器AL中,AAA指令要紧跟在加法指令之后使用。,例如计算两个十进制数和8+6。 MOV AX,0008H MOV BL,06H ADD AL,BL AAA ;调整后(AX)=0104H,(CF)=1,假设上述两个十进制数用ASCII码表示,则变成38H+36H=?,其程序段如下: MOV AX,0038H MOV BL,36H ADD AL,BL ;(AL)=6EH AAA ;(AX)=0104H,DAA指令 DAA IF (AL&0FH)9 OR AF=1 ) THEN ALAL+6,AF1 IF (AL&0F0H)90H OR CF=1 ) THEN ALAL+60H,CF1 功能:为组合的BCD码加法调整指令,对在AL中的两个组合的十进制数相加的结果进行调整,获得正确的十进制数结果仍在AL中。,例如:对两个十进制数求和,78+56=?,可用如下指令实现: MOV AL,78H ;(AL)=78H ADD AL,56H ;(AL)=CEH DAA ;(AL)=34H,(CF)=1,例如 SUB AL,47H SUB AX,VARBX+SI SUB ALPHADI,DX,2减法指令:SUB,SBB,DEC,NEG,CMP,AAS和DAS SUB指令格式 SUB D,S ;(D)(D)-(S) 功能:执行减法运算,将目的的操作数减去源操作数,其结果存于目的操作数中。 指令将对CF、AF、SF、ZF、PF、OF状态标志位有影响,使用的操作数组合与ADD指令相同。, SBB指令格式 SBB D,S;(D)(D)-(S)-(CF) 功能:带借位的减法指令,将目的操作数减去源操作数,然后再减去借位标志CF,其结果存放在目的操作数中。 用法:SBB指令常用于多精度的减法运算中。, 减法指令 减法指令: SUB DST , SRC 执行操作: ( DST ) ( DST ) - ( SRC ) 带借位减法指令: SBB DST , SRC 执行操作: ( DST ) ( DST ) - ( SRC ) - CF 减 1 指令: DEC OPR 执行操作: ( OPR ) ( OPR ) - 1 求补指令: NEG OPR 执行操作: ( OPR ) - ( OPR ) 比较指令: CMP OPR1 , OPR2 执行操作: ( OPR1 ) - ( OPR2 ),注意: * 除 DEC 指令不影响 CF 标志外, 均对条件标志位有影响。,减法指令对 条件标志位(CF / OF / ZF / SF)的影响:,CF 位为 1 表示 无符号数 减法的溢出。 OF 位为 1 表示 带符号数 减法的溢出。,NEG 指令对 CF / OF 的影响:,例:x、y、z 均为双精度数,分别存放在地址为 X , X+2; Y , Y+2 ;Z , Z+2 的存储单元中,用指令序列实现 w x + y + 24 - z ,并用W , W+2 单元存放 w,MOV AX , X MOV DX , X + 2 ADD AX , Y ADC DX , Y + 2 ; x+y ADD AX , 24 ADC DX , 0 ; x+y+24 SUB AX , Z SBB DX , Z + 2 ; x+y+24-z MOV W , AX MOV W+2 , DX ; 结果存入 W,W+2 单元,例3.2求876A935247H-5A6C486D2BH=? 设数据在数据段中定义如下: DATA SEGMENT ;定义数据段 minuend DB 47H,52H,93H,6AH,87H subtrahend DB 2BH,6DH,48H,6CH,5AH COUNT EQU $- subtrahend Minus DB COUNT DUP(O) DATA ENDS ;数据段结束,CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA,ES:DATA SUBTRACT PROC FAR START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,minuend LEA DI,subtrahend LEA BX,minus,MOV CX,COUNT CLC AGAIN: MOV AL,SI SBB AL,DI MOV BX,AL INC SI INC DI INC BX DEX CX ;CX(CX)-1 JNZ AGNIN ;(CX)0转移,MOV AH,4CH ;结束程序执行 INT 21H SUBTRACT ENDP CODE ENDS ;代码段结束 END START,DEC D ;(D)(D)1 功能:将目的操作数减1。 标志位:除CF标志位不受影响外,其余状态标志均受影响。 目的操作数:可以放在通用寄存器和存储器中。 例如: DEC CX DEC MEM-BYTEDI,NEG指令格式 NEG D ;(D)0(D) 功能:对目的操作数求补,即用零减去目的操作数, 并将结果送回目的操作数。 操作数:可以是通用寄存器或存储器。 标志位:影响SF、ZF、AF、PF、OF,在一般情况下, 总使CF=1,除非操作数为零时,才使CF=0; OF标志一般情况下为0,但当操作为80H或 8000H,NEG指令对其求补,结果与原操作数 相同,此时OF=1。,如: NEG BX NEG SUM,CMP指令格式 CMP D,S ;(D)-(S) 功能:用目的操作数减去源操作数,但其结果 不送回目的操作数,其余操作与减法指令 SUB相同。 用法:此指令常用于比较两个数的大小,当比 较指令与条件转移指令结合使用时,可以完成 各种条件判断和相应的程序转移。,例3.3在10个无符号数中求最大值,最大值存放在MAX变量中,程序如下 DATA SEGMENT BLOCK DB 1AH,5CH,62H,97H,0A5H,73H,05H,3AH,4CH,1BH MAX DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,MAX-UN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,BLOCK MOV CX,9 MOV AL,SI,AGAIN: CMP AL,SI+1 JNC NEXT MOV AL,SI+1 NEXT: INC SI DEC CX JNZ AGAIN,MOV MAX,AL MOV AX,4C00H INT 21H MAX-UN ENDP CODE ENDS END MAX-UN,AAS指令格式 AAS 功能:是未组合BCD码减法调整指令,可对AL中的两个未组合的十进制数相减的结果进行调整,使差成为正确的十进制数。 调整过程逻辑表达式如下所示: IF(AL&0FH)9 OR AF=1,THEN ALAL6,AHAH1,AF1,CFAF, ALAL&0FH,例如:求257=?其结果用十进制数未组合的BCD码表示。可用下列指令完成这个十进制数减法 MOV AX,0205H ;(AH)=02H, (AL)=05H SUB AL,07H :(AL)=FEH, (AF)=1 AAS ;(AH)=01H,(AL)=08H, (CF)=1,例3.4求7446=?该数用ASCII码表示,则为3734H3436H,ASCII码减法程序段如下: ASCVAL1 DB 37H,34H ASCVAL2 DB 34H,36H ASCVAL3 DB ?,?,LEA SI,ASCVAL1+1 LEA DI,ASCVAL2+1 LEA BX,ASCVAL3+1 MOV CX,2 CLC AGAIN: MOV AL,SI,SBB AL,DI AAS MOV BX,AL DEC SI DEC DI DEC BX DEC CX JNZ AGAIN,DAS指令格式 DAS 功能:用于组合BCD码减法调整,将AL中的两个组合的BCD码之差,调整为正确的组合十进制数。 调整操作逻辑表达式如下所示: IF (AL&0FH)9 OR AF=1 THEN ALAL6,AF1 IF(AL&0F0H)90H OR CF=1 THEN ALAL60H,CF1,如上例74-46=? 可用如下指令运算: MOV AL,74H ;(AL)=74H SUB AL,46H ;(AL)=2EH DAS ;(AL)=28H, ( CF)=1,3乘法指令:MUL,IMUL,AAM 无符号数乘法MUL指令格式 MUL 通用寄存器/存储器 或记为 MUL Reg/mem 功能:为无符号数乘法指令,可以实现字节字 节、字字和双字双字的乘法运算。 标志位:只影响CF和OF标志位,其余标志不确 定。,特点:由于被乘数是隐含操作数,故在使用该 指令前应将被乘数存入累加器AL、AX或 EAX;乘数由操作数reg/mem确定,乘 法的类型由操作数的类型决定,例如操 作数类型为字节时,则为字节相乘,即 (AL)(reg8/mem8),其结果存放在 AX中。,若操作数类型为字时,则为两个字数据相乘,其结果放在DX和AX中,表示为: (AX)(reg16/mem16)DX:AX 如果操作数为双字,则乘法按如下方式进行:(EAX)(reg32/mem32)EDX:EAX, 乘法指令 无符号数乘法指令: MUL SRC 执行操作: 字节操作数 ( AX ) ( AL ) * ( SRC ) 字操作数 ( DX , AX ) ( AX ) * ( SRC ) 带符号数乘法指令: IMUL SRC,注意: * AL ( AX ) 为隐含的乘数寄存器。 * AX ( DX , AX ) 为隐含的乘积寄存器。 * SRC 不能为立即数。 * 除 CF 和 OF 外,对条件标志位 无定义。,乘法指令对 CF / OF 的影响:,例:( AX ) = 16A5H ,( BX ) = 0611H (1) IMUL BL ; ( AX ) ( AL ) * ( BL ) ; A5 * 11 5B * 11 = 060B F9F5 ; ( AX ) = 0F9F5H CF = OF = 1 (2) MUL BX ; ( DX , AX ) ( AX ) * ( BX ) ; 16A5 * 0611 = 0089 5EF5 ; ( DX ) = 0089H ( AX ) = 5EF5H CF = OF = 1, 除法指令 无符号数除法指令: DIV SRC 执行操作: 字节操作 ( AL ) ( AX ) / ( SRC ) 的商 ( AH ) ( AX ) / ( SRC ) 的余数 字操作 ( AX ) ( DX , AX ) / ( SRC ) 的商 ( DX ) ( DX , AX ) / ( SRC ) 的余数 带符号数除法指令: IDIV SRC 注意: * AX ( DX , AX ) 为隐含的被除数寄存器。 * AL ( AX ) 为隐含的商寄存器。 * AH ( DX ) 为隐含的余数寄存器。 * SRC 不能为立即数。 * 对所有条件标志位均 无定义。,例:x , y , z , v 均为 16 位带符号数,计算 ( v - ( x * y + z 540 ) ) / x,MOV AX , X IMUL Y ; x*y MOV CX , AX MOV BX , DX MOV AX , Z CWD ADD CX , AX ADC BX , DX ; x*y+z SUB CX , 540 SBB BX , 0 ; x*y+z-540 MOV AX , V CWD SUB AX , CX SBB DX , BX ; v-(x*y+z-540) IDIV X ; (v-(x*y+z-540)/x,例如: MUL CL ;(AL)(CL)AX MUL BX ;(AX)(BX)DX:AX MUL EBX ;(EAX)(EBX)EDX: EAX,下面例子中乘数为存储器: MUL BYTE1 ;(AL)(BYTE1) AX MUL WORD1 ;(AX)(WORD1) DX:AX MUL DWORD1 ;(EAX) ( DWORD1)EDX:EAX,有符号数乘法指令IMUL IMUL乘法指令格式: IMUL reg/mem ;同MUL指令 IMUL reg,reg/mem/imm ;双操作数 IMUL reg,reg/mem,imm ;三操作数,对于双操作数指令,操作数可以有如下组合方式: IMUL reg,reg/mem/imm ;imm为立即数 Reg16,reg16 Reg16,mem16 Reg32,reg32 Reg32,mem32 Reg16,imm Reg32,imm,三个操作数按如下方式组合: IMUL reg,reg/mem,imm reg16,reg16,imm reg16,mem16,imm reg32,reg32,imm reg32,mem32,imm,例如: IMUL DX,25 ;(DX)25(DX) IMUL BX,CX ;(BX)(CX)(BX) IMUL ECX,MULTCAND,25 ; (MULTCAND25)ECX,例3.5无符号数和有符号数乘法编程示例 TITLE MULT MUL and IMUL operations DATA SEGMENT BYTE1 DB 80H BYTE2 DB 40H WORD1 DW 800H WORD2 DW 2000H DWORD1 DD 80000000H,DWORD2 DD 20000000H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA MUL-MAIN PROC NEAR MOV AX,DATA MOV DS,AX MOV ES,AX,.386 ;Example of MUL: MOV AL,BYTE1 ;ByteByte MUL BYTE2 ;Product in AX MOV AX,WORD1 ;WORDWORD MUL WORD2 ;Product in DX:AX MOV AL,BYTE1 ;Bytewok SUB AH,AH ;extend multiplicand in AH,MUL WORD1 ;Product in DX:AX MOV EAX,DWORD1 ;Double WORD Double WORD MUL DWORD2 ;Product in EDX:EAX ;Example of IMUL: MOV AL,BYTE1 ;ByteByte IMUL BYTE2 ;Product in AX,MOV AX,WORD1 ;wordword IMUL WORD2 ;Product in DX:AX MOV AL,BYTE1 ;Byteword CBW ;extend multi plicand in AH IMUL WORD1 ;Product in DX:AX MOV EAX,DWORD1 ;Double word Double word IMUL DWORD2 ;Product in EDX:EAX,MOV AX,4COOH INT 21H MUL-MAIN ENDP CODE ENDS END MUL-MAIN,AAM指令格式 AAM 未组合的BCD码乘法调整指令AAM功能: 它将AX中未组合BCD码的乘积调整为正确的未组合的BCD码,高位在AH中,低位在AL中。AAM具体操作如下: AHAL/0AH ;除10取整商AH ALAL%0AH ;除10取余AL,例3.6计算847569=? DATA SEGMENT MULTCAN DB 84756 COUNT EQU &-MULTCAN MULTPLR DB 9 ASCPROD DB COUNT+1 DUP(0),$ DATA ENDS CODE SEGMENT,ASSUME CS:CODE,DS:DATA ,ES:DATA ASCMUL PROC NEAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,COUNT LEA SI,MULTCAN+COUNT1,LEA DI,ASCPROD+COUNT AND MULTRLR,0FH AGAIN: MOV AL,SI AND AL,0FH MUL MULTPLR AAM ADD AL,DI AAA,MOV DI,AL MOV DI1,AH DEC DI DEC SI LOOP AGAIN LEA SI,ASCPROD+COUNT MOV CX,COUNT+1 NEXT: OR BYTE PTR SI,30H,DEC SI LOOP NEXT MOV AX,4C00H INT 21H ASCMUL ENDP CODE ENDS END ASCMUL,4除法指令:DIV,IDIV,AAD,CBW,CWD,CWDE,CDQ (1)无符号数除法DIV DIV reg/mem 除数:在DIV指令中的操作数为除数。 被除数:隐含在AX、DX:AX或EDX:EAX。注意:实际使用时主要依据除数操作数的类型来选择,例如操作数为字节类型,则自动选用AX作被除数。,例如: DIV CL ;AX/CLAL,余数AH DIV CX ;DX:AX/CXAX,余数DX DIVDWORD1;EDX:EAX/DWORD1EAX, 余数EDX,(2)有符号数除法IDIV IDIV reg/mem IDIV操作同DIV一致,不再一一说明。,与有符号数除法有关指令: CBW指令 指令功能:将AL寄存器中的最高符号位扩展到AH,即将8位有符号数扩展成16位有符号数,以便实现有符号数字节除以字节操作数。 例如: AL=87H, 执行CBW后, AX=FF87H。,CWD指令 指令功能:将AX寄存器中的最高符号位扩展到DX中,即将16位有符号数扩展成32位有符号数,以便实现有符号数字除以字操作数。 例如:AX=97ABH, 执行CWD后,DX=FFFFH,AX=97ABH。, 类型转换指令(扩展指令) CBW AL AX 执行操作: 若 (AL) 的最高有效位为 0,则 ( AH ) = 00H 若 (AL) 的最高有效位为 1,则 ( AH ) = 0FFH CWD AX ( DX , AX ) 执行操作:若 (AX) 的最高有效位为 0,则 ( DX ) = 0000H 若 (AX) 的最高有效位为 1,则 ( DX ) = 0FFFFH 例:( AX ) = 0BA45H CBW ; ( AX ) = 0045H CWD ; ( DX ) = 0FFFFH ( AX ) = 0BA45H 注意: * 无操作数指令 * 隐含对 AL 或 AX 进行符号扩展 * 不影响条件标志位,例3.7有符号数和无符号数除法程序设计 DATA SEGMENT BYTE1 DB 80H BYTE2 DB 16H WORD1 DW 2000H WORD2 DW 012OH WORD3 DW 1000H DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA DIVX PROC NEAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,WORD1 ;wordbyte DIV BYTE1 ;rmdr:quot in AH:AL,MOV AL,BYTE1 ;ByteByte SUB AH,AH ;extend dividend in AH DIV BYTE2 ;rmdr:quot in AH:AL MOV AX,WORD3 ;Double word word MOV DX, WORD2 ;dividend in DX:AX DIV WORD1 ;rmdr:quot in DX:AX MOV AX,WORD1 ;wordword SUB DX,DX ;extend dividend in DX,DIV WORD3 ;rmdr:quot in DX:AX MOV AX,WORD1 ;wordword IDIV BYTE1 ;rmdr:quot in AH:AL MOV AL,BYTE1 ;ByteByte CBW ;extend dividend in AH IDIV BYTE2 ;rmdr:quot in AH:AL MOV DX,WORD2 ;Double word/word MOV AX,WORD3 ;dividend in DX:AX,IDIV WORD1 ;rmdr:quot in DX:AX MOV AX,WORD1 ;word/word CWD ;extend dividend in DX IDIV WORD3 ;rmdr:quot in DX:AX MOV AX,4C00H INT 21H DIVX ENDP CODE ENDS END DIVX,(3)AAD指令格式 AAD ;隐含操作数AH,AL 指令功能:将AX中的两个未组合的BCD码转换成一个字节的二进制数,存于AL中。 其操作为: AL(AX)10+(AL) AH0,例如:设AX=3238H,CL=37H: AND CL,0FH ;AX=3238H,CL=07 AND AX,0F0FH ;AX=0208H,CL=07 AAD ;AX=001CH,CL=07 DIV CL ;AX=0004H,1逻辑运算指令 逻辑“与”指令AND 指令格式:AND D ,S ;(D)(D)(S) 功能:将源操作数与目的操作数“与”,结果存 于目的操作数。 用法:常用于位屏蔽和位检验操作。 位屏蔽:是将目的操作数中指定的位设置为0。,例如: AND AL,0FH ;AL高4位为0,低4位保持不变。 AND AL,80H ;检验AL的符号位 AND AX,BX ;寄存器与寄存器相“与” AND AX,GAMMABX ;寄存器与存储器“与” AND BETABXSI,00111111B ;存储器与 立即 数相“与”,测试指令TEST 指令格式:TEST D ,S ;(D)(S) 功能:将目的操作数与源操作数进行逻辑 “与”,但运算结果不写回目的操作数, 只是影响状态标志位,目的操作数在 运算后保持不变。,例如: TEST AX,8000H ;检验AX是正数还是负数 TEST BX,1 ;检验BX是偶数还是奇数 TEST GAMMABX,IMM-NUM,逻辑“或”指令OR 指令格式:OR D ,S ;(D)(D)(S) 功能:将目的操作数和源操作数按位进行逻辑 “或”运算,并将其结果送回目的操作数。 用法:常用于判断一个数是否为零,或用于 将BCD码转换成ASCII,以及判断一个 数的正负。,如: OR AL,AH OR AL,30H OR AX,3030H OR BETABX+SI,DX,逻辑“异或”指令XOR XOR指令格式: XOR D ,S ;(D)(D)(S) 功能:将目的操作数和源操作数按位进行逻辑 “异或”,即“相同为零,相异为1”,凡与1 相“异或”的位将“求反”,凡与“0”相“异或” 的位保持不变。 用法:根据该指令特点可很容易地将寄存器清 零,并同时也将进位标志位CF清零,,如: XOR AH,AH XOR AX,AX XOR EAX,EAX,例3.8将一串大写字符转换成小写字符 DATA SEGMENT CONAME DBCOMPUTER SYSTEMS COUNT EQU $-CONAME DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,CASE PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,CONAME MOV CX,COUNT AGAIN:MOV AL,SI CMP AH,41H ;IS it upper case letter? JB NEXT,CMP AL,5AH ; JA NEXT ;IS it upper case letter? XOR AL,00100000B ;Yes,convert MOV SI,AL ;Restore in CONAME NEXT:INC SI ;指向下一个字符 LOOP AGAIN ;循环 MOV AX,4C00H INT 21H CASE ENDP CODE ENDS END CASE,逻辑“非”指令NOT 指令格式:NOT D ;(D)(D) 功能:对目的操作数求反,并将结果送回目的操作数。 操作数可以是通用寄存器或存储器,此指令对状态标志位无影响。,例3.9将内存BLOCK中的三个字操作数求补。 TITLE NOTOP DATA SEGMENT BLOCK DW 350AH,675BH,0A418H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA, ES:DATA,NOTOP PROC NEAR MOV AX,DATA MOV DS,AX MO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古自治区丰镇市第一中学2024-2025学年高二下学期期中考试政治试题B卷(原卷版+解析版)
- 国际货品进出口贸易合同
- 智慧交通运输管理平台开发与服务协议
- IT技术支持与服务提供合同细节规定事项清单
- 物业内勤的工作总结(14篇)
- 音内容制作及版权转让协议
- 2025福建南安市首创水务有限责任公司招聘6人笔试参考题库附带答案详解
- 2025福建武夷碳产业投资有限公司招聘2人笔试参考题库附带答案详解
- 2025浙江省安全生产科学研究有限公司招聘15人笔试参考题库附带答案详解
- 2025年甘肃省庆阳市新庄煤矿面向社会招聘生产性灵活用工206人笔试参考题库附带答案详解
- 2024年英语B级考试真题及答案
- 人教版五年级英语123单元测试卷名校版含答案
- 施工升降机安装拆卸安全教育
- 农村土地承包法知识讲座
- 2023年浙江省高考满分作文:科技的新秀人文的毒酒
- 草木缘情:中国古典文学中的植物世界
- 中国绝缘材料产品及应用手册
- 擒拿格斗课件
- 药品召回函和通知单
- 中国马克思主义与当代思考题(附答案)
- 智能建造施工技术应用实施方案
评论
0/150
提交评论