我需要的
我被要求编写的程序的一部分是附加的。问题是我们被要求定义字节并将它们转换为单词(有符号扩展名),然后才添加它们。
问题
添加有时不会提供所需的输出。例如,我正在使用以下内容:
data segment
first DB 183
second DB 94
data ends
code segment
start:
mov ax,data
mov ds,ax
mov AX, 0
mov AL, first
cbw
mov BX, AX
mov AX, 0
mov AL, second
cbw
add AX, BX
mov ax, 4c00h
int 21h
code ends
end start
94(十六进制的 5E)+ 183(十六进制的 B7)= 277(十六进制的 115),但由于第一个cbw
,AX = FFB7而不是B7。但是,第二个数字仍如预期的那样AX = 5E ,因此将两个结果相加为AX = 15和CF = 1。
我找到了这个关于 CBW 的页面,其中指出“如果设置了 AL 的符号位(第 7 位),此指令会将 AH 设置为 0FFh”,这是我的情况,因为B7是二进制的1011 0111。
我错过了什么吗?我应该以某种方式解释进位标志吗?为什么我没有获得115 (hex)?
提前致谢。