日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

王爽 汇编语言第三版 第11章 标志寄存器

發(fā)布時間:2024/7/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 王爽 汇编语言第三版 第11章 标志寄存器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

?

?

條件碼:

  • ① OF(Overflow Flag)溢出標(biāo)志,溢出時為1,否則置0.標(biāo)明一個溢出了的計算,如:結(jié)構(gòu)和目標(biāo)不匹配.
  • ② SF(Sign Flag)符號標(biāo)志,結(jié)果為負(fù)時置1,否則置0.
  • ③ ZF(Zero Flag)零標(biāo)志,運算結(jié)果為0時置1,否則置0.
  • ④ CF(Carry Flag)進(jìn)位標(biāo)志,進(jìn)位時置1,否則置0.注意:Carry標(biāo)志中存放計算后最右的位.
  • ⑤ AF(Auxiliary carry Flag)輔助進(jìn)位標(biāo)志,記錄運算時第3位(半個字節(jié))產(chǎn)生的進(jìn)位置。有進(jìn)位時1,否則置0.
  • ⑥ PF(Parity Flag)奇偶標(biāo)志.結(jié)果操作數(shù)中1的個數(shù)為偶數(shù)時置1,否則置0.

控制標(biāo)志位:

  • ⑦ DF(Direction Flag)方向標(biāo)志,在串處理指令中控制信息的方向。
  • ⑧ IF(Interrupt Flag)中斷標(biāo)志。
  • ⑨ TF(Trap Flag)陷井標(biāo)志。

?

?

11.1 ZF?標(biāo)志( 0?標(biāo)志位?)

?

11.2?PF?標(biāo)志(?奇偶 標(biāo)志位

?

11.3 SF?標(biāo)志 (?結(jié)果正負(fù)標(biāo)志0?表示 正,1?表示?負(fù)?)

?

https://blog.csdn.net/zhangjiuding/article/details/79133961

寫出下面每條指令執(zhí)行后,ZF、PF、SF等標(biāo)志位的值。?

ZF標(biāo)志:是否為0?
PF標(biāo)志:結(jié)果中是否有偶數(shù)個為 1 的 bit位。?
SF標(biāo)志:結(jié)果是否為負(fù),僅有符號運算有用。

提示:傳送指令不影響標(biāo)志位。至于為什么是這樣,我估計是因為更改標(biāo)志位會費時間,CPU的資源很寶貴,而且轉(zhuǎn)移指令的標(biāo)志位并沒有什么實際意義

  • sub al,al 結(jié)果為0,有0個為1的bit位,非負(fù)。
  • mov al,1 傳送指令不影響標(biāo)志位。
  • push ax 傳送指令不影響標(biāo)志位。
  • pop bx 傳送指令不影響標(biāo)志位。
  • add al,bl 結(jié)果為00000010B,結(jié)果不為0,有1個為1的bit位,非負(fù)。
  • add al,10 結(jié)果為00001100B,結(jié)果不為0,有2個為1的bit位,非負(fù)。
  • mul al 結(jié)果為10010000B,結(jié)果不為0,有2個為1的bit位,非負(fù)。
  • ?

    ?

    11.4 CF?標(biāo)志 (?進(jìn)位?標(biāo)志位?)

    ?

    ?

    11.5 OF?標(biāo)志 (?溢出?標(biāo)志位?)

    ?

    11. 6?adc?指令

    ?

    11.7?sbb?指令

    ?

    11.8?cmp?指令

    ?

    ?

    ?

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

    ?

    ?

    ?

    ?

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

    ?

    ?

    11.11?pushf?和?popf

    題目:下面的程序執(zhí)行后,ax的值是多少?

    assume cs:codesg datasg segmentdb 16 dup(0) datasg ends codesg segmentstart:mov ax,0push axpopfmov ax,0fff0hadd ax,0010hpushfpop axand al,11000101band ah,00001000bmov ax,4c00hint 21hcodesg endsend start

    這題是對第十一章標(biāo)志寄存器的更好理解。
    先上個圖:

    本題關(guān)鍵在于 OF? 標(biāo)志的判斷。另一個關(guān)鍵點是 and 0000 0100 1100 0101 起到了屏蔽未學(xué)習(xí)位的作用!

    一步一步來分析:

    mov ax,0 將ax置0 push ax ax 入棧 popf 將棧中的數(shù)據(jù)彈出到psw(標(biāo)志寄存器)中 此時 psw 中數(shù)據(jù)為:0000 0000 0000 0000b

    mov ax, 0fff0h
    add ax, 0010h
    這兩句的作用是(ax) = fff0h + 0010h,顯然,psw中的數(shù)據(jù)會發(fā)生改變,問題是:如何改變呢?

    CF: 假設(shè)這里是無符號運算,則1111 1111 1111 0000b(fff0h) + 0000 0000 0001 0000b(0010h) = 1 0000 0000 0000 0000b,已經(jīng)發(fā)生了進(jìn)位,所以CF = 1
    PF: 結(jié)果保存在ax中,ax=0000h,’1’的個數(shù)是0,是偶數(shù),所以PF標(biāo)志=1

    AF: AF沒學(xué),先不管,假設(shè)它是個不確定值,AF = ?
    ZF: 結(jié)果是0,顯然ZF = 1

    SF: 結(jié)果是0,不是負(fù)數(shù),所以SF = 1
    TF: TF沒學(xué),先不管,假設(shè)它是個不確定值,AF = ?

    IF: IF沒學(xué),先不管,假設(shè)它是個不確定值,AF = ?
    DF: DF為方向標(biāo)志位,add指令不會影響DF,前面已經(jīng)將psw置0,所以DF = 0

    OF: OF(溢出標(biāo)志位)對初學(xué)者來說是最難的了,OF記錄了有符號數(shù)運算結(jié)果是否溢出。那么,如何判斷是否溢出呢?

    ?

    假設(shè)是有符合運算,fff0h(1111 1111 1111 0000b)對應(yīng)的原碼是1000 0000 0001 000b(即十進(jìn)制-16),這是如何算出來的?很簡單:先看符號位1,說明是個負(fù)數(shù),然后所有位取反再加1(即0000 0000
    0001 0000b)得絕對值,前面確定是負(fù)數(shù),所以符號位應(yīng)該是1,則原碼為1000 0000 0001 000b,同樣,0010h的源碼(正數(shù)的補碼和原碼相同)是0000 0000 0001 0000b(即十進(jìn)制的16),

    顯然,結(jié)果是0,一個正數(shù)一個負(fù)數(shù)相加,結(jié)果肯定不會溢出!!!下面給出一個tip,用來快速判斷運算是否溢出:
    tip: 正加正得負(fù),負(fù)加負(fù)得正,肯定溢出

    一正一負(fù)相加肯定不會溢出

    (進(jìn)行正加正,負(fù)加負(fù)運算時,可以全部轉(zhuǎn)為十進(jìn)制來看,如果得到正加正得正,負(fù)加負(fù)得負(fù),則需看他們結(jié)果是否在可表示范圍內(nèi))

    通過說明的tip,立刻可以判斷出未溢出,所以O(shè)F = 0;

    所以:運行完上面兩條語句后,psw值為: 0000 00?? 010? 0101b

    pushf 將psw的值入棧
    pop ax 此時ax即: 0000 00?? 010? 0101b

    and al,11000101b
    and ah,00001000b

    and 的是按位與,運算法則是:有0則0,我們寫對齊來看

    0000 00?? 010? 0101b
    0000 1000 1100 0101b
    顯然 and 以后 ax = 0000 0000 0100 0101b = 45h

    ?

    ?

    11.12?標(biāo)志寄存器在?debug?中的表示

    ?

    ?

    實驗 11: 編寫子程序

    ?

    示例代碼:

    assume cs:codesgdatasg segmentdb "Beginner's All-purpose Symbolic Instruction Code.",0 datasg endscodesg segment begin:mov ax,datasgmov ds,axmov si,0call lettercmov ax,4c00hint 21hletterc: ;子程序部分[開始]push si s0: mov al,[si]cmp al,0je exitsubcmp al,61h ; 61h為'a'的ASCII碼jb nextcmp al,7ah ; 7ah為'z'的ASCII碼ja nextand al,11011111B ;或使用sub al,20hmov [si],al next: inc sijmp short s0 exitsub:pop siret ;子程序部分[結(jié)束] codesg ends end begin; 提示: ; 1.相當(dāng)于將字符串中的每個字符在閉區(qū)間['a','z']內(nèi)進(jìn)行比較; ; 2.欲顯示相關(guān)字符串,可調(diào)用實驗10中的"顯示子程序"(屬第十章內(nèi)容),在調(diào)用時注意相關(guān)參數(shù)的傳遞。

    ?

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的王爽 汇编语言第三版 第11章 标志寄存器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。