




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章第二章 Intel 8086/8088 CPUIntel 8086/8088 CPU的寻址方式和指令系统的寻址方式和指令系统重点关注:重点关注:指令的汇编格式指令的汇编格式指令的根本功能指令的根本功能指令支持的寻址方式指令支持的寻址方式指令的执行对标志位的影响指令的执行对标志位的影响指令的特殊要求指令的特殊要求二、指令系统二、指令系统 1、数据传送指令、数据传送指令2、算术指令、算术指令3、逻辑指令、逻辑指令4、串处置指令、串处置指令5、控制转移指令、控制转移指令6、处置机控制指令、处置机控制指令1、数据传送指令:实现内部存放器、数据传送指令:实现内部存放器之间、内部存放器与存储器之间的
2、之间、内部存放器与存储器之间的数据传送。数据传送。 通用 数据传送指令 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 A
3、AM AAD3、逻辑运算和移位指令、逻辑运算和移位指令逻辑运算指令 AND OR NOT XOR TEST移位指令 SAL/SHL SAR SHR旋转指令 ROL ROR RCL RCR4、串处置指令指令 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/JNAJE/JZ JNE/
4、JNZ JG/JNLE JGE/JNL JL/JNGE JLE/JNGJCXZ循环转移 LOOP LOOPZ/LOOPE LOOPNZ/LOOPNE子程序调用 CALL RET中断调用 INT INTO IRET6、处置机控制指令标志处置指令CF标志 CLC STC CMCDF标志 CLD STD IF标志 CLI STI其他处置指令 NOP HLT WAIT ESC LOCK uMOV指令u 根本格式 MOV DST,SRC ;(D) (S)u D表示目的操作数,S表示源操作数。D和S可以是存放器或存储器,S还可以是立刻数。传送的数可以是字节、字或双字。存储器和通用存放器传送数据,类型字节、
5、字、双字由通用存放器确定。留意留意: * DST 不能是不能是 CS* DST、SRC 不能同时为段存放器不能同时为段存放器 MOV DS, ES * 立刻数不能直接送段存放器立刻数不能直接送段存放器 MOV DS, 2000H * DST 不能是立刻数不能是立刻数* DST、SRC 不能同时为存储器寻址不能同时为存储器寻址8086微处置器uPUSHuPOPu 根本格式 PUSH SRCu POP DSTu SRC、DST必需为字数据,为REG、SEGREG、MEM。普通情况下成对运用。进栈指令:进栈指令: PUSH SRC执行操作:执行操作: ( SP ) ( SP ) 2 ( ( SP )
6、 + 1 , ( SP ) ) ( SRC )出栈指令:出栈指令: POP DST执行操作:执行操作: ( DST ) ( ( SP ) + 1 , ( SP ) ) ( SP ) ( SP ) + 2堆栈:堆栈:先进后出先进后出的存储区,存在于堆栈段,任何时候的存储区,存在于堆栈段,任何时候 SP都指向栈顶。都指向栈顶。 留意留意: * 堆栈操作必需以字为单位堆栈操作必需以字为单位* 不影响标志位不影响标志位* 不能用立刻寻址方式不能用立刻寻址方式 PUSH 1234H * DST 不能是不能是 CS POP CS push 指令的执行过程 push ax 1SP=SP2; 2将ax中的内容
7、送入SS:SP指向的内存单元处,SS:SP此时指向新栈顶。push 指令的执行过程pop 指令的执行过程 pop ax 1将SS:SP指向的内存单元处的数据送入ax中; 2SP = 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的用法的用法:注 意 编程的时候要本人操心栈顶超界的问题 ,要根据能够
8、用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要留意,以防栈空的时候继续出栈而导致的超界。uPUSHFu 功能:分别将功能:分别将16位标志存放位标志存放器的内容压入堆栈,以后用。器的内容压入堆栈,以后用。uPOPF指令指令u 功能:从栈顶弹出一个字送功能:从栈顶弹出一个字送至标志存放器。至标志存放器。u 标志存放器传送指令标志存放器传送指令 标志送标志送 AH 指令:指令: LAHF 执行操作:执行操作: ( AH ) ( PSW 的低字节的低字节 ) AH 送标志存放器指令:送标志存放器指令: SAHF 执行操作:执行操作: ( PSW 的低字节的低
9、字节 ) ( AH ) 标志进栈指令:标志进栈指令: PUSHF 执行操作:执行操作: ( SP ) ( SP ) - 2 ( ( SP ) + 1 , ( SP ) ) ( PSW ) 标志出栈指令:标志出栈指令: POPF 执行操作:执行操作: ( PSW ) ( ( SP ) + 1 , ( SP ) ) ( SP ) ( SP ) + 2 * 影响标志位影响标志位uXCHG指令指令u 指令格式:指令格式:XCHG OPR1,OPR2 u 功能:将源操作数和目的操作数的内容相功能:将源操作数和目的操作数的内容相互交换。互交换。u 留意:源操作数和目的操作数可以是通用留意:源操作数和目的操
10、作数可以是通用存放器或存储器,但存放器或存储器,但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 字字 执行操作:执
11、行操作:( 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
12、 , 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例:测试
13、某形状存放器端口号 27H的第 2 位能否为 1 IN AL , 27H TEST AL , 00000100 B JNZ ERROR ; 假设第 2 位为 1,转 ERROR 处置( BX ) 30 H F004031 H F0041 ( AL ) = 3 32 H F0042 33 H F0043TABLE( DS ) = F000H换码指令:换码指令:XLAT 或或XLAT OPR执行操作:执行操作:( AL ) ( ( BX ) + ( AL ) )例:例:MOV BX , OFFSET TABLE ; ( BX ) = 0040H MOV AL, 3 XLAT TABLE 指令执行后
14、指令执行后 ( AL ) = 33H留意留意: * 不影响标志位不影响标志位* 字节表格字节表格(长度不超越长度不超越256) 首地址首地址 ( BX )* 需转换代码需转换代码 ( AL )uLEA指令指令u 指令格式:指令格式:LEA reg16,EAu 其中其中EA为存储器操作数,为存储器操作数,reg16为通用存为通用存放器。放器。u 功能:取源操作数的有效地址送至目的操功能:取源操作数的有效地址送至目的操作数通用存放器中。作数通用存放器中。 地址传送指令地址传送指令有效地址送存放器指令:有效地址送存放器指令: LEA REG , SRC执行操作:执行操作: ( REG ) SRC u
15、LDS指令指令u 指令格式:指令格式:LDS reg,EA ;Reg16EAu D S EA+2 u 功能:从存储器中取出操作数的地址指针,首先功能:从存储器中取出操作数的地址指针,首先从存储器取出第一个字或双字送至目的操作数,然从存储器取出第一个字或双字送至目的操作数,然后再从后再从EA+2取出后一个字送至段存放器取出后一个字送至段存放器DS中。中。uLES指令指令u 指令格式:指令格式:LES reg,EA ;Reg16EAu E S EA+2 u 功能:从存储器中取出操作数的地址指针,首先功能:从存储器中取出操作数的地址指针,首先从存储器取出第一个字或双字送至目的操作数,然从存储器取出第
16、一个字或双字送至目的操作数,然后再从后再从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 40 H0
17、0 H00 H30 H TABLE ( DS ) : 1000HMOV BX , TABLE ; ( BX ) = 0040HMOV BX , OFFSET TABLE ; ( BX ) = 1000HLEA BX , TABLE ; ( BX ) = 1000HLDS BX , TABLE ; ( BX ) = 0040H ; ( DS ) = 3000HLES BX , TABLE ; ( BX ) = 0040H ; ( ES ) = 3000H留意留意: * 不影响标志位不影响标志位* REG 不能是段存放器不能是段存放器* SRC 必需为存储器寻址方式必需为存储器寻址方式例: LEA
18、 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、AADuADD指令指令u ADD D,S ;DD+Su 功能:将目的操作数与源操作数相加,其结功能:将目的操作数与源操作数相加,其结果存放在目的操作数中,且源操作数坚持不变。果存放在目的操作数中,且源操作数坚持不变。目的操作数可以是通用存放器
19、或存储器,源操目的操作数可以是通用存放器或存储器,源操作数可以是通用存放器、存储器或立刻数。留作数可以是通用存放器、存储器或立刻数。留意目的操作数和源操作数不能同时是存储器操意目的操作数和源操作数不能同时是存储器操作数。段存放器不能直接参与算术运算。加法作数。段存放器不能直接参与算术运算。加法指令的操作对象可以是指令的操作对象可以是16位或位或8位。位。 加法指令加法指令 加法指令:加法指令: ADD DST , SRC 执行操作:执行操作: ( DST ) ( SRC ) + ( DST ) 带进位加法指令:带进位加法指令: ADC DST , SRC 执行操作:执行操作: ( DST )
20、( SRC ) + ( DST ) + CF 加加1指令:指令: INC OPR 执行操作:执行操作: ( OPR ) ( OPR ) + 1留意留意: * 除除 INC 指令不影响指令不影响 CF 标志外,均对条件标志位有影响。标志外,均对条件标志位有影响。加法指令对 条件标志位 CF / OF / ZF / SF 的影响:CF 位为位为 1 表示表示 无符号数无符号数 加法的溢出。加法的溢出。OF 位为位为 1 表示表示 带符号数带符号数 加法的溢出。加法的溢出。1 结果为负0 否那么SF =1 结果为 00 否那么ZF =1 和的最高有效位 有 向高位的进位0 否那么CF =1 两个操作
21、数符号一样,而结果符号与之相反0 否那么OF =n = 8bit 带符号数 ( -128 127 ) 无符号数 ( 0 255 ) 0 0 0 0 0 1 0 0 + 0 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1带:带:( +4 ) + ( +11 ) = +15 OF = 0无:无:4 + 11 = 15 CF = 0 带符号数和无符号数都不溢出带符号数和无符号数都不溢出 0 0 0 0 1 0 0 1 + 0 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 带带: ( +9 ) + ( +124 ) = -123 OF = 1 无无: 9 + 124 = 13
22、3 CF = 0带符号数溢出带符号数溢出无符号数溢出无符号数溢出 0 0 0 0 0 1 1 1 + 1 1 1 1 1 0 1 1 0 0 0 0 0 0 1 0带:带:( +7 ) + ( -5 ) = +2 OF = 0无:无:7 + 251 = 2 CF = 1 带符号数和无符号数都溢出 1 0 0 0 0 1 1 1 + 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 0带:带:( -121 ) + ( -11 ) = +124 OF = 1无:无: + 245 = 124 CF = 1例:双精度数的加法例:双精度数的加法 ( DX ) = 0002H ( AX ) =
23、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,10ADD AX,BXADD DX,BETASIADD MEMDI,SIADD DELTABX,1250H ;DELTA为字变量ADD BYTE PTR SI,25H ;指定存储器为字节类型
24、uADC指令指令u ADC D,S ;DD+S+CFu 功能:将目的的操作数与源操作数功能:将目的的操作数与源操作数相加,同时还要加一个进位相加,同时还要加一个进位CF。u 用法:该指令常用于多精度加法的用法:该指令常用于多精度加法的计算。计算。 例3.1设在数据段定义了两个多精度的16进制数:FIRST和SECOND ,求两数之和,并将结果存放在THIRD为首地址的存储器中。数据段定义和程序段如下: FIRST DW 758DH,9A5CH SECOND DW 0A524H,8345H THIRD DW 3 DUP0 LEA SI,FIRST ;取加数的有效地址LEA DI,SECOND ;
25、取被加数的有效地址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 ;将进位存入和的第三个字中
26、uINC指令指令u INC D ;DD+1u 功能:是对指定的操作数加功能:是对指定的操作数加1。u 用法:常用于操作数变址,由于对用法:常用于操作数变址,由于对CF无影无影响,所以无需像上述程序段那样维护形状标响,所以无需像上述程序段那样维护形状标志位。志位。u 特点:这是一条单操作数指令,操作数可特点:这是一条单操作数指令,操作数可以用通用存放器,也可以用存储器。以用通用存放器,也可以用存储器。例如:INC CL ;8位存放器加1INC SI ;16位存放器加1INC BX ;16位存放器加1INC MEM-BYTE DI ;字节存储器加1INC MEM-WORD SI ;字存储器加1uA
27、AA指令指令u AAAu IFAL&0FH9 OR AF=1 u THEN ALAL+6,AHAH+1,AF1,u CF1,ALAL&0FH u 功能:未组合的功能:未组合的BCD加法调整指令,亦可以作为加法调整指令,亦可以作为ASCII码加法调整指令。码加法调整指令。u 用法:必需将其和放在累加器用法:必需将其和放在累加器AL中,中,AAA指令要指令要紧跟在加法指令之后运用。紧跟在加法指令之后运用。例如计算两个十进制数和8+6。MOV AX,0008HMOV BL,06HADD AL,BLAAA ;调整后AX=0104H,CF=1假设上述两个十进制数用ASCII码表示,那么变
28、成38H+36H=?,其程序段如下:MOV AX,0038HMOV BL,36HADD AL,BL ;AL=6EHAAA ;AX=0104HuDAA指令指令 u DAAuIF AL&0FH9 OR AF=1 u THEN ALAL+6,AF1uIF AL&0F0H90H OR CF=1 u THEN ALAL+60H,CF1u功能:为组合的功能:为组合的BCD码加法调整指令,对在码加法调整指令,对在AL中的两中的两个组合的十进制数相加的结果进展调整,获得正确的个组合的十进制数相加的结果进展调整,获得正确的十进制数结果仍在十进制数结果仍在AL中。中。例如:对两个十进制数求和,78
29、+56=?,可用如下指令实现:MOV AL,78H ;AL=78HADD AL,56H ;AL=CEHDAA ;AL=34H,CF=1例如SUB AL,47HSUB AX,VARBX+SI SUB ALPHADI,DX 2减法指令:减法指令:SUB,SBB,DEC,NEG,CMP,AAS和和DAS SUB指令格式指令格式 SUB D,S ;DD-S 功能:执行减法运算,将目的的操作数减去源功能:执行减法运算,将目的的操作数减去源操作数,其结果存于目的操作数中。操作数,其结果存于目的操作数中。 指令将对指令将对CF、AF、SF、ZF、PF、OF形状标形状标志位有影响,运用的操作数组合与志位有影响
30、,运用的操作数组合与ADD指令一指令一样。样。 SBB指令格式指令格式 SBB D,S;DD-S-CF 功能:带借位的减法指令,将目的操作数减去功能:带借位的减法指令,将目的操作数减去源操作数,然后再减去借位标志源操作数,然后再减去借位标志CF,其结果存,其结果存放在目的操作数中。放在目的操作数中。 用法:用法:SBB指令常用于多精度的减法运算中。指令常用于多精度的减法运算中。 减法指令减法指令减法指令:减法指令: SUB DST , SRC 执行操作:执行操作: ( DST ) ( DST ) - ( SRC )带借位减法指令:带借位减法指令: SBB DST , SRC 执行操作:执行操作
31、: ( 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 表示表示 无符号数无符号
32、数 减法的溢出。减法的溢出。OF 位为位为 1 表示表示 带符号数带符号数 减法的溢出。减法的溢出。1 被减数的最高有效位 有 向高位的借位0 否那么CF =1 两个操作数符号相反,而结果的符号与减数一样0 否那么OF =1 减法转换为加法运算时 无 进位0 否那么CF =或NEG 指令对指令对 CF / OF 的影响:的影响:0 操作数为 01 否那么CF =1 操作数为 -128 字节运算或 操作数为 -32768 字运算0 否那么OF =例:x、y、z 均为双精度数,分别存放在地址为 X , X+2; Y , Y+2 ;Z , Z+2 的存储单元中,用指令序列实现 w x + y + 2
33、4 - z ,并用W , W+2 单元存放 wMOV AX , XMOV DX , X + 2ADD AX , YADC DX , Y + 2 ; x+yADD AX , 24ADC DX , 0 ; x+y+24SUB AX , ZSBB DX , Z + 2 ; x+y+24-zMOV W , AXMOV W+2 , DX ; 结果存入 W,W+2 单元 例3.2求876A935247H-5A6C486D2BH=? 设数据在数据段中定义如下: DATA SEGMENT ;定义数据段 minuend DB 47H,52H,93H,6AH,87H subtrahend DB 2BH,6DH,4
34、8H,6CH,5AH COUNT EQU $- subtrahend Minus DB COUNT DUPO 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
35、 DEX CX ;CXCX-1 JNZ AGNIN ;CX0转移 MOV AH,4CH ;终了程序执行 INT 21H SUBTRACT ENDP CODE ENDS ;代码段终了 END START DEC D ;DD1 功能:将目的操作数减功能:将目的操作数减1。 标志位:除标志位:除CF标志位不受影响外,其他形状标志位不受影响外,其他形状标志均受影响。标志均受影响。 目的操作数:可以放在通用存放器和存储器目的操作数:可以放在通用存放器和存储器中。中。 例如:例如: DEC CX DEC MEM-BYTEDI NEG指令格式指令格式 NEG D ;D0D 功能:对目的操作数求补,即用零减去
36、目的操作数,功能:对目的操作数求补,即用零减去目的操作数, 并将结果送回目的操作数。并将结果送回目的操作数。 操作数:可以是通用存放器或存储器。操作数:可以是通用存放器或存储器。 标志位:影响标志位:影响SF、ZF、AF、PF、OF,在普通情况下,在普通情况下, 总使总使CF=1,除非操作数为零时,才使,除非操作数为零时,才使CF=0; OF标志普通情况下为标志普通情况下为0,但当操作为,但当操作为80H或或 8000H,NEG指令对其求补,结果与原操作指令对其求补,结果与原操作数数 一样,此时一样,此时OF=1。 如: NEG BX NEG SUM CMP指令格式指令格式 CMP D,S ;
37、D-S 功能:用目的操作数减去源操作数,但其结果功能:用目的操作数减去源操作数,但其结果 不送回目的操作数,其他操作与减法指令不送回目的操作数,其他操作与减法指令 SUB一样。一样。 用法:此指令常用于比较两个数的大小,当比用法:此指令常用于比较两个数的大小,当比 较指令与条件转移指令结合运用时,可以完成较指令与条件转移指令结合运用时,可以完成 各种条件判别和相应的程序转移。各种条件判别和相应的程序转移。 例3.3在10个无符号数中求最大值,最大值存放在MAX变量中,程序如下 DATA SEGMENT BLOCK DB 1AH,5CH,62H,97H,0A5H,73H,05H,3AH,4CH,
38、1BH MAX DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATAMAX-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 功能:
39、是未组合功能:是未组合BCD码减法调整指令,可对码减法调整指令,可对AL中的中的两个未组合的十进制数相减的结果进展调整,使差两个未组合的十进制数相减的结果进展调整,使差成为正确的十进制数。成为正确的十进制数。 调整过程逻辑表达式如下所示:调整过程逻辑表达式如下所示: IFAL&0FH9 OR AF=1,THEN ALAL6,AHAH1,AF1,CFAF, ALAL&0FH例如:求257=?其结果用十进制数未组合的BCD码表示。可用以下指令完成这个十进制数减法MOV AX,0205H ;AH=02H, AL=05HSUB AL,07H :AL=FEH, AF=1AAS ;AH=0
40、1H,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,SISBB AL,DIAASMOV BX,ALDEC SIDEC DIDEC BXDEC CXJNZ AGAIN DAS指令格式指令格式 DAS 功能:用于组合功能:用于组合BCD码减法调整,将码减法调
41、整,将AL中的两个组中的两个组合的合的BCD码之差,调整为正确的组合十进制数。码之差,调整为正确的组合十进制数。 调整操作逻辑表达式如下所示:调整操作逻辑表达式如下所示: IF AL&0FH9 OR AF=1 THEN ALAL6,AF1 IFAL&0F0H90H 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 通用存放器
42、通用存放器/存储器存储器 或记为或记为 MUL Reg/mem 功能:为无符号数乘法指令,可以实现字节字功能:为无符号数乘法指令,可以实现字节字 节、字字和双字双字的乘法运算。节、字字和双字双字的乘法运算。 标志位:只影响标志位:只影响CF和和OF标志位,其他标志不确标志位,其他标志不确 定。定。 特点:由于被乘数是隐含操作数,故在运用该 指令前应将被乘数存入累加器AL、AX或 EAX;乘数由操作数reg/mem确定,乘 法的类型由操作数的类型决议,例如操 作数类型为字节时,那么为字节相乘,即 ALreg8/mem8,其结果存放在 AX中。 假设操作数类型为字时,那么为两个字数据相乘,其结果放
43、在DX和AX中,表示为: AXreg16/mem16DX:AX 假设操作数为双字,那么乘法按如下方式进展:EAXreg32/mem32EDX:EAX 乘法指令乘法指令 无符号数乘法指令:无符号数乘法指令: MUL SRC 执行操作:执行操作: 字节操作数字节操作数 ( AX ) ( AL ) * ( SRC ) 字操作数字操作数 ( DX , AX ) ( AX ) * ( SRC ) 带符号数乘法指令:带符号数乘法指令: IMUL SRC留意留意: * AL ( AX ) 为隐含的乘数存放器。为隐含的乘数存放器。* AX ( DX , AX ) 为隐含的乘积存放器。为隐含的乘积存放器。* S
44、RC 不能为立刻数。不能为立刻数。* 除除 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 ) = 5EF
45、5H CF = OF = 1 0 0 乘积的高一半为零 1 1 否那么MUL 指令: CF / OF = 0 0 乘积的高一半是低一半的符号扩展 1 1 否那么 IMUL 指令指令: CF / OF = 除法指令 无符号数除法指令: DIV SRC 执行操作: 字节操作 ( AL ) ( AX ) / ( SRC ) 的商 ( AH ) ( AX ) / ( SRC ) 的余数 字操作 ( AX ) ( DX , AX ) / ( SRC ) 的商 ( DX ) ( DX , AX ) / ( SRC ) 的余数 带符号数除法指令: IDIV SRC 留意: * AX ( DX , AX )
46、为隐含的被除数存放器。 * AL ( AX ) 为隐含的商存放器。 * AH ( DX ) 为隐含的余数存放器。 * SRC 不能为立刻数。 * 对一切条件标志位均 无定义。例:x , y , z , v 均为 16 位带符号数,计算 ( v - ( x * y + z 540 ) ) / xMOV AX , X IMUL Y ; x*yMOV CX , AXMOV BX , DXMOV AX , ZCWDADD CX , AXADC BX , DX ; x*y+zSUB CX , 540 SBB BX , 0 ; x*y+z-540MOV AX , VCWDSUB AX , CXSBB DX
47、 , BX ; v-(x*y+z-540)IDIV X ; (v-(x*y+z-540)/x 例如: MUL CL ;ALCLAX MUL BX ;AXBXDX:AX MUL EBX ;EAXEBXEDX: EAX 下面例子中乘数为存储器: MUL BYTE1 ;ALBYTE1 AX MUL WORD1 ;AXWORD1 DX:AX MUL DWORD1 ;EAX DWORD1EDX:EAX 有符号数乘法指令有符号数乘法指令IMUL IMUL乘法指令格式:乘法指令格式: IMUL reg/mem ;同;同MUL指令指令 IMUL reg,reg/mem/imm ;双操作数;双操作数 IMUL
48、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 ;DX25DX IMUL BX,CX ;BXCXBX IMUL ECX,MUL
49、TCAND,25 ; MULTCAND25ECX 例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 ;E
50、xample 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,BYT
51、E1 ;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-
52、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(
53、0),$ DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA ,ES:DATAASCMUL 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+CO
54、UNT 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。留意:实践运用时主要根据除数操作数的类留意:实践运用时主要根据除数操作数的类型来选择,例如操作数为
55、字节类型,那么自型来选择,例如操作数为字节类型,那么自动选用动选用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=F
56、F87H。 CWD指令指令 指令功能:将指令功能:将AX存放器中的最高符号位扩展存放器中的最高符号位扩展到到DX中,即将中,即将16位有符号数扩展成位有符号数扩展成32位有符位有符号数,以便实现有符号数字除以字操作数。号数,以便实现有符号数字除以字操作数。 例如:例如:AX=97ABH, 执行执行CWD后,后,DX=FFFFH,AX=97ABH。 类型转换指令类型转换指令(扩展指令扩展指令) CBW AL AX 执行操作:执行操作: 假设假设 (AL) 的最高有效位为的最高有效位为 0,那么,那么 ( AH ) = 00H 假设假设 (AL) 的最高有效位为的最高有效位为 1,那么,那么 (
57、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有符号数和无符号数
58、除法程序设计 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
59、 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
60、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 3AAD指令格式指令格式 AAD ;隐含操作数;隐含操作数AH,AL 指令功能:将指令功能:将AX中的两个未组合的中的两个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆能源职业学院《机电系统建模与仿真》2023-2024学年第二学期期末试卷
- 甘孜职业学院《大跨度空间结构》2023-2024学年第二学期期末试卷
- 2025届宁夏吴忠市高三上学期适应性考试(一模)历史试卷
- 2024-2025学年浙江省六校联盟高一上学期期中联考历史试卷
- 做账实操-代理记账行业的账务处理分录
- 长春大学旅游学院《幼儿舞蹈创编二》2023-2024学年第二学期期末试卷
- 2024-2025学年湖北省新高考联考协作体高一上学期期中考试历史试卷
- 济南工程职业技术学院《信息安全基础》2023-2024学年第二学期期末试卷
- 聊城大学东昌学院《病理学与病理生理学》2023-2024学年第二学期期末试卷
- 亳州职业技术学院《数据分析与可视化实验》2023-2024学年第二学期期末试卷
- 2025年湖北省技能高考(建筑技术类)《建筑制图与识图》模拟练习试题库(含答案)
- 集成电路研究报告-集成电路项目可行性研究报告2024年
- 2024年湖南生物机电职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 桩基承载力自平衡法检测方案资料
- 2025云南昆明空港投资开发集团招聘7人高频重点提升(共500题)附带答案详解
- 简单的路线图(说课稿)2024-2025学年三年级上册数学西师大版
- 成都市2024-2025学年度上期期末高一期末语文试卷(含答案)
- 2025年教育局财务工作计划
- Unit 5 Now and Then-Lesson 3 First-Time Experiences 说课稿 2024-2025学年北师大版(2024)七年级英语下册
- 中小学智慧校园建设方案
- 中国食物成分表2020年权威完整改进版
评论
0/150
提交评论