【发布时间】:2017-03-15 04:06:55
【问题描述】:
代码是:
.model small
.data
ar db ffh
.code
mov ax,@data
mov ds,ax
mov ah,00h
mov al,ar
mov bl,40h
clc
adc ax,bx
mov ah,4ch
int 21h
end
-
它在第 3 行抛出错误
符号未定义:
ffh我不明白它为什么不识别
a0h这只是一个十六进制数字。 - 另外,请告诉我最后
ax是否会存储带进位的总和或不带进位的总和。因为我对adc是通过自己的加法还是从上次影响进位标志的任何先前指令获取CF 感到困惑。
【问题讨论】:
-
如果使用
h后缀的十六进制数以字母 (a, b, c, d, e, f) 开头,则需要在前面加上 0(零)。所以ar db ffh需要是ar db 0ffh -
使用之前设置的CF。
clc清除进位标志。因此 adc 将始终添加 0(而不是 1)的值,因此在这种情况下相当于使用add, -
adc采用先前的 CF 值,以允许您添加任意位长数字。如果您对第一组位(最低有效/最低)执行add,那么您可以使用adc继续添加剩余的较高位组,这将使用前一组的CF,并为下一组设置CF,因此,超出“组”限制的位不会丢失,而是会进一步传播到更高的组中。最高有效位加法的最终溢出将是adc指令链之后的最终 CF 值。 -
非常感谢大家