1. 程式人生 > >王爽《組合語言》第三版 CMP指令 有符號數的比較

王爽《組合語言》第三版 CMP指令 有符號數的比較

在講解有符號數大小的判斷方法時,有一句話是這樣的:如果因為溢位導致了實際結果為負,那麼邏輯上的真正結果必然為正如果因為溢位導致了實際結果為正,那麼邏輯上的真正結果必然為負

對於這句話,想必有些讀者肯定要理解好一會兒才能想明白這其中的原因

在學習《計算機組成原理》課程的時候,書中有一節降到了單位符號的資料進行加法運算時對溢位的判斷,書中的意是這樣的:如果兩個具有相同符號位的的數相加,而得到的結果的符號位卻和運算元的符號位相反,說明產生了溢位,大家可以隨便找幾個數試驗一下

書中使用機器字長為4位的加法運算對此結論進行了舉例說明:
這裡寫圖片描述

在計算機中是不存在減法運算的,只有加法,減去一個數相當於加上這個數的補碼,顯然,相同符號的兩個數字相加,結果必然也是和原符號相同的,如果產生了溢位,說明顯示出的結果的符號和真正的結果的符號是正好相反的,因此我們就可以說:如果發生了溢位,而顯示結果為負,則真正結果應該為正,顯示結果為正,則真正結果應該為負

這樣我們就總結出了有符號數比較大小的方法:

  • SF=1且OF=0 ax<bx
    • 無溢位,結果為負,說明左運算元小於右運算元
  • SF=1且OF=1 ax>bx
    • 產生溢位,結果為負,說明真正結果應該為正,左運算元大於右運算元
  • SF=0且OF=0且ZF=0 ax>bx
    • 無溢位,結果為非負,說明左運算元大於右運算元
  • SF=0且OF=1 ax<bx
    • 產生溢位,結果為正,說明真正結果應該為負,左運算元小於右運算元

一共就上面這四種情況,對於等於和不等於這兩種關係,我們可以通過ZF標誌位來判斷