多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

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

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

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

條件跳轉

速記方法:

  • 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

指令集查詢

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕色视频 | 看黄免费网站 | 波多野结衣视频在线播放 | 免费在线播放视频 | 成人中文字幕在线观看 | xxxxwww日本| 亚洲午夜小视频 | 欧美日韩午夜 | 日韩有码视频在线 | 亚洲乱码一区二区三区在线观看 | 天堂日韩| 欧美一级免费看 | 欧美videofree性欧美另类 | 在线久综合色手机在线播放 | 中文字幕在线播放量 | 欧美另类69xxxxx极品 | 九九精品久久久久久久久 | 欧美一级视频免费 | 免费看国产精品久久久久 | 天堂在线www网亚洲 天堂在线xw | 亚洲一区二区免费视频 | 成人国产免费 | 一二三四视频在线观看免费高清 | 亚洲精品成人一区二区 | 亚洲视频一区 | 亚洲第一网站 | 国产免费叼嘿在线观看 | 成人av在线播放 | 日韩一区国产二区欧美三区 | 国产极品美女在线观看 | 成人性生免费视频 | 日本护士做xxxwww | 中国国产一国产一级毛片视频 | 国产精品成人一区二区三区 | 亚洲黄色免费网址 | h网站在线观看 | 欧美一区二区三区在线观看不卡 | 欧美专区日韩专区 | 国产精品1页 | 色吊丝中文字幕 | 在线观看视频一区二区 |