2013-10-25 43 views
-1

我被要求用匯編語言編寫程序,從下一個公式開始:(yy + h + m) - (d + d),其中變量以字節表示,並且只有h的值大於128.彙編語言中的帶符號和無符號約定

必須有兩個程序,一個使用無符號約定,另一個使用簽名約定,我不知道這意味着什麼,因爲沒有乘法並使用imul或idiv的部門...

我應該使用cbw命令,如果是,如何?

回答

0

爲了進行此計算,您需要將所有字節值轉換爲字,然後進行計算。這是因爲結果會比字節大。

因此,將字節值擴展爲字(兩個字節)對於有符號和無符號數是不同的,因爲高位字節的內容取決於約定。

如果字節值是無符號的,字值的高位字節必須設定爲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 
+0

我想你想'cbw'那裏,不是嗎? 'cwd'會在dx:ax中籤名擴展單詞爲dword。 –

+0

@FrankKotler - 是的,當然,我的手指會自動輸入。另外,EAX。爲什麼這些學校還教16bit編程?在2013年! – johnfound

+0

謝謝。這幫了很多。 – user2920941