mdsk.net
当前位置:首页 >> 汇编语言中 加法(ADD)与带进位加法(ADC)有什么区别? >>

汇编语言中 加法(ADD)与带进位加法(ADC)有什么区别?

就是考虑不考虑CF的区别,简单说吧ADD是把2个数加起来,ADC是2个数加起来再加CF,CF是溢出标志位如果你有一定的硬件知识的话,ADD就是半加器,ADC就是全加器

ADD 是求两个指定整数的和,而 ADC 除了两个指定整数以外,还会加上 C(进位)状态的值.需要 ADC 指令,是因为如果要加的整数长于微处理器每次能加的位元数,就要分开来加,高位字节的结果取决于低位字节相加时有没有进位. 举例:假如有8位元微处理器每次只能加一个字节,如果我们要加两个 16 位元整数:00110101 11001010 + 00010100 01111101 先用 ADD 加 11001010 和 01111101,得 01000111,有进位,状态 C 设为 1再用 ADC 加 00110101 和 00010100 和 状态C(现在是1),得 01001010 所以和是 01001010 01000111

进位和溢出,是两个概念.有进位,不一定就是溢出.溢出了,也不一定有进位.

ADD是普通的加法指令,ADC是带进位的加法指令.两者的格式都为: ADD/ADC source,destination 将源操作数的值与目标操作数的值相加,并将运算结果放在目标操作数指示的位置.并根据相加结果设置标志寄存器的CF,PF,AF,ZF,SF,OF.

ADD 两数相加,不加进位位.ADDC 两数相加,同时再加个进位位.进位当时为1就加1 为0就加0相当于不加 一般用在多字节数相加中.最低位相加,用ADD ,加完后,可能产生进位,高字节相加就用ADDC 这样,低字节相加产生的进位就会

add为普通加法指令,将源操作数与目标操作数直接相加 adc为带进位的加法指令,在ADD加法的基础上,再加上CF的值.

.跟ADD的差别是还要加个CF,这个CF是谁的CF呢? XOR AX,AX INC AX NEG AX MOV BX,3FFFH ADC AX,BX 如果两个4字节的数相加,加法要分2次进行(先低两字节相加,后高两字节相加).在高两字节相加时,要把低两字节相加以后可能出现的进位考虑进去, 你这个例子不涉及进位,因为只有两个字节相加.结果是:AX=3FFDH,BX=3FFFFH,CF=1,因为这个加法溢出了,所以CF=1

ADD 就是普通的两个数相加; ADC 除了将两个数相加外, 还要加上进位标记的值, 这主要用在超长精度数值的运算上, 最典型的例子就是用DX:AX寄存器对来表示32位的值时的加法运算: ADD AX, loWORD ADC DX, hiWORD 其中hiWORD:loWORD是另一对32位的值, 可以是寄存器,内存中的值或者是立即数.

ADD AL,AH 是加法指令 AL=AL+AHADC AL,AH 带进位标志的加法指令 AL=AL+AH+CF

add是普通的加法指令,adc是带进位的加法指令.两者的格式都为: add/adc source,destination 将源操作数的值与目标操作数的值相加,并将运算结果放在目标操作数指示的位置.并根据相加结果设置标志寄存器的cf,pf,af,zf,sf,of.唯一的不同

网站首页 | 网站地图
All rights reserved Powered by www.mdsk.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com