-1
我被要求用匯編語言編寫程序,從下一個公式開始:(yy + h + m) - (d + d),其中變量以字節表示,並且只有h的值大於128.彙編語言中的帶符號和無符號約定
必須有兩個程序,一個使用無符號約定,另一個使用簽名約定,我不知道這意味着什麼,因爲沒有乘法並使用imul或idiv的部門...
我應該使用cbw命令,如果是,如何?
我被要求用匯編語言編寫程序,從下一個公式開始:(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
我想你想'cbw'那裏,不是嗎? 'cwd'會在dx:ax中籤名擴展單詞爲dword。 –
@FrankKotler - 是的,當然,我的手指會自動輸入。另外,EAX。爲什麼這些學校還教16bit編程?在2013年! – johnfound
謝謝。這幫了很多。 – user2920941