8088 彙編速查手冊(轉集)

來源:互聯網
上載者:User


參考:http://www2.zzu.edu.cn/qwfw/hbyycai/courses/index.asp

參考:http://blog.csdn.net/jiaguoxinzhi/archive/2008/09/13/2924898.aspx

參考:http://blog.csdn.net/jiaguoxinzhi/archive/2008/09/13/2924869.aspx

一、資料轉送指令
───────────────────────────────────────
    它們在存貯器和寄存器、寄存器和輸入輸出連接埠之間傳送資料.
    1. 通用資料傳送指令.
        MOV    傳送字或位元組.
        MOVSX 先符號擴充,再傳送.
        MOVZX 先零擴充,再傳送.
        PUSH    把字壓入堆棧.
        POP    把字彈出堆棧.
        PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.
        POPA    把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.
        PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.
        POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.
        BSWAP 交換32位寄存器裡位元組的順序
        XCHG    交換字或位元組.( 至少有一個運算元為寄存器,段寄存器不可作為運算元)
        CMPXCHG 比較並交換運算元.( 第二個運算元必須為累加器AL/AX/EAX )
        XADD    先交換再累加.( 結果在第一個運算元裡 )
        XLAT    位元組查錶轉換.
                ── BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即
                0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )
    2. 輸入輸出連接埠傳送指令.
        IN      I/O連接埠輸入. ( 文法: IN 累加器, {連接埠號碼│DX} )
        OUT    I/O連接埠輸出. ( 文法: OUT {連接埠號碼│DX},累加器 )
          輸入輸出連接埠由立即方式指定時, 其範圍是 0-255; 由寄存器 DX 指定時,
          其範圍是 0-65535.
    3. 目的地址傳送指令.
        LEA    裝入有效地址.
          例: LEA DX,string ;把位移地址存到DX.
        LDS    傳送目標指標,把指標內容裝入DS.
          例: LDS SI,string ;把段地址:位移地址存到DS:SI.
        LES    傳送目標指標,把指標內容裝入ES.
          例: LES DI,string ;把段地址:位移地址存到ES:DI.
        LFS    傳送目標指標,把指標內容裝入FS.
          例: LFS DI,string ;把段地址:位移地址存到FS:DI.
        LGS    傳送目標指標,把指標內容裝入GS.
          例: LGS DI,string ;把段地址:位移地址存到GS:DI.
        LSS    傳送目標指標,把指標內容裝入SS.
          例: LSS DI,string ;把段地址:位移地址存到SS:DI.
    4. 標誌傳送指令.
        LAHF    標誌寄存器傳送,把標誌裝入AH.
        SAHF    標誌寄存器傳送,把AH內容裝入標誌寄存器.
        PUSHF 標誌入棧.
        POPF    標誌出棧.
        PUSHD 32位標誌入棧.
        POPD    32位標誌出棧.

二、算術運算指令
───────────────────────────────────────
          ADD    加法.
        ADC    帶進位加法.
        INC    加 1.
        AAA    加法的ASCII碼調整.
        DAA    加法的十進位調整.
        SUB    減法.
        SBB    帶借位減法.
        DEC    減 1.
        NEC    求反(以 0 減之).
        CMP    比較.(兩運算元作減法,僅修改標誌位,不回送結果).
        AAS    減法的ASCII碼調整.
        DAS    減法的十進位調整.
        MUL    無符號乘法.
        IMUL    整數乘法.
          以上兩條,結果回送AH和AL(位元組運算),或DX和AX(字運算),
        AAM    乘法的ASCII碼調整.
        DIV    無符號除法.
        IDIV    整數除法.
          以上兩條,結果回送:
              商回送AL,餘數回送AH, (位元組運算);
          或 商回送AX,餘數回送DX, (字運算).
        AAD    除法的ASCII碼調整.
        CBW    位元組轉換為字. (把AL中位元組的符號擴充到AH中去)
        CWD    字轉換為雙字. (把AX中的字的符號擴充到DX中去)
        CWDE    字轉換為雙字. (把AX中的字元號擴充到EAX中去)
        CDQ    雙字擴充.    (把EAX中的字的符號擴充到EDX中去)

三、邏輯運算指令
───────────────────────────────────────
          AND    與運算.
        OR      或運算.
        XOR    異或運算.
        NOT    取反.
        TEST    測試.(兩運算元作與運算,僅修改標誌位,不回送結果).
        SHL    邏輯左移.
        SAL    算術左移.(=SHL)
        SHR    邏輯右移.
        SAR    算術右移.(=SHR)
        ROL    迴圈左移.
        ROR    迴圈右移.
        RCL    通過進位的迴圈左移.
        RCR    通過進位的迴圈右移.
          以上八種移位指令,其移位次數可達255次.
              移位一次時, 可直接用作業碼. 如 SHL AX,1.
              移位>1次時, 則由寄存器CL給出移位次數.
                如 MOV CL,04
                    SHL AX,CL

四、串指令
───────────────────────────────────────
             DS:SI 源串段寄存器 :源串變址.
            ES:DI 目標串段寄存器:目標串變址.
            CX      重複次數計數器.
            AL/AX 掃描值.
            D標誌 0表示重複操作中SI和DI應自動增量; 1表示應自動減量.
            Z標誌 用來控制掃描或比較操作的結束.
        MOVS    串傳送.
            ( MOVSB 傳送字元.    MOVSW 傳送字.    MOVSD 傳送雙字. )
        CMPS    串比較.
            ( CMPSB 比較字元.    CMPSW 比較字. )
        SCAS    串掃描.
            把AL或AX的內容與目標串作比較,比較結果反映在標誌位.
        LODS    裝入串.
            把源串中的元素(字或位元組)逐一裝入AL或AX中.
            ( LODSB 傳送字元.    LODSW 傳送字.    LODSD 傳送雙字. )
        STOS    儲存串.
            是LODS的逆過程.
        REP            當CX/ECX<>0時重複.
        REPE/REPZ      當ZF=1或比較結果相等,且CX/ECX<>0時重複.
        REPNE/REPNZ    當ZF=0或比較結果不相等,且CX/ECX<>0時重複.
        REPC          當CF=1且CX/ECX<>0時重複.
        REPNC          當CF=0且CX/ECX<>0時重複.

五、程式轉移指令
───────────────────────────────────────
     1>無條件轉移指令 (長轉移)
        JMP    無條件轉移指令
        CALL    程序呼叫
        RET/RETF過程返回.
    2>條件轉移指令 (短轉移,-128到+127的距離內)
        ( 若且唯若(SF XOR OF)=1時,OP1         JA/JNBE 不小於或不等於時轉移.
        JAE/JNB 大於或等於轉移.
        JB/JNAE 小於轉移.
        JBE/JNA 小於或等於轉移.
          以上四條,測試不帶正負號的整數運算的結果(標誌C和Z).
        JG/JNLE 大於轉移.
        JGE/JNL 大於或等於轉移.
        JL/JNGE 小於轉移.
        JLE/JNG 小於或等於轉移.
          以上四條,測試帶正負號的整數運算的結果(標誌S,O和Z).
        JE/JZ 等於轉移.
        JNE/JNZ 不等於時轉移.
        JC      有進位時轉移.
        JNC    無進位時轉移.
        JNO    不溢出時轉移.
        JNP/JPO 奇偶性為奇數時轉移.
        JNS    符號位為 "0" 時轉移.
        JO      溢出轉移.
        JP/JPE 奇偶性為偶數時轉移.
        JS      符號位為 "1" 時轉移.
    3>迴圈控制指令(短轉移)
        LOOP            CX不為零時迴圈.
        LOOPE/LOOPZ    CX不為零且標誌Z=1時迴圈.
        LOOPNE/LOOPNZ CX不為零且標誌Z=0時迴圈.
        JCXZ            CX為零時轉移.
        JECXZ          ECX為零時轉移.
    4>中斷指令
        INT    中斷指令
        INTO    溢出中斷
        IRET    中斷返回
    5>處理器控制指令
        HLT    處理器暫停, 直到出現中斷或複位訊號才繼續.
        WAIT    當晶片引線TEST為高電平時使CPU進入等待狀態.
        ESC    轉換到外處理器.
        LOCK    封鎖匯流排.
        NOP    空操作.
        STC    置進位標誌位.
        CLC    清進位標誌位.
        CMC    進位標誌取反.
        STD    置方向標誌位.
        CLD    清方向標誌位.
        STI    置中斷允許位.
        CLI    清中斷允許位.

六、偽指令
───────────────────────────────────────
        DW      定義字(2位元組).
        PROC    定義過程.
        ENDP    過程結束.
        SEGMENT 定義段.
        ASSUME 建立段寄存器定址.
        ENDS    段結束.
        END    程式結束.

七、標誌位
───────────────────────────────────────

CF:    進位標誌符號比         排在第0位
PF:      奇偶標誌                      排在第2位
AF:    輔助進位標誌             排在第4位
ZF:     零標誌                          排在第6位
SF:    符號標誌                     排在第7位
TF:     追蹤標誌                     排在第8位
IF:      中斷允許標誌             排在第9位
DF:    方向標誌                     排在第10位
OF:    溢出標誌                     排在第11位

‘==========附A

一.機械碼,又稱機器碼.
ultraedit開啟,編輯exe檔案時你會看到
許許多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F組成的數位,這些數位
就是機器碼.
修改程式時必須通過修改機器碼來修改exe檔案.

二.需要熟練掌握的全部彙編知識(只有這麼多)
不大容易理解,可先強行背住,混個臉兒熟,以後慢慢的就理解了
cmp a,b 比較a與b
mov a,b 把b的值送給a
ret 返回主程式
nop 無作用,英文“no operation”的簡寫,意思是“do nothing”(機器碼90)***機器碼的含義參看上面
(解釋:ultraedit開啟編輯exe檔案時你看到90,等同於彙編語句nop)
call 調用子程式
je 或jz 若相等則跳(機器碼74 或0F84)
jne或jnz 若不相等則跳(機器碼75或0F85)
jmp 無條件跳(機器碼EB)
jb 若小於則跳
ja 若大於則跳
jg 若大於則跳
jge 若大於等於則跳
jl 若小於則跳
jle 若小於等於則跳
pop 出棧
push 壓棧

三.常見修改(機器碼)
74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB

jnz->nop
75->90(相應的機器碼修改)

jnz -> jmp
75 -> EB(相應的機器碼修改)

jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情況下,有時,相應的機器碼修改)

四.兩種不同情況的不同修改方法
1.修改為jmp
je(jne,jz,jnz) =>jmp相應的機器碼EB (出錯資訊向上找到的第一個跳轉)jmp的作用是絕對跳,無條件跳,從而跳過下面的出錯資訊

xxxxxxxxxxxx 出錯資訊,例如:註冊碼不對,sorry,未註冊版不能…,”Function Not Avaible in Demo” 或 ”Command Not Avaible” 或 ”Can’t save in Shareware/Demo”等 (我們希望把它跳過,不讓它出現)
。。。
。。。
xxxxxxxxxxxx 正確路線所在

2.修改為nop
je(jne,jz,jnz) =>nop相應的機器碼90 (正確資訊向上找到的第一個跳轉) nop的作用是抹掉這個跳轉,使這個跳轉無效,失去作用,從而使程式順利來到緊跟其後的正確資訊處

xxxxxxxxxxxx 正確資訊,例如:註冊成功,謝謝您的支援等(我們希望它不被跳過,讓它出現,程式一定要順利來到這裡)
。。。
。。。
xxxxxxxxxxxx 出錯資訊(我們希望不要跳到這裡,不讓它出現)它們在存貯器和寄存器、寄存器和輸入輸出連接埠之間傳送資料.

八、32位指令
───────────────────────────────────────

1、位掃描指令(Bit Scan Instruction) 
指令的格式:BSF/BSR Reg, Reg/Mem     ;80386+ 
受影響的標誌位:ZF 
位掃描指令是在第二個運算元中找第一個“1”的位置。如果找到,則該“1”的位置儲存在第一運算元中,共置標誌位ZF為1,否則,置標誌位ZF為0。 
根據位掃描的方向不同,指令分二種:正向掃描指令和逆向掃描指令。 
、正向掃描指令BSF(Bit Scan Forward)從右向左掃描,即:從低位向高位掃描; 
、逆向掃描指令BSR(Bit Scan Reverse)從左向右掃描,即:從高位向低位掃描。

2、讀cpu的資訊只需要一條彙編指令 cupid ,入口參數在EAX寄存器,返回的資訊在EAX,EBX,ECX,EDX寄存器,也就是說執行cupid之前先給EAX寄存器賦值,在執行cupid,執行過之後,cpu的相關資訊就在EAX,EBX,ECX,EDX寄存器中了,入口參數EAX

值設的不同,取得的資訊也不同,我們可以寫這樣一個函數來獲得Cpu的相關資訊,當然也包括Id。

3、       BT dest,src ;把目的運算元dest中由源運算元src指定的位送CF標誌         BTC dest,src ;把dest中由src指定的位送CF標誌,然後對那一位求反         BTR dest,src ;把dest中由src指定的位送CF標誌,然後對那一位複位         BTS dest,src ;把dest中由src指定的位送CF標誌,然後對那一位置位

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.