汇编带进位加法指令问题
发布网友
发布时间:2023-03-20 12:19
我来回答
共3个回答
热心网友
时间:2023-10-06 04:39
ADD指令只是将操作数中给出的两个数相加
而ADC则是再两个操作数相加的基础上再加上CF里的数(可能是1和0)
你可能对这个加上CF里的数的过程很费解吧?下面解释为什么加这个CF
当两个操作数的和大于所能表示的位数的时候,会出现进位的现象,但寄存器的位数又是有限的,这个进的位放到哪里呢?其实是放到CPU的标志寄存器里去了,下面举两个产生进位和没产生进位的ADD指令
MOV AL,11
ADD AL,11
这个ADD指令的和是22,没有产生进位,CF=0
MOV AL,0FEH
ADD AL,64H
这个的和是162H,八位的寄存器表示不下了,CPU将CF设置成1,AL=62
因为两个八位的二进制数最多只能产生一位的进位,所以一个CF就够用了
下面回想一下小学的100以内的加法运算的过程
然后看看如何进行超出寄存器所能表示的位数的数的加法运算
比如计算64+27,先将4和7相加,得13,我们可以把这个3就当成是AL这个寄存器里的数,而将这个1当成是CF里的数,这样我们进行第二位的计算时,先计算6+2,然后在加上这个"CF"里的1,结果的9,所以最后的结果就是93
现在明白带进位加法指令的意义的吧?
给你举一个用16位寄存器计算32位加法的例子:
第一加数:DX为高位,AX为低位
第二加数:CX为高位,BX为低位
结果放在DX(高位)和AX中
ADD AX,BX
ADC DX,CX
就这么简单的两条指令O(∩_∩)O~
双精度就是表示小数的一种方式,用存储空间的一部分代表科学计数法的a×10^n的a
一部分代表n
和单精度基本上没什么两样,只是表示的范围比单精度的大,因为位数比单精度的大嘛,单精度是32位的,双精度的是64位的
单精度:
http://ke.baidu.com/view/1007029.html
双精度:
http://ke.baidu.com/view/2182680.html
热心网友
时间:2023-10-06 04:39
ADC带进位加法在加多字节数时使用 之所以adc dx,bx add ax,cx
是因为 一个双字节数的高位存在dx,低位cx 而另一个则是bx,ax
双精度数是一种表示小数的格式约定
热心网友
时间:2023-10-06 04:40
先将4和7相加,得13?
不是11吗