我被要求用汇编语言编写程序,从下一个公式开始:(yy+h+m)-(d+d),其中变量以字节表示,只有 h 的值大于128.
必须有两个程序,一个使用无符号约定,另一个使用有符号约定,我不知道这是什么意思,因为没有乘法和除法来使用 imul 或 idiv ...
我应该使用 cbw 命令吗,如果是,如何使用?
为了进行此计算,您需要将所有字节值转换为字,然后进行计算。那是因为结果将大于字节。
因此,将字节值扩展到字(两个字节)对于有符号数和无符号数是不同的,因为高位字节的内容取决于约定。
如果字节值是无符号的,则字值的高位字节必须设置为 0。例如 $8c 转换为两个字节: $8c $00 ($008c)
如果字节值被叹息,则必须用字节值的符号位的值填充高位字节。同样的例子:$8c 必须扩展到 $8f $ff。该指令cbw
进行有符号转换。
作为代码,它将如下所示:
; unsigned
mov al, byte [SomeByteVariable]
mov ah, 0
add ax, 1234 ; here we have unsigned word value.
; signed
mov al, byte [SomeByteVariable]
cbw
add ax, 1234 ; here we have signed word value