汇编指令

汇编指令是汇编语言中使用的一些操作符和助记符,还包括一些伪指令(如assume,end),汇编指令同机器指令一一对应。每一种CPU都有自己的汇编指令集。计算机是通过执行指令来处理数据的,为了指出数据的来源、操作结果的去向及所执行的操作,一条指令一般包含操作码和操作数两部分。
基础资料
  • 中文名:汇编指令
  • 外文名:assembly instruction
  • 运用领域程序调试指令类别:整数指令
  • 领域汇编语言学科:计算机科学与技术电子信息技术
  • 简介

    编译背景

    任何一种微处理器(CPU)在设计时,就已规定好自己特定的指令系统,这种指令系统的功能也就决定了由该微处理器构成的计算机系统及其基本功能。指令系统中所设计的每条指令都对应着微处理器要完成的一种规定功能操作,即这些指令功能的实现都是由微处理器中的物理器件完成的。要使计算机完成一个完整的任务,就需要执行一组指令,这组指令通常称为程序。计算机能够执行的各种不同指令的集合就称为处理器(CPU)的指令系统。

    一台计算机只能识别由二进制编码表示的指令,称之为机器指令。一条机器指令应包括两部分内容:一部分给出该指令应完成何种操作,称为指令操作码部分;另一部分给出参与操作的操作数的值,或指出操作数存放在何处、操作的结果应送往何处等,这一部分称为指令的操作数部分。处理器可根据指令中给出的地址信息求出存放操作数的地址称为有效地址EA(EffectiveAddress),然后对存放在有效地址中的操作数进行存取操作。指令中关于如何求岀存放操作数有效地址的方法称为操作数的寻址方式。计算机按照指令给出的寻址方式求出操作数有效地址进行存取操作数的过程,称为指令的寻址操作。

    指令的格式

    指令是计算机能够识别和执行的操作命令,由二进制数“0”、“1”组成。每条指令的编码格式由机器指令系统规定。通常,一条指令包含操作码和操作数两部分内容。

    操作码(OperationCode)用来说明指令操作的性质与功能,常用OP表示。操作码是指令中不可缺少的部分,通常由1~2个字节组成,机器通过译码电路来识别指令。操作数用于提供指令中要处理的数据或数据所在的地址信息。

    以MOV指令作为例子,MOV指令的格式为:MOVdst,src。其中:MOV为指令助记符,表示传送,dst为目标操作数,src表示源操作数,该指令的功能是将源操作数传送到目标单元。例如:

    MOV......AL,20H;将8位立即数20H传送到AL中。

    MOV......AX,1234H;将16位立即数1234H传送到AX中。

    MOV......EAX,34568020H;将32位立即数34568020H传送到EAX中。汇编指令

    数据传输

    它们在存储器和寄存器、寄存器和输入输出端口之间传送数据。数据传输类指令主要包括数据传送、数据交换、堆栈操作、查表转换、地址传送、标志位传送、I/O数据传送指令。这类指令的主要特点是大部分指令操作完成后,对FR中的标志位不产生影响。它们在存储器和寄存器、寄存器和输入输出端口之间传送数据。

    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.输入输出端口传送指令.

    INI/O端口输入.(语法:IN累加器,{端口号│DX})

    OUTI/O端口输出.(语法:OUT{端口号│DX},累加器)

    输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX指定时,

    其范围是0-65535.

    3.目的地址传送指令.

    LEA装入有效地址.

    例:LEADX,string;把偏移地址存到DX.

    LDS传送目标指针,把指针内容装入DS.

    例:LDSSI,string;把段地址:偏移地址存到DS:SI.

    LES传送目标指针,把指针内容装入ES.

    例:LESDI,string;把段地址:偏移地址存到ES:DI.

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

    例:LFSDI,string;把段地址:偏移地址存到FS:DI.

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

    例:LGSDI,string;把段地址:偏移地址存到GS:DI.

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

    例:LSSDI,string;把段地址:偏移地址存到SS:DI.

    4.标志传送指令.

    LAHF标志寄存器传送,把标志装入AH.

    SAHF标志寄存器传送,把AH内容装入标志寄存器.

    PUSHF标志入栈.

    POPF标志出栈.

    PUSHD32位标志入栈.

    POPD32位标志出栈.汇编指令

    算术运算

    算数运算类指令包括加减乘除、比较与调整指令。它们可进行8位、16位和32位的运算。参加运算的操作数可以说二进制数和十进制数(BCD码),这些数可以是无符号数,也可以是带符号数。算术运算指令的主要特点是执行结果影响标志寄存器的状态标志位OF、SF、ZF、AF、PF、CF。

    ADD加法.

    ADC带进位加法.

    INC加1.

    AAA加法的ASCII码调整.

    DAA加法的十进制调整.

    SUB减法.

    SBB带借位减法.

    DEC减1.

    NEG取补

    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逻辑右移.(每位右移,低位进CF,高位补0)

    SAR算术右移.(每位右移,低位进CF,高位不变)

    ROL循环左移.

    ROR循环右移.

    RCL通过进位的循环左移.

    RCR通过进位的循环右移.

    以上八种移位指令,其移位次数可达255次.

    移位一次时,可直接用操作码.如SHLAX,1.

    移位>1次时,则由寄存器CL给出移位次数.

    如MOVCL,04

    SHLAX,CL

    串指令

    串操作指令用于处理存放在存储器中的数据串,有串传送、串比较、串扫描、串装入、串存储。其中,仅有串比较和串扫描指令对标志位OF、SF、ZF、AF、PF、CF有影响。

    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的距离内)

    (当且仅当(SFXOROF)=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>循环控制指令(短转移)

    LOOPCX不为零时循环.

    LOOPE/LOOPZCX不为零且标志Z=1时循环.

    LOOPNE/LOOPNZCX不为零且标志Z=0时循环.

    JCXZCX为零时转移.

    JECXZECX为零时转移.

    4>中断指令

    INT中断指令

    INTO溢出中断

    iret中断返回

    5>处理器控制指令

    HLT处理器暂停,直到出现中断或复位信号才继续.

    WAIT当芯片引线TEST为高电平时使CPU进入等待状态.

    ESC转换到外处理器.

    LOCK封锁总线.

    NOP空操作.

    STC置进位标志位.

    CLC清进位标志位.

    CMC进位标志取反.

    STD置方向标志位.

    CLD清方向标志位.

    STI置中断允许位.

    CLI清中断允许位.

    其他指令

    伪指令

    DB定义字节(1字节)

    DW定义字(2字节).

    DD定义双字(4字节)

    PROC定义过程.

    ENDP过程结束.

    SEGMENT定义段.

    ASSUME建立段寄存器寻址.

    ENDS段结束.

    END程序结束.

    控制指令

    标志处理指令CLC(进位位置0指令)

    CMC(进位位求反指令)

    CLC(进位位置为0指令)

    STC(进位位置为1指令)

    CLD(方向标志位置0指令)

    STD(方向标志位置1指令)

    CLI(中断标志置0指令)

    STI(中断标志置1指令)

    NOP(无操作)

    HLT(停机)

    WAIT(等待)

    ESC(换码)

    LOCK(封锁)

    寻址方式

    寄存器寻址

    操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。

    立即寻址

    立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(立即数)。

    寄存器移位寻址

    寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。

    寄存器间接寻址

    寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。

    基址寻址

    基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于査表、数组操作、功能部件寄存器访问等。

    多寄存器寻址

    多寄存器寻址一次可以传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。

    堆栈寻址

    堆栈寻址是一个按特定顺序进行存取的存储区,操作顺序为”后进先出“。堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。

    首页
    概念
    #贵族
    最新入驻
    贾科莫·普契尼
    Caroline Lufkin
    翁建宇
    相关阅读
    多媒体扩展指令集
    内容词条·5617人浏览
    塞音
    内容词条·3737人浏览
    电热执行器
    内容词条·1469人浏览
    超标量技术
    内容词条·6912人浏览
    三电
    内容词条·3925人浏览
    适用操作系统
    内容词条·34人浏览
    • 网站地图
    • |

    Copyright 2023 fuwu029.com赣ICP备2022008914号-4