我一直在閱讀和使用8086指令集,它說CMP(比較)可以設置進位標誌。我知道一個比較會減去兩個操作數,但我想知道是否有人可以在這種情況下提供示例。爲什麼CMP(compare)有時會在8086程序集中設置進位標誌?
我只是無法理解添加數字的想法,負數將設置進位標誌。我讀過借閱標誌,但我只是需要一個例子來闡明我對比較指令的理解。
另外,據我所知,如果3 - 5 = -2會設置負標誌...什麼時候進行設置?
我一直在閱讀和使用8086指令集,它說CMP(比較)可以設置進位標誌。我知道一個比較會減去兩個操作數,但我想知道是否有人可以在這種情況下提供示例。爲什麼CMP(compare)有時會在8086程序集中設置進位標誌?
我只是無法理解添加數字的想法,負數將設置進位標誌。我讀過借閱標誌,但我只是需要一個例子來闡明我對比較指令的理解。
另外,據我所知,如果3 - 5 = -2會設置負標誌...什麼時候進行設置?
使用無符號算術時,通常設置進位標誌。例如,添加兩個無符號(其結果不適合寄存器)的數字不會引起溢出標誌,而只是進位標誌。但是,使用帶符號的算術時,在這種情況下會設置溢出標誌。
您可以在this answer的相關問題的加號或減號後加上或減去進位和溢出標誌,將其設置爲0和1。
您還可以在那裏找到示例C代碼,模擬帶有進位的加法和用8位數字的借用指令進行減法,您可以玩這個,也許可以得到更多的例子。
輸出格式有這樣的事情:
127(127) - 255( -1) - 1 = 127(127) CY=1 OV=0
數字,每個數字表示爲兩個無符號和括號內簽署(2的補數)旁邊。 =
之前的數字是ADC/SBB之前的進位標誌。 CY=
和OV=
顯示ADC/SBB後的進位和溢出標誌。
比較和減去沒有借位幾乎相同,除了它隻影響進位,溢出,符號和零標誌(以及奇偶校驗和輔助進位,但它們在這裏不重要),而不修改寄存器中的任何數字/記憶。
聲明「我需要做一個例子」使這聽起來像作業。如果你只是通過一些現有的代碼進行調試,並觀看CY標誌,我相信你會看到一些ADD指令後設置。 –
嗯,我創建了我自己的指令集架構,我只是讀了8086指令,想知道如何比較(減去2個操作數並設置各個標誌)可以設置進位標誌。我知道ADD何時設置進位,但我對減/進位有些懷疑(不要與借位混淆)。在8086(以及許多其他)上的 – faul
,進位標誌執行雙重任務並表示減法或比較操作中的借位。如果您比較比較的值大於寄存器中的值,則存在借位,例如設置了CY標誌。如果該值與寄存器相同或更小,則不會借用,並且CY被清除。 – JustJeff