我被要求用汇编语言编写一个程序,从下一个公式开始:(yy + h + m) - (d + d),其中变量用字节表示,只有h的值大于128。
必须有两个程序,一个使用无符号约定,另一个使用签名约定,我不知道这意味着什么,因为没有乘法和除法使用imul或idiv ......
我应该使用cbw命令,如果是,请问如何使用?
答案 0 :(得分:0)
为了进行此计算,您需要将所有字节值转换为word,然后进行计算。那是因为结果将大于字节。
因此,对于有符号和无符号数字,将字节值扩展为字(两个字节)是不同的,因为高阶字节的内容取决于约定。
如果字节值是无符号的,则字值的高位字节必须设置为0.例如$ 8c转换为两个字节:$ 8c $ 00($ 008c)
如果字节值是sighed,则高位字节必须用字节值的符号位的值填充。同样的例子:$ 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