• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            匯編中的test和cmp比較

            Posted on 2009-10-06 00:24 S.l.e!ep.¢% 閱讀(8607) 評論(1)  編輯 收藏 引用 所屬分類: Crack

            首先看看:狀態寄存器(即標志寄存器)

            PSW(Program Flag)程序狀態字(即標志)寄存器,是一個16位寄存器,由條件碼標志(flag)和控制標志構成,
            如下所示:

            15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
                    OF DF IF TF SF ZF   AF   PF   CF

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

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


            為舉例方便說一下jnz和jz
            測試條件
            JZ ZF=1
            JNZ ZF=0
            即Jz=jump if zero (結果為0則設置ZF零標志為1,跳轉)
            Jnz=jump if not zero

            好,接著來看test和cmp

            *******************************************************************************
            test屬于邏輯運算指令

            功能: 執行BIT與BIT之間的邏輯運算
            測試(兩操作數作與運算,僅修改標志位,不回送結果).
            Test對兩個參數(目標,源)執行AND邏輯操作,并根據結果設置標志寄存器,結果本身不會保存。EST AX,BX 與 AND AX,BX 命令有相同效果

            語法: TEST r/m,r/m/data
            影響標志: C,O,P,Z,S(其中C與O兩個標志會被設為0)

            運用舉例:
            1.Test用來測試一個位,例如寄存器:

            test eax, 100b; b后綴意為二進制
            jnz ******; 如果eax右數第三個位為1,jnz將會跳轉

            我是這樣想的,jnz跳轉的條件是ZF=0,ZF=0意味著ZF(零標志)沒被置位,即邏輯與結果為1.

            2.Test的一個非常普遍的用法是用來測試一方寄存器是否為空:

            test ecx, ecx
            jz somewhere

            如果ecx為零,設置ZF零標志為1,Jz跳轉

            *******************************************************************************
            CMP屬于算術運算指令

            功能: 比較兩個值(寄存器,內存,直接數值)
            語法: CMP r/m,r/m/data
            標志位: C,P,A,Z,O

            CMP比較.(兩操作數作減法,僅修改標志位,不回送結果).
            cmp實際上是只設置標志不保存結構的減法,并設置Z-flag(零標志).
            零標志很像carry,也是內部標志寄存器的一位.

            例如:
            Cmp eax, 2; 如果eax-2=0即eax=2就設置零標志為1
            Jz ****; 如果設置了零標志就跳轉


            *******************************************************************************
            我得出的結論
            test邏輯與運算結果為零,就把ZF(零標志)置1;
            cmp 算術減法運算結果為零,就把ZF(零標志)置1.

            Feedback

            # re: 匯編中的test和cmp比較  回復  更多評論   

            2015-06-04 14:44 by xx
            666666666
            亚洲国产成人久久一区WWW| 亚洲人成无码网站久久99热国产| 国产69精品久久久久观看软件| 久久笫一福利免费导航 | 日韩人妻无码一区二区三区久久 | 蜜臀久久99精品久久久久久| 日韩精品久久久久久久电影蜜臀 | 久久精品国产亚洲AV久| 国内精品久久久久久久涩爱| 九九精品99久久久香蕉| 狠狠色丁香婷婷久久综合 | 亚洲人成网站999久久久综合 | 久久九九久精品国产| 久久中文字幕一区二区| 色欲久久久天天天综合网精品| 久久久久亚洲爆乳少妇无| 久久亚洲私人国产精品vA| 精品久久久久中文字| 久久精品www人人爽人人| 欧美熟妇另类久久久久久不卡 | 久久久久久久综合日本亚洲| 欧美精品九九99久久在观看| 伊人久久综合热线大杳蕉下载| 波多野结衣中文字幕久久| 日韩欧美亚洲综合久久影院Ds | 久久精品中文字幕一区| 99久久精品久久久久久清纯| 久久精品欧美日韩精品| 国色天香久久久久久久小说| 亚洲国产一成人久久精品| 亚洲午夜精品久久久久久浪潮| 亚洲综合久久综合激情久久| 久久久久久亚洲Av无码精品专口| 久久天天躁狠狠躁夜夜avapp| 欧美色综合久久久久久| 久久免费高清视频| 伊人久久精品线影院| 久久91这里精品国产2020| 久久99精品久久久久久齐齐| 国产精品综合久久第一页| 久久婷婷五月综合国产尤物app|