找回密码
 立即注册

QQ登录

只需一步,快速开始

1401软件论坛总版规【新人必看】如何正确发布收费帖子加入vip系统学习仅需498元免费获得1401软件安全论坛vip开通本站VIP会员请联系QQ 564853771
论坛纪念优盘Beyond EXE超强加密器V1.61401论坛破解工具包 2017-9-12[破解班vip]入门篇[破解班vip]基础篇
[破解班vip]脱壳篇[破解班vip]实战篇[破解班vip]网络验证篇[破解班vip]零基础HOOK教程[破解班vip]零基础易语言入门
[破解班vip]零基础c语言入门[破解班vip]零基础Delphi编程入门[破解班vip]寒假培训课程共7课[破解班vip]破解提高篇[破解班vip]易语言培训课程
[破解班vip]核心技术培训篇[破解班vip]pe格式与pe操作[破解班vip]2022全新封包-山寨-爆破全系列[原创课程]c++单文档框架课程[逆向班vip]汇编语句与反汇编基础
[逆向班vip]全自动扫雷辅助[逆向班vip]手机模拟按键[逆向班vip]植物大战僵尸辅助广告位招租...付费破解软件 +Q 564853771
查看: 3718|回复: 1

【8086汇编指令速查手册】

[复制链接]
  • TA的每日心情
    开心
    2016-12-31 19:24
  • 签到天数: 148 天

    [LV.7]常住居民III

    335

    主题

    380

    回帖

    1693

    积分

    版主

    【KingSolomon】

    UID
    972
    元宝
    340
    威望
    458
    贡献
    19
    信誉值
    0
    精华
    17
    在线时间
    179 小时
    注册时间
    2014-5-16
    最后登录
    2017-1-4
    违规
    0
    积分
    1693

    最佳新人活跃会员热心会员灌水之王论坛元老吾爱富翁工具大师已有小成

    QQ
    发表于 2014-5-25 20:45:38 | 显示全部楼层 |阅读模式
    Ȧ

    【第一部分】


    一、数据传输指令

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

        它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.

        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  ;把段地址:偏移地址存到ESI.

            LFS    传送目标指针,把指针内容装入FS.

              例: LFS DI,string  ;把段地址:偏移地址存到FSI.

            LGS    传送目标指针,把指针内容装入GS.

              例: LGS DI,string  ;把段地址:偏移地址存到GSI.

            LSS    传送目标指针,把指针内容装入SS.

              例: LSS DI,string  ;把段地址:偏移地址存到SSI.

        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  源串段寄存器  :源串变址.

                ESI  目标串段寄存器:目标串变址.

                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    程序结束.


    【第二部分】



    一、常用指令
    二、算术运算指令
    三、逻辑运算指令
    四、串指令
    五、程序跳转指令
    ------------------------------------------
    计算机寄存器分类简介:
    32位CPU所含有的寄存器有:
    4个数据寄存器(EAX、EBX、ECX和EDX)
    2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
    6个段寄存器(ES、CS、SS、DS、FS和GS)
    1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)
    1、数据寄存器
    数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
    32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
    对低16位数据的存取,不会影响高16位的数据。
    这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
    4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
    程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
    寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高;
    寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用;  
    寄存器ECX称为计数寄存器(Count Register)。
    在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;
    寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
    在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,
    在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,
    而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
    2、变址寄存器
    32位CPU有2个32位通用寄存器ESI和EDI。
    其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
    寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,
    用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
    变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
    它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。
    3、指针寄存器
    其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。
    32位CPU有2个32位通用寄存器EBP和ESP。
    它们主要用于访问堆栈内的存储单元,并且规定:
    EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;
    ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。
    寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,
    用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
    指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
    4、段寄存器
    段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
    的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
    CPU内部的段寄存器:
    ECS——代码段寄存器(Code Segment Register),其值为代码段的段值;
    EDS——数据段寄存器(Data Segment Register),其值为数据段的段值;
    EES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
    ESS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
    EFS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
    EGS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
    在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位
    微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。
    32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简
    单描述如下:
    实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑
    地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。
    保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。。
    5、指令指针寄存器
    32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。
    指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。
    在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。
    所以,在理解它们的功能时,不考虑存在指令队列的情况。
    6、标志寄存器
    一、运算结果标志位
    1、进位标志CF(Carry Flag)
    进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
    使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
    2、奇偶标志PF(Parity Flag)
    奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
    利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位

    3、辅助进位标志AF(Auxiliary Carry Flag)
    在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
    (1)、在字操作时,发生低字节向高字节进位或借位时;
    (2)、在字节操作时,发生低4位向高4位进位或借位时。
    对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。
    4、零标志ZF(Zero Flag)
    零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
    5、符号标志SF(Sign Flag)
    符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用码表示法,所以,SF也就反映运算结果的
    正负号。运算结果为正数时,SF的值为0,否则其值为1。
    6、溢出标志OF(Overflow Flag)
    溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否
    则,OF的值被清为0。
    “溢出”和“进位”是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。
    二、状态控制标志位
    状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。
    1、追踪标志TF(Trap Flag)
    当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。
    指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。
    2、中断允许标志IF(Interrupt-enable Flag)
    中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。
    但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。
    具体规定如下:
    (1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
    (2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
    CPU的指令系统中也有专门的指令来改变标志位IF的值。
    3、方向标志DF(Direction Flag)
    方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。具体规定在第5.2.11节——字符串操作指令——中给出。
    在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。
    三、32位标志寄存器增加的标志位
    1、I/O特权标志IOPL(I/O Privilege Level)
    I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。
    如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。
    2、嵌套任务标志NT(Nested Task)
    嵌套任务标志NT用来控制中断返回指令IRET的执行。具体规定如下:
    (1)、当NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;
    (2)、当NT=1,通过任务转换实现中断返回。
    3、重启动标志RF(Restart Flag)
    重启动标志RF用来控制是否接受调试故障。规定:RF=0时,表示“接受”调试故障,否则拒绝之。
    在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。
    4、虚拟8086方式标志VM(Virtual 8086 Mode)
    如果该标志的值为1,则表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

    计算机寄存器常用指令
    一、常用指令  
    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 ;把段地址:偏移地址存到ESDI.  
    LFS 传送目标指针,把指针内容装入FS.  
        例: LFS DI,string ;把段地址:偏移地址存到FSD.  
    LGS 传送目标指针,把指针内容装入GS.  
        例: LGS DI,string ;把段地址:偏移地址存到GSDI.  
    LSS 传送目标指针,把指针内容装入SS.  
        例: LSS DI,string ;把段地址:偏移地址存到SSDI.  
    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 I 目标串段寄存器:目标串变址.  
    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/ECX0时重复.  
    REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX0时重复.  
    REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX0时重复.  
    REPC 当CF=1且CX/ECX0时重复.  
    REPNC 当CF=0且CX/ECX0时重复.   
    五、程序转移指令   
    1.简单的条件转移指令
    JZ(或jE) OPR---------------结果为零转移,   测试条件ZF=1
    JNZ(或jNE)   OPR --------------结果不为零转移,测试条件ZF=0
    JS OPR----------------------结果为负转移,   测试条件SF=1
    JNS OPR---------------------结果为正转移,   测试条件SF=0
    JO OPR--------------------- 溢出转移,    测试条件OF=
    JNO OPR --------------------不溢出转移 , 测试条件SF=0
    JP OPR ---------------------结果为偶转移,   测试条件SF=1
    JNP OPR --------------------结果为奇转移 , 测试条件SF=0
    JC OPR -------------------- 有进位转移 , 测试条件SF=1
    JNC OPR --------------------无进位转移, 测试条件SF=0
    2.无符号比较条件转移指令(以下指令经常是CMP OPD,OPS后面的指令根据比较结果来实现转移)
    JB(或JNAE) opd --------------小于或者不大于等于则转移
    JNB(或JAE) opd---------------不小于或者大于等于则转移
    JA(或NJBE) OPD---------------大于或者不小于等于则转移
    JNA(或JBE) OPD---------------不大于或者小于等于则转移
    3.带符号比较条件转移指令
    JL(或JNGE) --------------小于或者不大于等于则转移
    JNL(或JGE)--------------不小于或者大于等于则转移
    JG(或NJLE)---------------大于或者不小于等于则转移
    JNG(或JLE)---------------不大于或者小于等于则转移
    六、调用子程序与返回指令
    CALL     子程序调用指令
    RET 子程序返回指令
    六、其它指令
    OFFSET -------------------- 返回偏移地址
    SEG     -------------------- 返回段地址
    EQU(=)   --------------------   等值语句
    PURGE   --------------------   解除语句
    DUP --------------------   操作数字段用复制操作符
    SEGMENT,ENDS   --------------------   段定义指令
    ASSUME -------------------- 段地址分配指令
    ORG --------------------   起始偏移地址设置指令
    $    --------------------地址计数器的当前值
    PROC,ENDP   --------------------   过程定义语句
    NAME,TITLE,END   --------------------   程序开始结束语句
    MACRO, OllyICE反汇编教程及汇编命令详解

    内容目录
    计算机寄存器分类简介
    计算机寄存器常用指令
    一、常用指令
    二、算术运算指令
    三、逻辑运算指令
    四、串指令
    五、程序跳转指令
    ------------------------------------------
    计算机寄存器分类简介:
    32位CPU所含有的寄存器有:
    4个数据寄存器(EAX、EBX、ECX和EDX)
    2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
    6个段寄存器(ES、CS、SS、DS、FS和GS)
    1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)
    1、数据寄存器
    数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。
    32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。
    对低16位数据的存取,不会影响高16位的数据。
    这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。
    4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。
    程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。
    寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。可用于乘、 除、输入/输出等操作,使用频率很高;
    寄存器EBX称为基地址寄存器(Base Register)。它可作为存储器指针来使用;  
    寄存器ECX称为计数寄存器(Count Register)。
    在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;
    寄存器EDX称为数据寄存器(Data Register)。在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。
    在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,
    在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,
    而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。
    2、变址寄存器
    32位CPU有2个32位通用寄存器ESI和EDI。
    其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。
    寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,
    用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
    变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
    它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。
    3、指针寄存器
    其低16位对应先前CPU中的BP和SP,对低16位数据的存取,不影响高16位的数据。
    32位CPU有2个32位通用寄存器EBP和ESP。
    它们主要用于访问堆栈内的存储单元,并且规定:
    EBP为基指针(Base Pointer)寄存器,用它可直接存取堆栈中的数据;
    ESP为堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶。
    寄存器EBP、ESP、BP和SP称为指针寄存器(Pointer Register),主要用于存放堆栈内存储单元的偏移量,
    用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。
    指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
    4、段寄存器
    段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成
    的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
    CPU内部的段寄存器:
    ECS——代码段寄存器(Code Segment Register),其值为代码段的段值;
    EDS——数据段寄存器(Data Segment Register),其值为数据段的段值;
    EES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
    ESS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
    EFS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
    EGS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
    在16位CPU系统中,它只有4个段寄存器,所以,程序在任何时刻至多有4个正在使用的段可直接访问;在32位
    微机系统中,它有6个段寄存器,所以,在此环境下开发的程序最多可同时访问6个段。
    32位CPU有两个不同的工作方式:实方式和保护方式。在每种方式下,段寄存器的作用是不同的。有关规定简
    单描述如下:
    实方式: 前4个段寄存器CS、DS、ES和SS与先前CPU中的所对应的段寄存器的含义完全一致,内存单元的逻辑
    地址仍为“段值:偏移量”的形式。为访问某内存段内的数据,必须使用该段寄存器和存储单元的偏移量。
    保护方式: 在此方式下,情况要复杂得多,装入段寄存器的不再是段值,而是称为“选择子”(Selector)的某个值。。
    5、指令指针寄存器
    32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。
    指令指针EIP、IP(Instruction Pointer)是存放下次将要执行的指令在代码段的偏移量。
    在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。
    所以,在理解它们的功能时,不考虑存在指令队列的情况。
    6、标志寄存器
    一、运算结果标志位
    1、进位标志CF(Carry Flag)
    进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。
    使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。
    2、奇偶标志PF(Parity Flag)
    奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。
    利用PF可进行奇偶校验检查,或产生奇偶校验位。在数据传送过程中,为了提供传送的可靠性,如果采用奇偶校验的方法,就可使用该标志位

    3、辅助进位标志AF(Auxiliary Carry Flag)
    在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
    (1)、在字操作时,发生低字节向高字节进位或借位时;
    (2)、在字节操作时,发生低4位向高4位进位或借位时。
    对以上6个运算结果标志位,在一般编程情况下,标志位CF、ZF、SF和OF的使用频率较高,而标志位PF和AF的使用频率较低。
    4、零标志ZF(Zero Flag)
    零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
    5、符号标志SF(Sign Flag)
    符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用码表示法,所以,SF也就反映运算结果的
    正负号。运算结果为正数时,SF的值为0,否则其值为1。
    6、溢出标志OF(Overflow Flag)
    溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否
    则,OF的值被清为0。
    “溢出”和“进位”是两个不同含义的概念,不要混淆。如果不太清楚的话,请查阅《计算机组成原理》课程中的有关章节。
    二、状态控制标志位
    状态控制标志位是用来控制CPU操作的,它们要通过专门的指令才能使之发生改变。
    1、追踪标志TF(Trap Flag)
    当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。
    指令系统中没有专门的指令来改变标志位TF的值,但程序员可用其它办法来改变其值。
    2、中断允许标志IF(Interrupt-enable Flag)
    中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。
    但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。
    具体规定如下:
    (1)、当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;
    (2)、当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。
    CPU的指令系统中也有专门的指令来改变标志位IF的值。
    3、方向标志DF(Direction Flag)
    方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。具体规定在第5.2.11节——字符串操作指令——中给出。
    在微机的指令系统中,还提供了专门的指令来改变标志位DF的值。
    三、32位标志寄存器增加的标志位
    1、I/O特权标志IOPL(I/O Privilege Level)
    I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。
    如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。
    2、嵌套任务标志NT(Nested Task)
    嵌套任务标志NT用来控制中断返回指令IRET的执行。具体规定如下:
    (1)、当NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;
    (2)、当NT=1,通过任务转换实现中断返回。
    3、重启动标志RF(Restart Flag)
    重启动标志RF用来控制是否接受调试故障。规定:RF=0时,表示“接受”调试故障,否则拒绝之。
    在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。
    4、虚拟8086方式标志VM(Virtual 8086 Mode)
    如果该标志的值为1,则表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。

    计算机寄存器常用指令
    一、常用指令  
    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 ;把段地址:偏移地址存到ESDI.  
    LFS 传送目标指针,把指针内容装入FS.  
        例: LFS DI,string ;把段地址:偏移地址存到FSD.  
    LGS 传送目标指针,把指针内容装入GS.  
        例: LGS DI,string ;把段地址:偏移地址存到GSDI.  
    LSS 传送目标指针,把指针内容装入SS.  
        例: LSS DI,string ;把段地址:偏移地址存到SSDI.  
    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 I 目标串段寄存器:目标串变址.  
    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/ECX0时重复.  
    REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX0时重复.  
    REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX0时重复.  
    REPC 当CF=1且CX/ECX0时重复.  
    REPNC 当CF=0且CX/ECX0时重复.   
    五、程序转移指令   
    1.简单的条件转移指令
    JZ(或jE) OPR---------------结果为零转移,   测试条件ZF=1
    JNZ(或jNE)   OPR --------------结果不为零转移,测试条件ZF=0
    JS OPR----------------------结果为负转移,   测试条件SF=1
    JNS OPR---------------------结果为正转移,   测试条件SF=0
    JO OPR--------------------- 溢出转移,    测试条件OF=
    JNO OPR --------------------不溢出转移 , 测试条件SF=0
    JP OPR ---------------------结果为偶转移,   测试条件SF=1
    JNP OPR --------------------结果为奇转移 , 测试条件SF=0
    JC OPR -------------------- 有进位转移 , 测试条件SF=1
    JNC OPR --------------------无进位转移, 测试条件SF=0
    2.无符号比较条件转移指令(以下指令经常是CMP OPD,OPS后面的指令根据比较结果来实现转移)
    JB(或JNAE) opd --------------小于或者不大于等于则转移
    JNB(或JAE) opd---------------不小于或者大于等于则转移
    JA(或NJBE) OPD---------------大于或者不小于等于则转移
    JNA(或JBE) OPD---------------不大于或者小于等于则转移
    3.带符号比较条件转移指令
    JL(或JNGE) --------------小于或者不大于等于则转移
    JNL(或JGE)--------------不小于或者大于等于则转移
    JG(或NJLE)---------------大于或者不小于等于则转移
    JNG(或JLE)---------------不大于或者小于等于则转移
    六、调用子程序与返回指令
    CALL     子程序调用指令
    RET 子程序返回指令
    六、其它指令
    OFFSET -------------------- 返回偏移地址
    SEG     -------------------- 返回段地址
    EQU(=)   --------------------   等值语句
    PURGE   --------------------   解除语句
    DUP --------------------   操作数字段用复制操作符
    SEGMENT,ENDS   --------------------   段定义指令
    ASSUME -------------------- 段地址分配指令
    ORG --------------------   起始偏移地址设置指令
    $    --------------------地址计数器的当前值
    PROC,ENDP   --------------------   过程定义语句
    NAME,TITLE,END   --------------------   程序开始结束语句
    MACRO,ENDM --------------------宏定义指令
    XLAT (TRANSLATE) -------------------- 换码指令----
    七、条件标志
    ZF 零标志 -- 当结果为负时,SF=1,否则,SF=0.
    AF 辅助进位标志---运算过程中第三位有进位值,置AF=1,否则,AF=0
    PF 奇偶标志------当结果操作数中偶数个"1",置PF=1,否则,PF=0
    SF   符号标志----当结果为负时,SF=1;否则,SF=0.溢出时情形例外
    CF 进位标志----- 最高有效位产生进位值,例如,执行加法指令时,MSB有进位,置CF=1;否则,CF=0.
    OF 溢出标志-----若操作数结果超出了机器能表示的范围,则产生溢出,置OF=1,否则,OF=0

    ENDM --------------------宏定义指令
    XLAT (TRANSLATE) -------------------- 换码指令----
    七、条件标志
    ZF 零标志 -- 当结果为负时,SF=1,否则,SF=0.
    AF 辅助进位标志---运算过程中第三位有进位值,置AF=1,否则,AF=0
    PF 奇偶标志------当结果操作数中偶数个"1",置PF=1,否则,PF=0
    SF   符号标志----当结果为负时,SF=1;否则,SF=0.溢出时情形例外
    CF 进位标志----- 最高有效位产生进位值,例如,执行加法指令时,MSB有进位,置CF=1;否则,CF=0.
    OF 溢出标志-----若操作数结果超出了机器能表示的范围,则产生溢出,置OF=1,否则,OF=0


    【第三部分】




    指令功能
    AAA调整加
    AAD调整除
    AAM调整乘
    AAS调整减
    ADC进位加
    ADD
    AND
    ARPL调整优先级
    BOUND检查数组
    BSF位右扫描
    BSR位左扫描
    BSWAP交换字节
    BT位测试
    BTC位测试求反
    BTR位测试清零
    BTS位测试置一
    CALL过程调用
    CBW转换字节
    CDQ转换双字
    CLC进位清零
    CLD方向清零
    CLI中断清零
    CLTS任务清除
    CMC进位求反
    CMOVA高于传送
    CMOVB低于传送
    CMOVE相等传送
    CMOVG大于传送
    CMOVL小于传送
    CMOVNA不高于传送
    CMOVNB不低于传送
    CMOVNE不等传送
    CMOVNG不大于传送
    CMOVNL不小于传送
    CMOVNO不溢出传送
    CMOVNP非奇偶传送
    CMOVNS非负传送
    CMOVO溢出传送
    CMOVP奇偶传送
    CMOVS负号传送
    CMP比较
    CMPSB比较字节串
    CMPSD比较双字串
    CMPSW比较字串
    CMPXCHG比较交换
    CMPXCHG486比较交换486
    CMPXCHG8B比较交换8字节
    CPUIDCPU标识
    CWD转换字
    CWDE扩展字
    DAA调整加十
    DAS调整减十
    DEC减一
    DIV
    ENTER建立堆栈帧
    HLT
    IDIV符号整除
    IMUL符号乘法
    IN端口输入
    INC加一
    INSB端口输入字节串
    INSD端口输入双字串
    INSW端口输入字串
    JA高于跳转
    JB低于跳转
    JBE不高于跳转
    JCXZ计数一六零跳转
    JE相等跳转
    JECXZ计数三二零跳转
    JG大于跳转
    JL小于跳转
    JMP跳转
    JMPE跳转扩展
    JNB不低于跳转
    JNE不等跳转
    JNG不大于跳转
    JNL不小于跳转
    JNO不溢出跳转
    JNP非奇偶跳转
    JNS非负跳转
    JO溢出跳转
    JP奇偶跳转
    JS负号跳转
    LAHF加载标志低八
    LAR加载访问权限
    LDS加载数据段
    LEA加载有效地址
    LEAVE清除过程堆栈
    LES加载附加段
    LFS加载标志段
    LGDT加载全局描述符
    LGS加载全局段
    LIDT加载中断描述符
    LMSW加载状态字
    LOADALL加载所有
    LOADALL286加载所有286
    LOCK
    LODSB加载源变址字节串
    LODSD加载源变址双字串
    LODSW加载源变址字串
    LOOP计数循环
    LOOPE相等循环
    LOOPNE不等循环
    LOOPNZ非零循环
    LOOPZ为零循环
    LSL加载段界限
    LSS加载堆栈段
    LTR加载任务
    MONITOR监视
    MOV传送
    MOVSB传送字节串
    MOVSD传送双字串
    MOVSW传送字串
    MOVSX符号传送
    MOVZX零传送
    MUL
    MWAIT
    NEG求补
    NOP
    NOT
    OR
    OUT端口输出
    OUTSB端口输出字节串
    OUTSD端口输出双字串
    OUTSW端口输出字串
    POP出栈
    POPA全部出栈
    POPF标志出栈
    PUSH压栈
    PUSHA全部压栈
    PUSHF标志压栈
    RCL进位循环左移
    RCR进位循环右移
    RDMSR读专用模式
    RDPMC读执行监视计数
    RDSHR
    RDTSC读时间戳计数
    REP重复
    REPE相等重复
    REPNE不等重复
    RET过程返回
    RETF远过程返回
    RETN近过程返回
    ROL循环左移
    ROR循环右移
    RSM恢复系统管理
    SAHF恢复标志低八
    SAL算术左移
    SALC
    SAR算术右移
    SBB借位减
    SCASB扫描字节串
    SCASD扫描双字串
    SCASW扫描字串
    SETA高于置位
    SETB低于置位
    SETE相等置位
    SETG大于置位
    SETL小于置位
    SETNA不高于置位
    SETNB不低于置位
    SETNE不等置位
    SETNG不大于置位
    SETNL不小于置位
    SETNO不溢出置位
    SETNP非奇偶置位
    SETNS非负置位
    SETO溢出置位
    SETP奇偶置位
    SETS负号置位
    SGDT保存全局描述符
    SHL逻辑左移
    SHLD双精度左移
    SHR逻辑右移
    SHRD双精度右移
    SIDT保存中断描述符
    SLDT保存局部描述符
    SMI
    SMINT
    SMINTOLD
    SMSW保存状态字
    STC进位设置
    STD方向设置
    STI中断设置
    STOSB保存字节串
    STOSD保存双字串
    STOSW保存字串
    STR保存任务
    SUB
    SYSCALL系统调用
    SYSENTER系统进入
    SYSEXIT系统退出
    SYSRET系统返回
    TEST数测试
    UD0未定义指令0
    UD1未定义指令1
    UD2未定义指令2
    UMOV
    VERW校验写
    WAIT
    WBINVD回写无效高速缓存
    WRMSR写专用模式
    WRSHR
    XADD交换加
    XBTS
    XCHG交换
    XLAT换码
    XOR异或
    XSTORE



    指令功能
    EMMS媒体空MMX状态
    F2XM1浮点栈顶绝对值
    FADD浮点加
    FADDP浮点加出栈
    FBLD浮点加载十数
    FBSTP浮点保存十数出栈
    FCHS浮点正负求反
    FCLEX浮点检查错误清除
    FCMOVB浮点低于传送
    FCMOVBE浮点不高于传送
    FCMOVE浮点相等传送
    FCMOVNB浮点不低于传送
    FCMOVNBE浮点高于传送
    FCMOVNE浮点不等传送
    FCMOVNU浮点有序传送
    FCMOVU浮点无序传送
    FCOM浮点比较
    FCOMI浮点比较加载标志
    FCOMIP浮点比较加载标志出栈
    FCOMP浮点比较出栈
    FCOMPP浮点比较出栈二
    FCOS浮点余弦
    FDECSTP浮点栈针减一
    FDISI浮点检查禁止中断
    FDIV浮点除
    FDIVP浮点除出栈
    FDIVR浮点反除
    FDIVRP浮点反除出栈
    FENI浮点检查禁止中断二
    FFREE浮点释放
    FFREEP浮点释放出栈
    FIADD浮点加整数
    FICOM浮点比较整数
    FICOMP浮点比较整数出栈
    FIDIV浮点除整数
    FIDIVR浮点反除
    FILD浮点加载整数
    FIMUL浮点乘整数
    FINCSTP浮点栈针加一
    FINIT浮点检查初始化
    FIST浮点保存整数
    FISTP浮点保存整数出栈
    FISTTP 
    FISUB浮点减整数
    FISUBR浮点反减整数
    FLD浮点加载数
    FLD1浮点加载一
    FLDCW浮点加载控制器
    FLDENV浮点加载环境
    FLDL2E浮点加载L2E
    FLDL2T浮点加载L2T
    FLDLG2浮点加载LG2
    FLDLN2浮点加载LN2
    FLDPI浮点加载PI
    FLDZ浮点加载零
    FMUL浮点乘
    FMULP浮点乘出栈
    FNCLEX浮点不检查错误清除
    FNDISI浮点不检查禁止中断
    FNENI浮点不检查禁止中断二
    FNINIT浮点不检查初始化
    FNOP浮点空
    FNSAVE浮点不检查保存状态
    FNSTCW浮点不检查保存控制器
    FNSTENV浮点不检查保存环境
    FNSTSW浮点不检查保存状态器
    FPATAN浮点部分反正切
    FPREM浮点部分余数
    FPREM1浮点部分余数二
    FPTAN浮点部分正切
    FRNDINT浮点舍入求整
    FRSTOR浮点恢复状态
    FSAVE浮点检查保存状态
    FSCALE浮点比例运算
    FSETPM浮点设置保护
    FSIN浮点正弦
    FSINCOS浮点正余弦
    FSQRT浮点平方根
    FST浮点保存
    FSTCW浮点检查保存控制器
    FSTENV浮点检查保存环境
    FSTP浮点保存出栈
    FSTSW浮点检查保存状态器
    FSUB浮点减
    FSUBP浮点减出栈
    FSUBR浮点反减
    FSUBRP浮点反减出栈
    FTST浮点比零
    FUCOM浮点无序比较
    FUCOMI浮点反比加载标志
    FUCOMIP浮点反比加载标志出栈
    FUCOMP浮点无序比较出栈
    FUCOMPP浮点无序比较出栈二
    FWAIT浮点等
    FXAM浮点检查
    FXCH浮点交换
    FXTRACT浮点分解
    FYL2X浮点求L2X
    FYL2XP1浮点求L2XP1
    MOVED媒体双字传送
    MOVEQ媒体四字传送
    PACKSSDW媒体符号双字压缩
    PACKSSWB媒体符号字压缩
    PACKUSWB媒体无符号字压缩
    PADDB媒体截断字节加
    PADDD媒体截断双字加
    PADDSB媒体符号饱和字节加
    PADDSIW 
    PADDSW媒体符号饱和字加
    PADDUSB媒体无符号饱和字节加
    PADDUSW媒体无符号饱和字加
    PADDW媒体截断字加
    PAND媒体与
    PANDN媒体与非
    PAVEB 
    PCMPEQB媒体字节比等
    PCMPEQD媒体双字比等
    PCMPEQW媒体字比等
    PCMPGTB媒体字节比大
    PCMPGTD媒体双字比大
    PCMPGTW媒体字比大
    PDISTIB 
    PMACHRIW 
    PMADDWD 
    PMAGW 
    PMULHRIW 
    PMULHRWC 
    PMULHW 
    PMVGEZB 
    PMVLZB 
    PMVNZB 
    PMVZB 
    POR媒体或
    PSLLD媒体双字左移
    PSLLQ媒体四字左移
    PSLLW媒体字左移
    PSRAD媒体双字算术右移
    PSRAW媒体字算术右移
    PSRLD媒体双字右移
    PSRLQ媒体四字右移
    PSRLW媒体字右移
    PSUBB媒体截断字节减
    PSUBSB媒体符号饱和字节减
    PSUBSIW 
    PSUBSW媒体符号饱和字减
    PSUBUSB媒体无符号饱和字节减
    PSUBUSW媒体无符号饱和字减
    PSUBW媒体截断字减
    PUNPCKHBW媒体字节高位解压
    PUNPCKHDQ媒体双字高位解压
    PUNPCKHWD媒体字高位解压
    PUNPCKLBW媒体字节低位解压
    PUNPCKLDQ媒体双字低位解压
    PUNPCKLWD媒体字低位解压



    Delphi 2010 VCL、JCL 源码中用到的汇编指令(只是粗略统计):

    按名称排序使用次数按使用频率排序使用次数
    ADC15MOV4053
    ADD659PUSH1505
    AND162CMP1372
    BSF8POP1187
    BSR7JE952
    BSWAP12CALL847
    BT13JMP771
    BTC9ADD659
    BTR10JNE503
    BTS10TEST452
    CALL847SUB400
    CDQ6DEC332
    CLD10LEA288
    CMP1372RET280
    CPUID3INC261
    CWD1JZ252
    DB241OR248
    DD189DB241
    DEC332DD189
    DIV40JNZ167
    DW63MOVZX166
    ELSE2AND162
    END2FLD154
    F2XM16SHR131
    FABS7JB101
    FADD9JG92
    FADDP15JA86
    FBSTP3REP83
    FCHS5JBE81
    FCLEX5XCHG79
    FCOM7JLE79
    FCOMP7FSTP76
    FCOMPP3LODSB74
    FCOS4JL72
    FDIV11FWAIT72
    FDIVP5NEG70
    FDIVRP11DW63
    FFREE13LOCK61
    FIADD6STOSB58
    FIDIV2STOSW54
    FILD32MOVSX53
    FIMUL4FLDCW52
    FINCSTP1FLD152
    FISTP30SHL48
    FLD154JAE48
    FLD152DIV40
    FLDCW52JGE35
    FLDL2E6REPNE33
    FLDLG22LODSW33
    FLDLN29IMUL32
    FLDZ8FMUL32
    FMUL32FILD32
    FMULP26JNS31
    FNCLEX11FISTP30
    FNINIT2FXCH28
    FNSTCW20FMULP26
    FNSTSW6JS24
    FPATAN15SBB22
    FPREM3FSTSW22
    FPTAN4LOOP20
    FRNDINT14FNSTCW20
    FSCALE8FSTCW18
    FSIN3NOT17
    FSINCOS7JECXZ17
    FSQRT15FYL2X17
    FST5MUL16
    FSTCW18JNC16
    FSTP76SAHF15
    FSTSW22ROR15
    FSUB11FSQRT15
    FSUBP5FPATAN15
    FSUBR2FADDP15
    FSUBRP4ADC15
    FTST4FRNDINT14
    FWAIT72FFREE13
    FXAM1BT13
    FXCH28SAR12
    FXTRACT1ROL12
    FYL2X17RCL12
    FYL2XP11JO12
    HLT1BSWAP12
    IMUL32REPE11
    INC261FSUB11
    INT8FNCLEX11
    JA86FDIVRP11
    JAE48FDIV11
    JB101WAIT10
    JBE81CLD10
    JC6BTS10
    JE952BTR10
    JECXZ17SETC9
    JG92FLDLN29
    JGE35FADD9
    JL72BTC9
    JLE79INT8
    JMP771FSCALE8
    JNA1FLDZ8
    JNC16BSF8
    JNE503PUSHFD7
    JNG2FSINCOS7
    JNL1FCOMP7
    JNS31FCOM7
    JNZ167FABS7
    JO12BSR7
    JRCXZ2NOP6
    JS24JC6
    JZ252FNSTSW6
    LEA288FLDL2E6
    LEAVE1FIADD6
    LOCK61F2XM16
    LODSB74CDQ6
    LODSW33STOSD5
    LOOP20POPFD5
    MOV4053FSUBP5
    MOVSB1FST5
    MOVSX53FDIVP5
    MOVZX166FCLEX5
    MUL16FCHS5
    NEG70SHRD4
    NOP6PUSHF4
    NOT17POPF4
    OR248FTST4
    PAUSE3FSUBRP4
    POP1187FPTAN4
    POPF4FIMUL4
    POPFD5FCOS4
    PUSH1505RCR3
    PUSHF4PAUSE3
    PUSHFD7FSIN3
    RCL12FPREM3
    RCR3FCOMPP3
    REP83FBSTP3
    REPE11CPUID3
    REPNE33STD2
    RET280SETNZ2
    ROL12SETE2
    ROR15JRCXZ2
    SAHF15JNG2
    SAL1FSUBR2
    SAR12FNINIT2
    SBB22FLDLG22
    SETC9FIDIV2
    SETE2END2
    SETNC1ELSE2
    SETNZ2STC1
    SHL48SHLD1
    SHLD1SETNC1
    SHR131SAL1
    SHRD4MOVSB1
    STC1LEAVE1
    STD2JNL1
    STOSB58JNA1
    STOSD5HLT1
    STOSW54FYL2XP11
    SUB400FXTRACT1
    TEST452FXAM1
    WAIT10FINCSTP1
    XCHG79CWD1


    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|1401软件安全 ( ICP备16034480号 )

    GMT+8, 2024-5-3 11:21 , Processed in 0.204619 second(s), 26 queries , Gzip On.

    Powered by Discuz! X3.5

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表