马上加入TC
您需要 登录 才可以下载或查看,没有帐号?立即注册  
 
x
 
一、数据传输指令  
───────────────────────────────────────  
    它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.  
    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<OP2 )  
        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    程序结束.   
 
 
 
 
 
 
 
 
 
 
8088 汇编跳转  
日期:2003年6月12日  出处:嬴政天下整理收藏  作者:看雪  人气: 8735  
-------------------------------------------------------------------------------- 
  
8088 汇编跳转 
一、状态寄存器 
PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示: 
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
        OF DF IF TF SF ZF   AF   PF   CF  
 
条件码: 
①OF(Overflow Flag)溢出标志。溢出时为1,否则置0。 
②SF(Sign Flag)符号标志。结果为负时置1,否则置0. 
③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0. 
④CF(Carry Flag)进位标志,进位时置1,否则置0. 
⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0. 
⑥PF(Parity Flag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0. 
控制标志位: 
⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。 
⑧IF(Interrupt Flag)中断标志。 
⑨TF(Trap Flag)陷井标志。 
二、 直接标志转移(8位寻址) 
指令格式 机器码 测试条件 如...则转移   
  指令格式 机器码 测试条件 如...则转移  
JC  72 C=1 有进位 JNS 79 S=0 正号  
JNC  73 C=0 无进位 JO 70 O=1 有溢出  
JZ/JE  74 Z=1 零/等于 JNO 71 O=0 无溢出  
JNZ/JNE  75 Z=0 不为零/不等于 JP/JPE 7A P=1 奇偶位为偶  
JS 78 S=1 负号 JNP/IPO 7B P=0 奇偶位为奇  
三、间接标志转移(8位寻址) 
指令格式 机器码 测试格式 如...则转移  
JA/JNBE(比较无符号数) 77 C或Z=0 >  高于/不低于或等于  
JAE/JNB(比较无符号数) 73 C=0 >=  高于或等于/不低于  
JB/JNAE(比较无符号数) 72 C=1 <  低于/不高于或等于  
JBE/JNA(比较无符号数) 76 C或Z=1 <=  低于或等于/不高于  
JG/JNLE(比较带符号数) 7F (S异或O)或Z=0 >  大于/不小于或等于  
JGE/JNL(比较带符号数) 7D S异或O=0 >=  大于或等于/不小于  
JL/JNGE(比较带符号数) 7C S异或O=1 <  小于/不大于或等于  
JLE/JNG(比较带符号数) 7E (S异或O)或Z=1 <=  小于或等于/不大于  
四、无条件转移指令(fisheep译 fisheep@sohu.com) 
操作码  伪码指令 含义  
EB  cb JMP rel8 相对短跳转(8位),使rel8处的代码位下一条指令  
E9  cw JMP rel16  相对跳转(16位),使rel16处的代码位下一条指令  
FF  /4 JMP r/m16 绝对跳转(16位),下一指令地址在r/m16中给出  
FF  /4 JMP r/m32 绝对跳转(32位),下一指令地址在r/m32中给出  
EA  cb JMP ptr16:16 远距离绝对跳转, 下一指令地址在操作数中  
EA  cb JMP ptr16:32  远距离绝对跳转, 下一指令地址在操作数中  
FF  /5 JMP m16:16 远距离绝对跳转, 下一指令地址在内存m16:16中  
FF  /5 JMP m16:32  远距离绝对跳转, 下一指令地址在内存m16:32中  
五、16位/32位寻址方式(fisheep译 fisheep@sohu.com)  
 
操作码 伪码指令 跳转含义  跳转类型 跳转的条件(标志位)  
0F 87  cw/cd JA rel16/32 大于 near (CF=0 and ZF=0)  
0F 83  cw/cd JAE rel16/32 大于等于 near (CF=0)  
0F 82  cw/cd JB rel16/32 小于 near (CF=1)  
0F 86  cw/cd JBE rel16/32 小于等于 near (CF=1 or ZF=1)  
0F 82  cw/cd JC rel16/32 进位 near (CF=1)  
0F 84  cw/cd JE rel16/32 等于 near (ZF=1)  
0F 84  cw/cd JZ rel16/32 为0 near (ZF=1)  
0F 8F  cw/cd JG rel16/32 大于 near (ZF=0 and SF=OF)  
0F 8D  cw/cd JGE rel16/32  大于等于 near (SF=OF)  
0F 8C  cw/cd JL rel16/32 小于  near (SF<>OF)  
0F 8E  cw/cd JLE rel16/32 小于等于 near (ZF=1 or SF<>OF)  
0F 86  cw/cd JNA rel16/32  不大于 near (CF=1 or ZF=1)  
0F 82  cw/cd JNAE rel16/32 不大于等于 near (CF=1)  
0F 83  cw/cd JNB rel16/32 不小于 near (CF=0)  
0F 87  cw/cd JNBE rel16/32 不小于等于 near (CF=0 and ZF=0)  
0F 83  cw/cd JNC rel16/32  不进位 near (CF=0)  
0F 85  cw/cd JNE rel16/32 不等于 near (ZF=0)  
0F 8E  cw/cd JNG rel16/32 不大于 near (ZF=1 or SF<>OF)  
0F 8C  cw/cd JNGE rel16/32  不大于等于 near (SF<>OF)  
0F 8D  cw/cd JNL rel16/32 不小于 near (SF=OF)  
0F 8F  cw/cd JNLE rel16/32  不小于等于 near (ZF=0 and SF=OF)  
0F 81  cw/cd JNO rel16/32 未溢出 near (OF=0)  
0F 8B  cw/cd JNP rel16/32  不是偶数 near (PF=0)  
0F 89  cw/cd JNS rel16/32  非负数 near (SF=0)  
0F 85  cw/cd JNZ rel16/32 非零(不等于) near (ZF=0)  
0F 80  cw/cd JO rel16/32  溢出 near (OF=1)  
0F 8A  cw/cd JP rel16/32  偶数 near (PF=1)  
0F 8A  cw/cd JPE rel16/32 偶数 near (PF=1)  
0F 8B  cw/cd JPO rel16/32  奇数 near (PF=0)  
0F 88  cw/cd JS rel16/32 负数 near (SF=1)  
0F 84  cw/cd JZ rel16/32  为零(等于) near (ZF=1)   
注:一些指令操作数的含义说明:  
  rel8      表示 8 位相对地址  
  rel16    表示 16 位相对地址  
  rel16/32  表示 16或32 位相对地址  
  r/m16    表示16位寄存器  
  
  
 
 |