標誌暫存器
jcc決定了cpu怎麼走,標誌暫存器決定了jcc。
cpza(0246)stdo
如果有兩個不會的問題,先搞定乙個,不會一起搞定兩。
(carry flag):如果運算結果的最高位產生了乙個進製或借位,那麼
研究位的時候要先確定資料寬度。
77a51314 b8 ffff5555 mov eax,0x5555ffff :eax == 0x5555ffff
77a51319 83c0 01
add eax,0x1 :eax ==0x55560000 c位不變
77a5131c b0 ff mov al,0xff :eax==0x555600ff
77a5131e 04
01add al,0x1 : eax==0x55560000 c位改變。進的位到 c標誌位裡面了。注意eax的結果。
資料寬度是8位。
40 + 80 無進製
80 – 40 無借位(最高位藉才算)
80-81 :借位。
1000 0000
- 1000 0001
1111 1111
有借位:結果是ff = -1, cf =1.
77a51320 b0 03
mov al,0x3
077a51322 04
03add al,0x3
177a51324 04
02add al,0x2
0
77a51326 b8 ffffee55 mov eax,0x55eeffff :eax ==0x55eeffff
77a5132b 83c0 02
add eax,0x2 :eax ==0x55ef0001----af變為1
77a5132e 66:b8 fe5e mov ax,0x5efe :ax ==0x5efe
77a51332 66:83c0 02
add ax,0x2 :ax ==0x5f00 ,af變為1,
77a512fc 66:b8 0308
mov ax,0x803
77a51300 66:83c0 01
add ax,0x1
803
0000 1000 0000 0011
0000 1000 0000 0100
注意:完了p位是0, 是看最低有效位元組。
77a51304 66:83c0 01 add
ax,0x1
此時,pf標誌為變為1.
xor:作用:
a:把eax 清零 b:影響標誌位。
和mov eax,0的區別:不修改標誌暫存器。
77
a51336
33c0
xor eax,eax
77a51338 b0 7f mov al,0x7f al:0x7f
77a5133a 04
02add al,0x2 al:0x81 ,sign :1.
是無符號:只關注c位。
有符號運算:只關注o位
正 + 正 = 正 如果結果是負數,說明有溢位。
負 +負 = 負 如果結果是正數,說明有溢位
正 + 負 永遠都不會溢位。
(1) 有符號、無符號都不溢位,資料寬度8位。
77a5133c b0 08
mov al,0x8
77a5133e 04
08add al,0x8
當無符號計算:不超過ff,
當有符號計算:不超過7f。
(2) 無符號溢位(關注c),有符號不溢位
77a51340 b0 ff mov al,0xff
77a51342 04
02add al,0x2 :al:01,c:1.
(3) 無符號不溢位,有符號溢位(o位)
77a51344 b0 7f mov al,0x7f
77a51346 04
02add al,0x2 :al== 81,c:0,o:1.
(4) 無符號,有符號都溢位
77a51348 b0 fe mov al,0xfe
77a5134a 04
80add al,0x80
當成無符號:超過ff了。
當成有符號:兩個加完成正數了。
注意:主要是你把它看成什麼計算,計算機不管你。那個圓圖很有用。
77a51308 b0 80
mov al,0x80
執行前:al ==00 ,c位==1 ;執行後 al ==80,c位 ==1。(未改變)
77a5130a 2c 40
sub al,0x40 al== 0x40 。
執行前:al ==80 ,c位==1 ;執行後 al ==40,c位 ==0。(改變為正確結果)
77a5130c b0 80
mov al,0x80
77a5130e 04 c0 add al,0xc0(add al,-40): al ==0x40 ,c位==1.
1000 0000(80)
1100 0000 (c0)
計算機判斷of位:(1+1)
符號位有進製:1(1+1)
最高有效數值位想符號產生的進製:0(1+0)。
1 xor 0 == 1,所以of=1.
c語言定義變數你要指明是有符號還是無符號的:預設是有符號的。
例如:sf是1,不能說是負數吧。
標誌暫存器df 標誌暫存器
cpu內部的暫存器中,有一種特殊的暫存器具有以下三種作用。用來儲存相關指令的某些執行結果 用來為cpu執行相關指令提供行為依據 用來控制cpu的相關工作方式 這種特殊的暫存器在8086cpu種,被稱為標誌暫存器 flag 8086cpu的標誌暫存器有16位,其中儲存的資訊通常被稱為程式狀態字 psw...
暫存器,標誌暫存器
涉及硬體傳輸資料的,往往包含以下內容 1.資料傳輸引腳 資料放 2.控制引腳 怎麼控制 3.狀態引腳 結果如何 暫存器相當於cpu內部的儲存單元,可能是連續排列,相當於 c語言中的陣列。一 8個通用暫存器 16 bit accumulate axah alr0 count cxch clr1 dat...
標誌暫存器
標誌暫存器 標誌暫存器 flags register,fr 又稱程式狀態字 program status word,psw 這是乙個存放條件標誌 控制標誌暫存器,主要用於反映處理器的狀態和運算結果的某些特徵及控制指令的執行 各標誌在標誌暫存器中的位置 條件標誌 cf carry flag 進製標誌 ...