-1

我被要求用汇编语言编写程序,从下一个公式开始:(yy+h+m)-(d+d),其中变量以字节表示,只有 h 的值大于128.

必须有两个程序,一个使用无符号约定,另一个使用有符号约定,我不知道这是什么意思,因为没有乘法和除法来使用 imul 或 idiv ...

我应该使用 cbw 命令吗,如果是,如何使用?

4

1 回答 1

1

为了进行此计算,您需要将所有字节值转换为字,然后进行计算。那是因为结果将大于字节。

因此,将字节值扩展到字(两个字节)对于有符号数和无符号数是不同的,因为高位字节的内容取决于约定。

如果字节值是无符号的,则字值的高位字节必须设置为 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
于 2013-10-25T18:59:27.137 回答