【匯編語言】第 11 章 標(biāo)志寄存器

版權(quán)聲明:本文為 gfson 原創(chuàng)文章,轉(zhuǎn)載請注明出處。
注:作者水平有限,文中如有不恰當(dāng)之處,請予以指正,萬分感謝。

11.1 概述

11.2 標(biāo)志介紹

  • ZF 標(biāo)志
  • ZF 是零標(biāo)志位。
  • 它記錄相關(guān)指令執(zhí)行以后,其結(jié)果是否為 0。
  • 如果結(jié)果為 0,則 ZF = 1,如果結(jié)果不為 0,則 ZF = 0。
  • PF 標(biāo)志
  • PF 是奇偶標(biāo)志位。
  • 它記錄相關(guān)指令執(zhí)行以后,其結(jié)果的所有 bit 位中 1 的個數(shù)是否為偶數(shù)。
  • 如果 1 的個數(shù)為偶數(shù),PF = 1,如果為奇數(shù),那么 PF = 0。
  • SF 標(biāo)志
  • SF 是符號標(biāo)志位。
  • 它記錄相關(guān)指令執(zhí)行以后,其結(jié)果是否為負(fù)。
  • 如果結(jié)果為負(fù),SF = 1,如果非負(fù),那么 SF = 0。
  • CF 標(biāo)志
  • CF 是進(jìn)位標(biāo)志位。
  • 在進(jìn)行無符號運算時,它記錄了運算結(jié)果的最高有效位向更高位的進(jìn)位值,或從更高位的借位值。
  • 如果無符號運算產(chǎn)生了進(jìn)位或借位,則 CF =1,反之,則 CF = 0。
  • OF 標(biāo)志
  • OF 是溢出標(biāo)志位。
  • 在進(jìn)行有符號運算時,它記錄了運算結(jié)果是否發(fā)生了溢出。
  • 如果有符號運算發(fā)生了溢出,則 OF =1,反之,則 OF = 0。
  • CF 和 OF 的區(qū)別:
  • CF 是對無符號運算有意義的標(biāo)志位。
  • OF 是對有符號運算有意義的標(biāo)志位。
  • CF 和 OF 所表示的進(jìn)位和溢出,是分別對無符號運算和有符號運算而言的,它們之間沒有任何關(guān)系。

11.3 檢測點 11.1 - 11.2

  • 答案:
  • 答案:

11.4 adc 指令

add 和 adc 的配合,完成對較大數(shù)據(jù)的加法

11.5 sbb 指令

11.6 cmp 指令

11.7 檢測比較結(jié)果的條件轉(zhuǎn)移指令

11.8 檢測點 11.3

  • 答案:

(1)

  • jb s0
  • ja s0

(2)

  • jna s0
  • jnb s0

11.9 DF 標(biāo)志和串傳送指令

  • DF 標(biāo)志
  • DF 是方向標(biāo)志位。
  • 在串傳送指令中,控制每次操作后 si、di 的增減。
  • DF = 0,每次操作后 si、di 遞增。
  • DF = 1,每次操作后 si、di 遞減。
  • 串傳送指令
  • movsb
    • movsb 的功能是將 ds:si 指向的內(nèi)存單元中的字節(jié)送入 es:di 中,然后根據(jù)標(biāo)志寄存器 DF 的值,將 si 和 di 遞增或遞減。
  • movsw
    • movsw 的功能是將 ds:si 指向的內(nèi)存單元中的送入 es:di 中,然后根據(jù)標(biāo)志寄存器 DF 的值,將 si 和 di 遞增或遞減。
  • rep 指令

    • rep 的作用是根據(jù) cx 的值,重復(fù)執(zhí)行后面的串傳送指令。
    • 如:rep movsbrep movsw
  • cld 和 std 指令

    • cld 指令:將標(biāo)志寄存器的 DF 位置 0。
    • std 指令:將標(biāo)志寄存器的 DF 位置 1。
  • pushf 和 popf 指令

    • pushf:將標(biāo)志寄存器的值壓棧。
    • popf:從棧中彈出數(shù)據(jù),送入標(biāo)志寄存器。

11.10 檢測點 11.4

  • 答案:(ax)=45H

11.11 標(biāo)志寄存器在 debug 中表示

11.12 實驗 11

  • 答案:
assume cs:code
stack segment
dw 8 dup (0)
stack ends
data segment
db "Beginner's All-purpose Symbolic Instruction Code.", 0
data ends
code segment
begin:  mov ax, stack
mov ss, ax
mov sp, 16
mov ax, data
mov ds, ax
mov si, 0
call letterc
mov ax, 4c00h
int 21h
letterc:
push cx
push si
pushf
mov ch, 0
start:  mov cl, ds:[si]
jcxz zero
cmp cl, 97
jb next
cmp cl, 122
ja next
sub cl, 20h
mov ds:[si], cl
next:   inc si
jmp start
zero:   popf
pop si
pop cx
ret
code ends
end begin
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容