我已經完成了一半以上的學習程序集,並且我熟悉如何將有符號和無符號整數呈現在位上的概念,我知道這似乎是一個奇怪的問題,答案會很明顯,但我想知道是否使用像加法這樣的算術運算對於一對數字來說是有意義的,其中一個數字被認爲是有符號數,另一個是無符號數,我想過下面的多個例子會產生正確的結果:會對一對有符號和無符號數進行算術運算是否合法?
10000001(1字節的整數,並認爲無符號,相當於129)
+ (1字節的整數,並認爲符號(2的補碼系統),相當於-1)
10000000(1字節的整數和在邏輯等效無符號128)
現在,如果上限值是在AL寄存器,我們有以下的指令代碼(GAS格式):
addb -1, %al
那麼EFLAGS寄存器的進位標誌(CF)將在操作完成後置位並通知實際上沒有發生的溢出,也可能是因爲溢出標誌(OF)溢出時有一個無符號數應該引用EFLAGS寄存器。所以我很困惑,如果做這樣的事情是明智的。
只有結果與所有操作數的大小相同時,這纔是真實的。處理器通常具有乘法指令,其結果大小是操作數大小的兩倍;有些還有操作數大小不同的附加指令(例如,68000上的ADD.W D3,A5或TMS32050上的ADD * +都會簽名擴展16位值並將其添加到32 TMS也有'ADDU * +'來將一個16位無符號值加到一個32位寄存器中 – supercat 2014-01-25 17:09:08