ADC DX,DX 和 ADC DX,0 的作用

来源:百度知道 编辑:UC知道 时间:2024/05/14 18:01:34
求16X+Y的值:(杨季文《80x86汇编语言程序设计教程》p81)
表达式的结果可能超出16位,所以定义两个字变量用于保存X和Y,另外用一个32位的双字变量来保存结果。
用DX和AX保存中间结果,DX保存高16位,AX保存低16位。
DSEG SEGMEN
XXX DW 1234H ;设X为1234H
YYY DW 5678H ;设Y为5678H
ZZZ DD ? ;用于保存结果
DSEG ENDS

CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG ;(1)设置数据段寄存器值
MOV DS,AX
MOV AX,XXX ;(2)把X送AX并扩展到32位
XOR DX,DX
ADD AX,AX ;(3)计算X*16
ADDC DX,DX
ADD AX,AX ;X*4
ADDC DX,DX
ADD AX,AX ;X*8
ADDC DX,DX
ADD AX,AX ;X*16
ADDC DX,DX
ADD AX,YYY ;(4)在X*16结果上再加上Y
ADDC DX,0
MOV WORD PTR ZZZ,AX ;(5)保存结果
MOV WORD PTR ZZZ+2,DX
MOV AH,4CH ;(6)返回DOS
INT 21H

CSEG ENDS
END START

ADC DX,DX 和 ADC DX,0 的作用
悬赏分:0 - 离问题结束还有 12 天 16 小时
求16X+Y的值:(杨季文《80x86汇编语言程序设计教程》p81)
表达式的结果可能超出16位,所以定义两个字变量用于保存X和Y,另外用一个32位的双字变量来保存结果。
用DX和AX保存中间结果,DX保存高16位,AX保存低16位。
DSEG SEGMEN
XXX DW 1234H ;设X为1234H
YYY DW 5678H ;设Y为5678H
ZZZ DD ? ;用于保存结果
DSEG ENDS

CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG ;(1)设置数据段寄存器值
MOV DS,AX
MOV AX,XXX ;(2)把X送AX并扩展到32位
XOR DX,DX
ADD AX,AX ;(3)计算X*16
ADDC DX,DX
ADD AX,AX ;X*4
ADDC DX,DX
ADD AX,AX ;X*8
ADDC DX,DX
ADD AX,AX ;X*16
ADDC DX,DX
ADD AX,YYY ;(4)在X*16结果上再加上Y
ADDC DX,0
MOV WORD PTR ZZZ,AX ;(5)保存结果
MOV WORD PTR ZZZ+2,DX
MOV AH,4CH ;(6)返回DOS
INT 21H

CSEG ENDS
END START

ADDC是带进位加 ADDC DX,DX作用为DX=DX+DX+CY,CY为进位标志
ADDC DX,0作用为DX=DX+CY,CY为进位标志