日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 匯編-條件跳轉與重復指令

匯編-條件跳轉與重復指令

來源:程序員人生   發布時間:2015-05-19 07:43:40 閱讀次數:3975次

條件跳轉

速記方法:

  • j(jmp)
  • z(zero)
  • n(not)
  • e(equal)
  • g(greater)
  • l(less)
  • a(above,無符號)
  • b(below,無符號)

    匯編指令x86下  指令+目的操作數+原操作數 比較是用目的操作數去和原操作數比較
    
    jz loc   當cmp的兩個值相等的時候跳轉,否則繼續履行下1條
    jnz loc  當cmp的兩個值不相等的時候跳轉,否則繼續履行下1條
    
    je loc   當cmp的兩個值相等的時候跳轉,否則繼續履行下1條
    jne loc  當cmp的兩個值不相等的時候跳轉,否則繼續履行下1條
    
    jg loc  (cmp eax,ebx)當eax大于ebx時履行跳轉,否則繼續履行下1條
    jge loc (cmp eax,ebx)當eax大于或等于(不小于)ebx時履行跳轉,否則繼續履行下1條
    
    ja loc  ja=jg 不過是無符號數比較
    jae loc jae = jge 不過是無符號數比較
    
    jl loc  (cmp eax,ebx)當eax小于ebx時履行跳轉,否則繼續履行下1條
    jle loc (cmp eax,ebx)當目的操作數小于或等于原操作數時,跳轉,否則履行下1條
    
    jb loc 和 jl 1樣,不過是無符號的比較
    jbe loc 和jle1樣,不過是無符號數的比較
    
    后面兩個不怎樣經常使用,但是記錄1下吧:
    jo loc 如果上1條指令履行后(of=1),則跳轉(溢出跳轉)
    js loc 如果符號位被置位(sf=1),則跳轉
    
    jecxz loc (jmp if ecx = 0)
    

重復指令

這里說的重復指令是對字符串數組的操作。字符串數組操作的最小原子步驟1般為:
movsx,cmpsx,stosx,scasx,x則可以是b(byte),w(word),d(dword),這1部份會在后面細講。
使用這些操作時,用esi(source addr)充當源地址,edi(destination addr)充當目的地址。

由于字符串的比較和移動,需要對長度作以限制,所以需要1個長度參數,1般用ecx來計數。
重復指令用rep來表示,終止條件為:

  • rep 當ecx不為0的時候重復后面指令
  • repe,repz 當ecx不為0,并且 zf=1的時候重復后面指令
  • repne ,repnz 當ecx不為0,并且 zf=0的時候重復后面指令

REP/REPE/REPNE

The string instructions may be prefixed by REP/REPE/REPNE which will repeat the
instructions according to the following conditions:

             rep       decrement cx ; repeat if cx is not zero
             repe      decrement cx ; repeat if cx not zero AND zf = 1
             repz      decrement cx ; repeat if cx not zero AND zf = 1
             repne     decrement cx ; repeat if cx not zero AND zf = 0
             repnz     decrement cx ; repeat if cx not zero AND zf = 0

Here, ‘e’ stands for equal, ‘z’ is zero and ‘n’ is not. These repeat instructions
should NEVER be used with a segment override, since the 8086 will forget the
override if a hardware interrupt occurs in the middle of the REP loop.

在x86下,使用重復前綴來做多字節操作,rep會增加esi 和edi這兩個偏移,并且同時減少ecx的值,rep前綴會不斷重復,直到終止條件到來。因此,需要在使用前初始化esi,edi,ecx

  • movsb 從esi指向的地址中獲得1個字節,并寄存到edi中(需要用df方向標志來肯定移動方向,esi+1,edi+1或esi⑴,edi⑴)
  • cmpsb 用于esi和edi字符串的比較(單字節比較),更新ZF標志位。(memcmp
  • scasb 用于從字符串中搜索1個值,這個值由al指出,所以需要初始化al。注意,不是用esiedi比較,尋覓到的位置會寄存到esi中。
  • stosb 用于將值寄存到 edi指向的地址。(memset

rep指令的經常使用組合

  • repe cmpsb 比較esiedi指向的字符串,當字符串不同或ecx=0的時候停止
  • rep stosb (repeat store string by byte)用于用1個給定的值初始化緩沖區中所有字節。edi包括了緩沖區地址,al則包括了初始值。
  • rep movsb 將esi指向的字符串復制到edi中,長度為ecx。(單字節復制,rep加偏移1,ecx表示重復次數)
  • repne scasb 從edi中搜索單字節(al),并將結果放在esi中,ecx為緩沖區長度。

比較movsb和stosb

movsb需要指定兩個字符串,esi and edi.

stosb只需要指定edi,要復制的是單個字節,由al給定。

參考資料:

歹意代碼分析實戰P74⑺6

指令集查詢

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 澳门永久av免费网站 | 久久久久久久久久久美女 | 成人网址在线观看 | 国产精品久久久久久久久久久久久 | 91大片| 综合视频在线 | 热久久久久久 | 在线欧美 | 九九99久久 | 午夜av在线播放 | 久久久99国产精品免费 | 日日韩av | 久久婷婷亚洲 | 久久精品网 | 欧美日韩色 | 又湿又紧又大又爽a视频国产 | www.男人天堂.com | 一本亚洲 | 国产美女久久久 | 亚洲精品久久久一区二区三区 | 日韩在线影院 | 亚洲视频在线观看视频 | 久久中文字幕一区二区 | 亚洲国产aⅴ成人精品无吗 国产一区免费在线观看 | 欧美精品成人一区二区三区四区 | 国产在线一区二区 | 亚洲一区二区综合 | 亚洲精品二 | 精品亚洲国产成av人片传媒 | 日韩视频一区二区三区四区 | 97中文字幕第十五页 | 精品国产91久久久久久 | 伊人久久视频 | 国产精品久久久久久久久久久新郎 | 韩日av网站 | 在线观看中文字幕av | 亚洲精品在线观看网站 | 精品国产乱码久久久久 | www.操.com| 成人国产精品久久久 | 午夜精品久久久久久久久久久 |