• <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>
            隨筆-379  評論-37  文章-0  trackbacks-0

            一、數據傳送指令
            1.通用數據傳送指令
            MOV(Move)傳送
            PUSH(Push onto the stack)進棧
            POP(Pop from the stack)出棧
            XCHG(Exchange)交換
            .MOV指令
            格式為: MOV   DST,SRC
            執行的操作:(DST)<-(SRC)
            .PUSH進棧指令
            格式為:PUSH   SRC
            執行的操作:(SP)<-(SP)-2
                        ((SP)+1,(SP))<-(SRC)
            .POP出棧指令
            格式為:POP   DST
            執行的操作:(DST)<-((SP+1),(SP))
                        (SP)<-(SP)+2
            .XCHG 交換指令
            格式為:XCHG   OPR1,OPR2
            執行的操作:(OPR1)<-->(OPR2)

            2.累加器專用傳送指令
            IN(Input)   輸入
            OUT(Output)   輸出
            XLAT(Translate)   換碼
            這組指令只限于使用累加器AX或AL傳送信息.
            .IN 輸入指令
            長格式為:     IN   AL,PORT(字節)
                  IN   AX,PORT(字)
            執行的操作:   (AL)<-(PORT)(字節)
                          (AX)<-(PORT+1,PORT)(字)
            短格式為:     IN   AL,DX(字節)
                          IN   AX,DX(字)
            執行的操作:   AL<-((DX))(字節)
                          AX<-((DX)+1,DX)(字)
            .OUT 輸出指令
            長格式為:     OUT   PORT,AL(字節)
                          OUT    PORT,AX(字)
            執行的操作:   (PORT)<-(AL)(字節)
                          (PORT+1,PORT)<-(AX)(字)
            短格式為:     OUT   DX,AL(字節)
                          OUT   DX,AX(字)
            執行的操作:   ((DX))<-(AL)(字節)
                          ((DX)+1,(DX))<-AX(字)
                 在IBM-PC機里,外部設備最多可有65536個I/O端口,端口(即外設的端口地址)為0000~FFFFH.其中前256個端口(0~FFH)可以直接在指令中指定,這就是長格式中的PORT,此時機器指令用二個字節表示,第二個字節就是端口號.所以用長格式時可以在指定中直接指定端口號,但只限于前256個端口.當端口號>=256時,只能使用短格式,此時,必須先把端口號放到DX寄存器中(端口號可以從0000到0FFFFH),然后再用IN或OUT指令來 傳送信息.
            .XLAT   換碼指令
            格式為:     XLAT   OPR
            或:         XLAT
            執行的操作:(AL)<-((BX)+(AL))

            3.有效地址送寄存器指令
            LEA(Load effective address)有效地址送寄存器
            LDS(Load DS with Pointer)指針送寄存器和DS
            LES(Load ES with Pointer)指針送寄存器和ES
            .LEA 有效地址送寄存器
            格式為:   LEA    REG,SRC
            執行的操作:(REG)<-SRC
                 指令把源操作數的有效地址送到指定的寄存器中.
            .LDS 指針送寄存器和DS指令
            格式為:   LDS   REG,SRC
            執行的操作:(REG)<-(SRC)
                        (DS)<-(SRC+2)
                 把源操作數指定的4個相繼字節送到由指令指定的寄存器及DS寄存器中.該指令常指定SI寄存器.
            .LES 指針送寄存器和ES指令
            格式為:   LES   REG,SRC
            執行的操作: (REG)<-(SRC)
                         (ES)<-(SRC+2)
                 把源操作數指定的4個相繼字節送到由指令指定的寄存器及ES寄存器中.該指令常指定DI寄存器.

            4.標志寄存器傳送指令
            LAHF(Load AH with flags)標志送AH
            SAHF(store AH into flags)AH送標志寄存器
            PUSHF(push the flags) 標志進棧
            POPF(pop the flags) 標志出棧
            .LAHF 標志送AH
            格式為:     LAHF
            執行的操作:(AH)<-(PWS的低字節)
            .SAHF AH送標志寄存器
            格式為:     SAHF
            執行的操作:(PWS的低字節)<-(AH)
            .PUSHF 標志進棧
            格式為:     PUSHF
            執行的操作:(SP)<-(SP)-2
                        ((SP)+1,(SP))<-(PSW)
            .POPF 標志出棧
            格式為:     POPF
            執行的操作:(PWS)<-((SP)+1,(SP))
                        (SP)<-(SP+2)
            二、算術指令
            1.加法指令
            ADD(add)加法
            ADC(add with carry)帶進位加法
            INC(increment)加1
            .ADD   加法指令
            格式:     ADD    DST,SRC
            執行的操作:(DST)<-(SRC)+(DST)
            .ADC   帶進位加法指令
            格式:     ADC    DST,SRC
            執行的操作:(DST)<-(SRC)+(DST)+CF
            .ADD   加1指令
            格式:     INC    OPR
            執行的操作:(OPR)<-(OPR)+1

            2.減法指令
            SUB(subtract)減法
            SBB(subtract with borrow)帶借位減法
            DEC(Decrement)減1
            NEG(Negate)求補
            CMP(Compare)比較
            .SUB   減法指令
            格式:   SUB   DST,SRC
            執行的操作:(DST)<-(DST)-(SRC)
            .SBB   帶借位減法指令
            格式:   SBB   DST,SRC
            執行的操作:(DST)<-(DST)-(SRC)-CF
            .DEC   減1指令
            格式:   DEC   OPR
            執行的操作:(OPR)<-(OPR)-1
            .NEG   求補指令
            格式:   NEG   OPR
            執行的操作:(OPR)<- -(OPR)
            .CMP   比較指令
            格式:   CMP   OPR1,OPR2
            執行的操作:(OPR1)-(OPR2)
                 該指令與SUB指令一樣執行減法操作,但不保存結果,只是根據結果設置條件標志西半球.

            3.乘法指令
            MUL(Unsigned Multiple)無符號數乘法
            IMUL(Signed Multiple)帶符號數乘法
            .MUL 無符號數乘法指令
            格式:    MUL   SRC
            執行的操作:
                 字節操作數:(AX)<-(AL)*(SRC)
                 字操作數:(DX,AX)<-(AX)*(SRC)
            .IMUL 帶符號數乘法指令
            格式:    IMUL   SRC
            執行的操作:與MUL相同,但必須是帶符號數,而MUL是無符號數.

            4.除法指令
            DIV(Unsigned divide)無符號數除法
            IDIV(Signed divide)帶符號數除法

            CBW(Convert byte to word)字節轉換為字
            CWD(Contert word to double word)字轉換為雙字
            .DIV   無符號數除法指令
            格式:    DIV   SRC
            執行的操作:
              字節操作:(AL)<-(AX)/(SRC)的商
                        (AH)<-(AX)/(SRC)的余數
               字操作:   (AX)<-(DX,AX)/(SRC)的商
                        (AX)<-(DX,AX)/(SRC)的余數
            .IDIV   帶符號數除法指令
            格式:    DIV   SRC
            執行的操作:與DIV相同,但操作數必須是帶符號數,商和余數也均為帶符號數,且余數的符號與被除數的符號相同.
            .CBW 字節轉換為字指令
            格式:    CBW
            執行的操作:AL的內容符號擴展到AH.即如果(AL)的最高有效位為0,則(AH)=00;如(AL)的最高有效位為1,則(AH)=0FFH
            .CWD 字轉換為雙字指令
            格式:   CWD
            執行的操作:AX的內容符號擴展到DX.即如(AX)的最高有效位為0,則(DX)=0;否則(DX)=0FFFFH.
                 這兩條指令都不影響條件碼.

            三、邏輯指令
            1.邏輯運算指令
            AND(and)           邏輯與
            OR(or)            邏輯或
            NOT(not)          邏輯非
            XOR(exclusive or)異或
            TEST(test)        測試
            .AND   邏輯與指令
            格式:     AND    DST,SRC
            執行的操作:(DST)<-(DST)^(SRC)
            .OR   邏輯或指令
            格式:     OR    DST,SRC
            執行的操作:(DST)<-(DST)V(SRC)
            .NOT   邏輯非指令
            格式:     NOT    OPR
            執行的操作:(OPR)<-(OPR)
            .XOR   異或指令
            格式:     XOR    DST,SRC
            執行的操作:(DST)<-(DST)V(SRC)
            .TEST   測試指令
            格式:     TEST    OPR1,OPR2
            執行的操作:(DST)^(SRC)
            兩個操作數相與的結果不保存,只根據其特征置條件碼

            2.移位指令
            SHL(shift logical left)           邏輯左移
            SAL(shift arithmetic left)       算術左移
            SHR(shift logical right)         邏輯右移
            SAR(shift arithmetic right)      算術右移
            ROL(Rotate left)                  循環左移
            ROR(Rotate right)                 循環右移
            RCL(Rotate left through carry)   帶進位循環左移
            RCR(Rotate right through carry) 帶進位循環右移
            格式:     SHL   OPR,CNT(其余的類似)
            其中OPR可以是除立即數以外的任何尋址方式.移位次數由CNT決定,CNT可以是1或CL.
                 循環移位指令可以改變操作數中所有位的位置;移位指令則常常用來做乘以2除以2操作.其中算術移位指令適用于帶符號數運算,SAL用來乘2,SAR用來除以2;而邏輯移位指令則用來無符號數運算,SHL用來乘2,SHR用來除以2.


            四、串處理指令
            1.與REP相配合工作的MOVS,STOS和LODS指令
            .REP重復串操作直到(CX)=0為上
            格式:   REP    string primitive
            其中String Primitive可為MOVS,LODS或STOS指令
            執行的操作:
            1)如(CX)=0則退出REP,否則往下執行.
            2)(CX)<-(CX)-1
            3)執行其中的串操作
            4)重復1)~3)
            .MOVS   串傳送指令
            格式:可有三種
                 MOVS   DST,SRC
                 MOVSB(字節)
                 MOVSW(字)
            其中第二、三種格式明確地注明是傳送字節或字,第一種格式則應在操作數中表明是字還是字節操作,例如:
                         MOVS     ES:BYTE PTR[DI],DS:[SI]
            執行的操作:
            1)((DI))<-((SI))
            2)字節操作:
                (SI)<-(SI)+(或-)1,(DI)<-(DI)+(或-)1
                當方向標志DF=0時用+,當方向標志DF=1時用-
            3)字操作:
                (SI)<-(SI)+(或-)2,(DI)<-(DI)+(或-)2
                當方向標志DF=0時用+,當方向標志DF=1時用-
            該指令不影響條件碼.
            .CLD(Clear direction flag)該指令使DF=0,在執行串操作指令時可使地址自動增量;
            .STD(Set direction flag)該指令使DF=1,在執行串操作指令時可使地址自動減量.
            .STOS   存入串指令
            格式:    STOS   DST
                     STOSB(字節)
                     STOSW(字)
            執行的操作:
                字節操作:((DI))<-(AL),(DI)<-(DI)+-1
                字操作:   ((DI))<-(AX),(DI)<-(DI)+-2
            該指令把AL或AX的內容存入由(DI)指定的附加段的某單元中,并根據DF的值及數據類型修改DI的內容,當它與REP聯用時,可把AL或AX的內容存入一個長度為(CX)的緩沖區中.
            .LODS   從串取指令
            格式:     LODS   SRC
                      LODSB
                      LODSW
            執行的操作:
                字節操作:(AL)<-((SI)),(SI)<-(SI)+-1
                 字操作: (AX)<-((SI)),(SI)<-(SI)+-2
            該指令把由(SI)指定的數據段中某單元的內容送到AL或AX中,并根據方向標志及數據類型修改SI的內容.指令允許使用段跨越前綴來指定非數據段的存儲區.該指令也不影響條件碼.
                 一般說來,該指令不和REP聯用.有時緩沖區中的一串字符需要逐次取出來測試時,可使用本指令.
              
            2.與REPE/REPZ和REPNZ/REPNE聯合工作的CMPS和SCAS指令
            .REPE/REPZ   當相等/為零時重復串操作
            格式:      REPE(或REPZ)     String Primitive
            其中String Primitive可為CMPS或SCAS指令.
            執行的操作:
            1)如(CX)=0或ZF=0(即某次比較的結果兩個操作數不等)時退出,否則往下執行
            2)(CX)<-(CX)-1
            3)執行其后的串指令
            4)重復1)~3)
            .REPNE/REPNZ   當不相等/不為零時重復串操作
            格式:      REPNE(或REPNZ)    String Primitive
            其中String Primitive可為CMPS或SCAS指令
            執行的操作:
                 除退出條件(CX=0)或ZF=1外,其他操作與REPE完全相同.
            .CMPS   串比較指令
            格式:      CMP    SRC,DST
                       CMPSB
                       CMPSW
            執行的操作:
            1)((SI))-((DI))
            2)字節操作:(SI)<-(SI)+-1,(DI)<-(DI)+-1
               字操作:   (SI)<-(SI)+-2,(DI)<-(DI)+-2
            指令把由(SI)指向的數據段中的一個字(或字節)與由(DI)指向的附加段中的一個字(或字節)相減,但不保存結果,只根據結果設置條件碼,指令的其它特性和MOVS指令的規定相同.
            .SCAS   串掃描指令
            格式:    SCAS    DST
                     SCASB
                     SCASW
            執行的操作:
                 字節操作:(AL)-((DI)),(DI)<-(DI)+-1
                 字操作:   (AL)-((DI)),(DI)<-(DI)+-2
            該指令把AL(或AX)的內容與由(DI)指定的在附加段中的一個字節(或字)進行比較,并不保存結果,只根據結果置條件碼.指令的其他特性和MOVS的規定相同.

            五、控制轉移指令
              1.無條件轉移指令
            .JMP(jmp)   跳轉指令
            1)段內直接短轉移
            格式:JMP   SHORT OPR
            執行的操作:(IP)<-(IP)+8位位移量
            2)段內直接近轉移
            格式:JMP   NEAR PTR OPR
            執行的操作:(IP)<-(IP)+16位位移量
            3)段內間接轉移
            格式:JMP   WORD PTR OPR
            執行的操作:(IP)<-(EA)
            4)段間直接(遠)轉移
            格式:JMP   FAR PTR OPR
            執行的操作:(IP)<-OPR的段內偏移地址
                        (CS)<-OPR所在段的段地址
            5)段間間接轉移
            格式:JMP   DWORD PTR OPR
            執行的操作:(IP)<-(EA)
                        (CS)<-(EA+2)
            2.條件轉移指令
            1)根據單個條件標志的設置情況轉移
            .JZ(或JE)(Jump if zero,or equal)   結果為零(或相等)則轉移
            格式:JE(或JZ)   OPR
            測試條件:ZF=1
            .JNZ(或JNE)(Jump if not zero,or not equal) 結果不為零(或不相等)則轉移
            格式:JNZ(或JNE)   OPR
            測試條件:ZF=0
            .JS(Jump if sign)   結果為負則轉移
            格式:   JS   OPR
            測試條件:SF=1
            .JNS(Jump if not sign)   結果為正則轉移
            格式:JNS   OPR
            測試條件:SF=0
            .JO(Jump if overflow)   溢出則轉移
            格式:    JO   OPR
            測試條件:OF=1
            .JNO(Jump if not overflow)   不溢出則轉移
            格式:    JNO OPR
            測試條件:OF=0
            .JP(或JPE)(Jump if parity,or parity even) 奇偶位為1則轉移
            格式:    JP   OPR
            測試條件:PF=1
            .JNP(或JPO)(Jump if not parity,or parity odd) 奇偶位為0則轉移
            格式:    JNP(或JPO)   OPR
            測試條件:PF=0
            .JB(或JNAE,JC)(Jump if below,or not above or equal,or carry) 低于,或者不高于或等于,或進位位為1則轉移
            格式:JB(或JNAE,JC)   OPR
            測試條件:CF=1
            .JNB(或JAE,JNC)(Jump if not below,or above or equal,or not carry) 不低于,或者高于或者等于,或進位位為0則轉移
            格式:JNB(或JAE,JNC)   OPR
            測試條件:CF=0
            2)比較兩個無符號數,并根據比較的結果轉移
            .JB(或JNAE,JC)
            格式:同上
            .JNB(或JAE,JNC)
            格式:同上
            .JBE(或JNA)(Jump if below or equal,or not above) 低于或等于,或不高于則轉移
            格式:JBE(或JNA)   OPR
            測試條件:CFVZF=1
            .JNBE(或JA)(Jump if not below or equal,or above) 不低于或等于,或者高于則轉移
            格式:JNBE(或JA)   OPR
            測試條件:CFVZF=0
            3)比較兩個帶符號數,并根據比較的結果轉移
            .JL(或LNGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于則轉移
            格式:JL(或JNGE)   OPR
            測試條件:SFVOF=1
            .JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于則轉移
            格式:JNL(或JGE)   OPR
            測試條件:SFVOF=0
            .JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于則轉移
            格式:JLE(或JNG)   OPR
            測試條件:(SFVOF)VZF=1
            .JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于則轉移
            格式:JNLE(或JG)   OPR
            測試條件:(SFVOF)VZF=0
            4)測試CX的值為0則轉移指令
            .JCXZ(Jump if CX register is zero)   CX寄存器的內容為零則轉移
            格式:JCXZ   OPR
            測試條件:(CX)=0
            注:條件轉移全為8位短跳!

            3.循環指令
            .LOOP 循環指令
            格式: LOOP   OPR
            測試條件:(CX)<>0
            .LOOPZ/LOOPE 當為零或相等時循環指令
            格式: LOOPZ(或LOOPE)   OPR
            測試條件:(CX)<>0且ZF=1
            .LOOPNZ/LOOPNE 當不為零或不相等時循環指令
            格式: LOOPNZ(或LOOPNE)   OPR
            測試條件:(CX)<>0且ZF=0
            這三條指令的步驟是:
            1)(CX)<-(CX)-1
            2)檢查是否滿足測試條件,如滿足則(IP)<-(IP)+D8的符號擴充.

            4.子程序
            .CALL調用指令
            .RET返回指令
            5.中斷
            .INT指令
            格式:     INT   TYPE
            或        INT
            執行的操作:(SP)<-(SP)-2
                        ((SP)+1,(SP))<-(PSW)
                        (SP)<-(SP)-2
                        ((SP)+1,(SP))<-(CS)
                        (SP)<-(SP)-2
                        ((SP)+1,(SP))<-(IP)
                        (IP)<-(TYPE*4)
                        (CS)<-(TYPE*4+2)
            .INTO   若溢出則中斷
            執行的操作:若OF=1則:
                        (SP)<-(SP)-2
                        ((SP)+1,(SP))<-(PSW)
                        (SP)<-(SP)-2
                        ((SP)+1,(SP))<-(CS)
                        (SP)<-(SP)-2
                        ((SP)+1,(SP))<-(IP)
                        (IP)<-(10H)
                        (CS)<-(12H)
            .IRET     從中斷返回指令
            格式:      IRET
            執行的操作:(IP)<-((SP)+1,(SP))
                        (SP)<-(SP)+2
                        (CS)<-((SP)+1,(SP))
                        (SP)<-(SP)+2
                        (PSW)<-((SP)+1,(SP))
                        (SP)<-(SP)+2

            六、處理機控制指令
            1.標志處理指令
            .CLC進位位置0指令(Clear carry)CF<-0
            .CMC進位位求反指令(Complement carry)CF<-CF
            .STC進位位置1指令(Set carry)CF<-1
            .CLD方向標志置0指令(Clear direction)DF<-0
            .STD方向標志置1指令(Set direction)DF<-1
            .CLI中斷標志置0指令(Clear interrupt)IF<-0
            .STI中斷標志置1指令(Set interrupt)IF<-0
            2.其他處理機控制指令
            NOP(No Opreation)    無操作
            HLT(Halt)            停機
            WAIT(Wait)           等待
            ESC(Escape)          換碼
            LOCK(Lock)           封鎖
            這些指令可以控制處理機狀態.這們都不影響條件碼.
            .NOP 無操作指令
                 該指令不執行任何操作,其機器碼占有一個字節,在調試程序時往往用這條指令占有一定的存儲單元,以便在正式運行時用其他指令取代.
            .HLT停機指令
                 該指令可使機器暫停工作,使處理機處于停機狀態以便等待一次外部中斷到來,中斷結束后可繼續執行下面的程序.
            .WAIT等待指令
                 該指令使處理機處于空轉狀態,它也可以用來等待外部中斷的發生,但中斷結束后仍返回WAIT指令繼續德行.
            .ESC換碼指令
                格式ESC   mem
            其中mem指出一個存儲單元,ESC指令把該存儲單元的內容送到數據總線去.當然ESC指令不允許使用立即數和寄存器尋址方式.這條指令在使用協處理機(Coprocessor)執行某些操作時,可從存儲器指得指令或操作數.協處理機(如8087)則是為了提高速度而可以選配的硬件.
            .LOCK封鎖指令
                 該指令是一種前綴,它可與其他指令聯合,用來維持總線的鎖存信號直到與其聯合的指令執行完為止.當CPU與其他處理機協同工作時,該指令可避免破壞有用信息.

             

             

             

             

             

             

             

             

             

             

             

             

             

             

             

            匯編指令大全

            一、數據傳輸指令
            ───────────────────────────────────────
            它們在存貯器和寄存器、寄存器和輸入輸出端口之間傳送數據. 匯編指令大全
            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 程序結束

             

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/lqk1985/archive/2008/09/11/2911250.aspx

            posted on 2010-09-03 01:01 小王 閱讀(608) 評論(0)  編輯 收藏 引用 所屬分類: 匯編
            久久只这里是精品66| 亚洲人成无码www久久久| 亚洲AV无码久久精品蜜桃| 久久免费观看视频| 一级女性全黄久久生活片免费| 久久伊人色| 久久精品国产亚洲av水果派 | 99久久精品毛片免费播放| 99久久成人国产精品免费| 亚洲精品成人久久久| 午夜天堂精品久久久久| 人人狠狠综合久久亚洲88| 久久人与动人物a级毛片| 国产精品一区二区久久| 色偷偷91久久综合噜噜噜噜| 天堂久久天堂AV色综合| 久久精品中文字幕一区| 久久久久亚洲AV片无码下载蜜桃| 欧美精品一区二区精品久久| 久久人人爽人人爽人人片AV高清| 精品综合久久久久久97超人| 久久中文字幕人妻丝袜| 国产精品免费看久久久香蕉| 亚洲AV日韩精品久久久久久久| 久久久久亚洲?V成人无码| 色偷偷偷久久伊人大杳蕉| 亚洲欧洲久久久精品| 久久99精品久久久久久水蜜桃 | 日本福利片国产午夜久久| 亚洲精品高清国产一线久久 | 欧美国产成人久久精品| 久久精品国产亚洲一区二区三区 | 久久久精品久久久久特色影视| 亚洲国产精品无码久久久秋霞2| 久久伊人精品青青草原日本| 办公室久久精品| www.久久精品| 久久精品国产99国产电影网| 久久精品夜夜夜夜夜久久| 久久亚洲精精品中文字幕| 久久99精品久久久大学生|