除整數暫存器外,cpu還維護著一組單個位的條件碼暫存器
這些暫存器儲存著最近算術或者邏輯操作所產生的一些效果 列如:
邏輯操作的1 或者0
有符號數的結果是否溢位 等
cf(carry flag):進製標誌 描述了最近操作是否發生了進製(可以檢查無符號操作是否溢位)
zf(zero flag):零標誌 最近操作結果為0(列如 邏輯操作 等)
sf(sign flag):符號標誌最近操作結果為負數
of(overflow flag):溢位標誌最近操作導致乙個補碼溢位 補碼溢位通常有兩種結果(正溢位或者負溢位)
邏輯操作會將進製標誌和溢位標誌設定為0 (只是邏輯操作不會發生進製和溢位)
對於移位操作,進製標誌會設定為最後移出的位,而溢位標誌會設定為0
inc dec指令會設定溢位標誌和零標誌,但是不會改變進製標誌
了解條件碼之後出現兩類指令 僅僅設定條件碼不會改變其他的暫存器 (其儲存運算元的暫存器都不會改變 僅僅進行測試)
cmp a,b 操作 b-a (除不更新目標暫存器外 cmp和sub的行為是一樣的)
cmpb a, b
cmpw a, b
cmpl a, b
test a,b 操作 b&a (除不更新目標暫存器外 test和and的行為是一樣的)
testb a, b
testw a, b
testl a, b
例(cmp):
movw $0x0fff, %ax
movw $1,%bx
cmpw %ax, %bx
這時會設定符號標誌 但是%bx中的值還是$1
16位彙編學習筆記(二) 組合語言的語句
課後練習題 指令語句 具有對應的機器碼 偽指令語句 無對應的機器碼 指示匯程式設計序如何彙編源程式,包括括號,變數,段的定義 巨集指令語句 巨集彙編中的巨集指令語句,暫不介紹 偽指令 名字 偽指令定義符號 引數 引數 注釋 偽指令定義符規定了偽指令的功能。引數的個數和型別由偽指令的不同而不同 引數 ...
32位組合語言學習筆記 4 移位操作
sal k,d d d k 左移。shl,與 sal相同。sar k,d d d k 算術右移。shr k,d d d l k 邏輯右移。算術右移是指左邊空出來的位填符號位。邏輯右移是指左邊空出來的位填0。示例 shift.c int shift left2 rightn int x,int n g...
32位組合語言學習筆記 5 特殊的算術操作
imull s edx eax eax s edx 表示64 位的高32 位,eax 表示低32 位 有符號 64位乘法。mull s edx eax eax s 無符號 64位乘法。cltd eax 暫存器中的數,按照符號位擴充套件到 edx,轉為 8個位元組。idivl s edx edx ea...