標誌暫存器

2021-07-12 07:57:03 字數 3168 閱讀 7459

標誌暫存器

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 進製標誌 ...