天天看點

8088 彙編速查手冊

一、資料傳輸指令

───────────────────────────────────────

    它們在存貯器和寄存器、寄存器和輸入輸出端口之間傳送資料.

    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    程式結束.