32 算术运算
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求补指令NEG
【例】求补运算。 MOV AX,0FF64H ;(AX)=0FF9CH NEG AL ;(AX)=0FFFFH SUB AL,9DH ;(AX)=0001H NEG AX ;(AX)=0000H DEC AL ;(AX)=0000H NEG AX
比较指令 CMP
语句格式:CMP OPD,OPS 功能: 目的操作数减源操作数,结果只影响标志 位,不送入目的地址。 即(OPD)-(OPS)。 用法: 此指令常用于比较两个数的大小,当比较 指令与条件转移指令结合使用时,可以完成 各种条件判断和相应的程序转移。
加1指令 INC
语句格式:INC OPD 功能:将目的操作数加1,结果送目的地址。 即(OPD)+1→OPD。 INC指令是一个单操作数指令,操作数可以是 寄存器或存储器操作数。 如:INC BX,即(BX)+1→BX。 用法:加1指令可用于对计数器和地址指针 进行调整,由于对CF无影响,所以无需保护状 态标志位。
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
减法的非压缩BCD码调整指令
加法的十进制调整指令DAA
【例】压缩BCD码的加法运算。
MOV AL,68H MOV BL,28H ADD AL,BL DAA ;(AL)=68H,表示压缩BCD码68 ;(BL)=28H,表示压缩BCD码28 ;(AL)=68H+28H=90H ;十进制调整:(AL)=96H ;实现压缩BCD码加法:68+28=96
AAA
例如计算两个十进制数和8+6=?,程序段如 下: MOV AX,0008H MOV BL,06H ADD AL,BL AAA ;调整后(AX)=0104H,(CF)=1
AAA
假设上述两个十进制数用ASCII码表示, 则变成38H+36H=?,其程序段如下: MOV AX,0038H MOV BL,36H ADD AL,BL ;(AL)=6EH AAA ;(AX)=0104H
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 CL ;8位寄存器加1 INC SI ;16位寄存器加1 INC BX ;16位寄存器加1 INC MEM-BYTE [DI] ;字节存储器加1 INC MEM-WORD [SI] ;字存储器加1
加法的非压缩BCD码调整指令AAA
语句格式:AAA 功能:未组合的BCD加法调整指令,亦可以作 为ASCII码加法调整指令。 用法:必须将其和放在累加器AL中,AAA指令 要紧跟在加法指令之后使用。 如果AL的低4位大于9或(AF)=1,则: (AL)=(AL)+6 (AH)=(AH)+1 (AF)=(CF)=1 且AL高4位清零。 否则:(CF)=(AF)=0 AL高4位清零。
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
求25-7=?其结果用十进制数未组合的BCD码 表示。可用下列指令完成这个十进制数减法 MOV AX,0205H ; (AH)=02H,(AL)=05H SUB AL,07H ; (AL)=FEH, (AF)=1 ;(AH)=01H,(AL)=08H,(CF)=1 AAS
语句格式:SBB OPD ,OPS 功能:目的操作数减源操作数再减低位 借位CF,结果送目的地址。 即(OPD)―(OPS)―CF →( OPD)
用法:SBB指令常用于多精度的减法 运算中。
例求876A935247H-5A6C486D2BH=? Sbb.asm
设数据在数据段中定义如下: 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 ;数据段结束
减1指令DEC
语句格式:DEC OPD 功能:将目的操作数减1,结果送目的地址。 即(OPD)-1→(OPD)。 标志位:除CF标志位不受影响外,其余状态 标志均受影响。 目的操作数:可以放在通用寄存器和存储器 中。 如:DEC CX。即(CX)-1→CX。 减1指令DEC也一般用于对计数器和地址指针 的调整。
加运算指令
加法运算除INC不影响CF位外,其余都影 响条件标志位(CF ZF SF OF PF AF) CF位是根据最高有效位是否有向高位的 进位设置的。有,CF=1 OF根据操作数的符号及变化情况来设置 若两操作数符号相同,结果的符号与之相 反,OF=1 OF表示带符号数的溢出 CF表示无符号数的溢出
Baidu Nhomakorabea
设在数据段定义了两个多精度的16 进制数: FIRST和SECOND ,求两数之和,并 将结果存放在THIRD为首地址的存 储器中。 Exp31.asm
FIRST SECOND THIRD
DW 758DH,9A5CH DW 0A524H,8345H DW 3 DUP(0)
LEA SI,FIRST ;取加数的有效地址 LEA DI,SECOND ;取被加数的有效地址 LEA BX,THIRD ;取存放和的有效地址 MOV AX,[SI] ;取加数的第一个字 ADD AX,[DI] ;与被加数的第一个字相加 MOV [BX],AX ;存第一次运算的部分和 PUSHF ;保护标志位
SUB
MOV AX ,5678H ;(AX)=5678H SUB AX ,1234H ;(AX)=4444H MOV SUB BX ,3354H BX ,3340H ;(BX)=3354H ;(BX)=0014H
SUB AX,VAR[BX+SI] SUB ALPHA[DI],DX
带借位减指令 SBB
减运算指令
减法运算的条件码设置与加法运算类似 OF根据操作数的符号及变化情况来设置 若两操作数符号相反,结果的符号与减数 相同,则OF=1 OF表示带符号数的溢出 CF表示无符号数的溢出
减指令SUB
语句格式:SUB OPD,OPS 功能:目的操作数减源操作数,结果 存于目的地址,源地址内容不变。 即(OPD)-(OPS)→(OPD) 指令将对CF、AF、SF、ZF、PF、OF状 态标志位有影响,使用的操作数组合 与ADD指令相同。
加指令ADD
语句格式:ADD OPD, OPS 功能:将目的操作数与源操作 数相加,结果存入目的地址中, 源地址的内容不改变。 即(OPD)+(OPS)→(OPD)。
ADD
目的操作数可以是通用寄存器或存储器, 源操作数可以是通用寄存器、存储器或立即 数。 ▲注意 目的操作数和源操作数不能同时是存储器操 作数。 段寄存器不能直接参加算术运算。 加法指令的操作对象可以是16位或8位。
加法的十进制调整指令DAA
语句格式:DAA 功能: 如果AL寄存器中低4位大于9或辅助进 位 ( AF)=1, 则 ( AL)=(AL)+6 且 (AF)=1; 如 果 ( AL)>=0A0H 或 ( CF)=1, 则 (AL)=(AL)+60H且(CF)=1。 同时,SF、ZF、PF均有影响。对OF无 影响
求补指令NEG
语句格式:NEG OPD 0-(OPD)→(OPD)。
操作数:可以是通用寄存器或存储器。 标志位:影响SF、ZF、AF、PF、OF,在一 般情况下,总使CF=1,除非操作数为零时, 才使CF=0;OF标志一般情况下为0,但当操 作为80H或8000H,NEG指令对其求补,结果 与原操作数相同,此时OF=1。
Max.asm
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]
DAA 例如:对两个十进制数求和,78+56=?, 可用如下指令实现: MOV AL,78H ;(AL)=78H ADD AL,56H ;(AL)=CEH DAA ;(AL)=34H,(CF)=1
减运算指令
减指令SUB 带借位减指令 SBB 减1指令DEC 求补指令NEG 比较指令 CMP AAS DAS
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
算术运算类指令
加法指令 减法指令 乘法指令 除法指令
算术运算类指令
共同特点: 用来执行算术运算,有单操作数指令, 也有双操作数指令 双操作数指令的两个操作数中除源操作 数为立即数的情况外,必须有一个操作 数在寄存器中。 单操作数指令不允许使用立即数方式
加法指令
加指令ADD 带进位加指令ADC 加1指令 INC AAA DAA
ADD
ADD AL,10 ADD AX,BX ADD DX,BETA[SI] ADD MEM[DI],SI 存储器与立即数相加,存储器的属性需要指定 ADD DELTA[BX],1250H ;DELTA为字变量 ADD BYTE PTR [SI],25H ;指定存储器为字节类型
带进位加指令ADC
比较指令 CMP
【例】比较AL的内容数值大小。
CMP AL,50 ;(AL)-50 JB BELOW ;(AL)<50,转到BELOW处执行 SUB AL,50 ;(AL)>=50,( AL)-50→AL INC AH ;(AH)+1→AH BELOW: …
在10个无符号数中求最大值,最大值存 放在MAX变量中,
语句格式:AAS 功能:是未组合BCD码减法调整指令,可对AL 中的两个未组合的十进制数相减的结果进行调整, 使差成为正确的十进制数。 如果AL的低4位大于9或(AF)=1,则: (AL)=(AL)-6 (AH)=(AH)-1 (AF)=(CF)=1 AL高4位清零。 否则:(CF)=(AF)=0 AL高4位清零。 其他标志位OF、PF、SF、ZF不确定。
语句格式:ADC OPD,OPS 功能:将目的操作数加源操作数再加低位进位,结果 送目的地址。 用法:该指令常用于多精度加法的计算。 即(OPD)+(OPS)+CF → (OPD)。 【例】无符号双字加法运算。 MOV AX,4652H ;(AX)=4652H ADD AX,0F0F0H;(AX)=3742H,CF=1 MOV DX,0234H ;(DX)=0234H ADC DX,0F0F0H ;(DX)=0F325H,CF=0