2022年2022年汇编指令符号大全 .pdf
80X86 汇编指令符号大全+、-、*、/算术运算符。&宏处理操作符。宏扩展时不识别符号和字符串中的形式参数,如果在形式参数前面加上一个&记号,宏汇编程序就能够用实在参数代替这个形式参数了。$地址计数器的值 记录正在被汇编程序翻译的语句地址。每个段均分配一个计数器,段内定义的所有标号和变量的偏移地址就是当前汇编地址计数器的值。?操作数。在数据定义语句中,操作数用?,其作用是分配并保留存储空间,但不存入确定的数据。等号伪指令 符号定义。对符号进行定义和赋值,功能与 EQU 相似,但允许(重复)再定义。:修改属性运算符(操作符)段操作符。用来临时给变量、标号或地址表达式指定一个段属性(不用缺省的段寄存器),自动生成一个“跨段前缀字节”。注意,段寄存器CS 和ES 不能被跨越,堆栈操作时也不能跨越SS。;注释符号。%特殊宏操作符,用来将其后的表达式(通常是符号常数,不能是变量名和寄存器名)转换成它所代表的数值,并将此数值的ASCII 码嵌入到宏扩展中。()1.运算符 用来改变运算符的优先级别。2.教材符号,表示括号内存储单元(或寄存器)的内容。宏调用时用来将带间隔符(如空格,逗号等)的字符串(作为实参)括起来。1.运算符。方括号括起来的数是数组变量的下标或地址表达式。带方括号的地址表达式必须遵循下列原则,只有BX、BP、SI、DI 这四个寄存器可在方括号内出现;BX或BP 可单独出现在各方括号中,也可以与常数、SI 或 DI 一起出现在方括号内,但不允许BX和 BP 出现在同一个方括号内;SI 和 DI 可以单独出现在各方括号内,也可以与常数、BP或 BX 一起出现在方括号内,但不允许 SI 和 DI 出现在同一个方括号内;一个方括号内包含多个寄存器时,它们只能作加法运算;若方括号内包含基址指针BP,则隐含使用堆栈段寄存器SS 提供段基址,否则均隐含使用数据段寄存器DS 提供段基址。2.教材符号,表示其中的内容可省略。.LIST 伪指令。用于打开列表文件输出。.RADIX 伪指令。把缺省的基数改为2-16 范围内的任意基数。.RADIX 不影响 DD、DQ、DT 伪指令,在这些伪指令中,输入的数值只要没有加上数据类型就认为是十进制数。.XLIST 伪指令。用于关闭列表文件输出。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 9 页 -%OUT 伪指令。在汇编时显示其后的信息。AAA 指令助记符 加法运算后的ASCII 调整(非压缩的BCD 码)。无操作数,调整的加法结果在AL 中。AF 和 CF 的状态改变说明结果大于9。检查 AL 的低四位是否为合法的BCD 码(0-9),如果合法就清除AL 的高四位以及AF 和 CF 标志。当AL 的低四位表示的数大于 9 或 AF1 时,将 AL 加 6,AH 加 1,并使 AF 和 CF 置位,清除AL 中的高四位。任何一个AF 之间的数加上6 以后,都会使AL 低 4 位产生 0-9 之间的数,从而达到调整的目的。AAD 指令助记符 除法的 ASCII 调整(非压缩的BCD 码)。在执行除法操作前,必须利用 AAD 指令将非压缩型 BCD 码表示的数转换成二进制数送AL。步骤是,先将被除数的高位数(AH 中的内容)乘以10,然后加到AL 的低位数中,接着将AH 清零。AAM 指令助记符 乘法的 ASCII 调整(非压缩的BCD 码)。用于将字节乘法的积转换成两个合法的十进制非压缩码。AAM 不带操作数,假定成绩在AH 和 AL 中,并将调整后的非压缩码送回AH 和 AL。为了保证 AAM得到正确的结果,原乘数和被乘数必须是合法的非压缩码。指令执行时,AAM 用 10(0AH)除 AL 寄存器,并将除得的商和余数分别送AH 和 AL 寄存器,实现转换。AAS 指令助记符 减法运算后的ASCII 调整(非压缩的BCD 码)。检查 AL 的低四位是否为合法的BCD 码(0-9),如果合法就清除AL 的高四位以及AF 和 CF 标志。当AL 的低四位表示的数大于 9 或 AF1 时,将 AL 减 6,AH 减 1,并使 AF 和 CF 置 1,清除 AL中的高四位。ADC 指令助记符 带进位加法(把CF 的值加上)。用于多字节数的高字节加法运算。ADD 指令助记符 加法。参与运算的二操作数应该同时带符号或不带符号,并且长度一致。操作数可以是寄存器、存储器或立即数,但不能同时为存储单元或段寄存器,立即数也不能作为目的操作数。AF Auxiliary Carry Flag,辅助进位标志,在标志寄存器的第4 字节。记录运算时第 3 位(半个字节)产生的进位值(置1)。该标志用于对BCD 码的加减运算中。AND 逻辑运算符(在语句的操作数部分,汇编时完成)或逻辑操作指令助记符(在语句的操作码部分,其运算在执行指令时完成)按位与。只有相“与”的两位全为1,结果才为 1。某数自己与自己相“与”,操作数不变,进位标志CF 清 0。ASSUME 段定义伪指令 设定分段寄存器,格式为ASSUME 段寄存器:段名,段寄存器名:段名 。在代码段的开始用来指出所有段与段寄存器的关系,确定某个段分配给哪个段寄存器。ASSUME只指出各段寄存器的分配,并没有把段地址装入相应的段寄存器。为此,在代码段中,还必须把数据段和附加数据段的段地址装入相应的寄存器中。AT伪指令 段定义(组合类型)。该段按绝对地址定位,段基址为数值表达式的值,位名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 9 页 -移量为 0。不能指定代码段。AX Accumulator,通用寄存器,算术运算的主要寄存器。另外,所有的I/O 指令都使用这一寄存器与外部设备传送信息。其中AH 是高 8 位,AL 是低 8 位。B 数据类型后缀,表示二进制常量。BPBase Pointer,基址指针寄存器。可以与SS 寄存器联用来确定堆栈中任一存储单元的地址。它指示堆栈中任一单元的偏移量。非堆栈进出指令要访问堆栈,只能通过BP 进行。BXBase,通用寄存器。在计算存储器地址时,经常用作基址寄存器。其中BH 是高 8 位,BL 是低 8 位。BYTE 伪指令 段定义(定位类型)。本段起始单元可以从任一地址开始,段间不留空隙,存储器利用率最高。CALL 指令助记符 程序调用。一、段内直接调用:格式为 CALL 过程名。先把 IP 内容(子程序的返回地址,即 CALL下一条指令的地址)压入堆栈,然后IP 转移到子程序的入口地址。二、段内间接调用:格式为 CALL WORD PTR OPD。先把 IP 的内容压入堆栈,然后IP 指向(转到)由寻址方式决定的EA。三、段间直接调用。格式为CALL FAR PTR 过程名。先把 CS 和 IP 的内容压入堆栈,然后在 CS 中装入新的段地址,IP 指向段内偏移地址。四、段间间接调用:格式为CALL DWORD PTR OPD。先把 CS 和 IP 的内容压入堆栈,然后把寻址方式确定的有效地址所指定的一个字储存单元的内容送入IP,下一个字存储单元的内容(段首址)送入CS。CBW 指令助记符 字节转换为字。把AL 中字节的符号扩展到AH 中,若(AL)的最高有效位为0,则(AH)00;若(AH)的最高有效位为1,则(AH)0FFH。CFCarry Flag,进位标志,在标志寄存器的第0 字节 ,记录运算时从最高有效位产生的进位值(置 1)。作加法时,CF 位可以用来表示无符号数的溢出(有符号数溢出用OF 表示)。CLC 指令助记符 标志(进位)设置。设置CF0。CLD 指令助记符 清方向标志。使DF0。这样,当执行字节串操作指令时,地址自动增 1;当执行字串操作指令时,地址自动增2。CLI 指令助记符 中断允许标志设置。设置IF0。CMC 指令助记符 标志(进位)设置。CF 取反。CMP 指令助记符 比较。对于“CMP AX,BX”,如果是两个无符号数比较(减),若结果没有产生借位,即CF 0,则(AX)(BX);若 CF 1,则(AX)(BX)。如果是名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 9 页 -两个带符号数比较,则当没有溢出(OF0)时,若SF0,则(AX)(BX)若 SF1,则(AX)(BX)当产生溢出(OF1)时,若 SF0,则(AX)(BX)多 SF1,则(AX)(BX)简炼的结论,若 OF 异或 SF0,则(AX)(BX)若 OF 异或 SF 1,则(AX)(BX)CMPS指令助记符 串比较。通常用CMPSB 或 CMPSW。CMPSB 指令助记符 串比较。将 DS 段 SI 指出的字节数据减去ES 段 DI 指出的字节数据(不保存结果),然后根据相减结果设置标志位(两个数据相等,则ZF1)。并由方向标志 DF 修改 SI 和 DI 中的地址,即当 DF0 时,地址都加1;当 DF 1时,地址都减1。CMPSW 指令助记符 串比较。将DS 段 SI 指出的字数据减去ES 段 DI 指出的字数据(不保存结果),然后根据相减结果设置标志位(两个数据相等,则ZF1)。并由方向标志 DF 修改 SI 和 DI 中的地址,即当DF0 时,地址都加2;当 DF1 时,地址都减 2。COMMON 伪指令 段定义(组合类型)。该段与其它模块中所有也说明为COMMON的同名,同 类别 段共享相同的存储区域,即这些段的起始地址都相同,共享的公共存储区域的长度是各模块同名段中最大的长度。使用COMMON方式可以使不同模块中的不同变量或标号作用于相同的存储单元。CSCode Segment,代码段寄存器,存放当前运行的代码段起始地址(高16 位)。代码段存放当前正在运行的程序。CWD 指令助记符 字转换为双字。把AX 中字节的符号扩展到DX 中,若(AX)的最高有效位为0,则(DX)0000;若(AX)的最高有效位为1,则(DX)0FFFFH。CXCount,通用寄存器。在循环和串处理指令中用作隐含的计数器。其中CH 是高 8 位,CL 是低 8 位。DAA 指令助记符 加法的十进制调整(压缩的 BCD 码)。无操作数,调整 的加法结果在 AL 中。调整方法是,如果AL 的低 4 位大于 9 或 AF 1,则加 6 到 AL 并置 AF 1;如果 AL 的高 4 位大于 9 或 CF1,则加 60H 到 AL,并 置 CF1。DAS 指令助记符 减法的十进制调整(压缩的BCD 码)。调整方法是,若AF 1 或AL 的低 4 位为 AF,则(AL)减 06H,且 AF 置 1;若 CF1 或 AL 的高 4 位为 AF,则(AL)减 60H,且 CF 置 1。DB 伪指令 定义字节。其后的每个操作数占用一个字节。若是字符串,必须用引号 括起来,字符串不能超过 255 个字符,字符串自左至右以字符的ASCII 码按地址递增的顺序依次存放。DD 伪指令 定义双字。其后的每个操作数占用二个字(低字在前)。DD还可以把其后的变量或标号的偏移地址和所在段首址存入存储器内指定的双字单元(即 DD 前面的变量)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 9 页 -中,第一个字中存放DD 后的变量的偏移地址,第二个字中存放该变量所在段的段首址。DEC 指令助记符 减 1。操作数可以是寄存器或存储器单元,但不能是段寄存器或立即数。DFDirection Flag,方向标志,在标志寄存器的第 10 字节,在串处理指令中控制处理信息的方向。DF 为 1 时是反向,每次操作后使SI 和 DI 减量(这样就使串处理从高地址向低地址方向处理);当 DF 为 0 时是正向,使SI 和 DI 增量。DI Destination Index,目的变址寄存器。与ES 联用,用来确定数据段中某一存储单元的偏移地址。在串处理指令中,DI 指出目的操作数的地址,隐含段为当前的附加段。DIV 指令助记符 无符号数除法。对于字节操作,16 位被除数(若被除数为 8 位,需用符号扩展的方法,即用 CBW 指令扩展到16 位)放在AX 中,8 位除数为源操作数,相除结果,8 位商在 AL 中,而 8 位余数在 AH 中。对于字操作,32 位被除数(若被除数为16 位,用 CWD 指令扩展到32 位)放在 DX 和AX 中,16 位除数为源操作数,相除结果,字(16 位)商在AX 中,字余数在DX 中。源操作数不能是立即操作数,指令执行后,源操作数的值不变。如果商超过目标寄存器能存放的最大数值时,系统产生0 类中断。被除数若需要转换为双精度值时,一定不能用符号扩展,而只能将高16 位送0(MOV DX,0)。DQ 伪指令 定义四字。其后的每个操作数占用四个字。DSData Segment,数据段寄存器。存放数据段的起始地址(高16 位)。数据段存放当前运行程序所用的数据,如果程序中使用了串处理指令,则其源操作数也存放在数据段中。DT 伪指令 定义十字节。其后的每个操作数占用十个字节。DUP 复制操作符。DUP 前面的常量或表达式的值(正整数)指明 DUP 后面的括号中的操作数之重复次数。DW 伪指令 定义字。其后的每个操作数占用一个字(低字节在前,高字节在后)。DW可以给两个字符组成的字符串(用 括起来)分配两个字节的存储单元(前一个字符在高字节)。DW 还可以把其后的变量或标号的偏移地址存入存储器的指定单元(即 DW 前的变量)。DX Data,通用寄存器。在作双字长运算时,把 DX 和 AX 组合在一起存放一个双字数,DX用来存放高位字。此外,对某些 I/O 操作,DX 可用来存放 I/O 的端口地址。其中 DH 是高 8位,DL 是低 8 位。EA 教材符号-某一存储单元的偏移地址,即该单元到它所在段首址的字节距离。ELSE伪指令 条件。条件不满足时汇编ELSE 至 ENDIF 之间的程序块。名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 9 页 -END 伪指令 程序模块结束。主程序模块结束,END 后要接标号(存储器地址),指出程序开始执行的地址。子程序不用。ENDIF 伪指令 条件(结尾)。ENDM 宏指令 宏定义(结尾)。重复块(结尾)。ENDP伪指令 过程(子程序)定义(结尾)。ENDS伪指令 段定义或结构定义(结尾)。ESExtra Segment,附加段寄存器。用于存放附加段的起始地址(高16 位)。附加段是一个辅助的数据区,也是串处理指令的目的操作数据存放区。ESC指令助记符 交权给外部协处理器。是在大模式下使用的一条指令,它可以使外部协处理器从 8086/8088 指令流中获得一个操作码和一个操作数,并使用8086/8088 的寻址方式。指令后的操作码是一个 6 位的立即数,其中 3 位用来指明哪一个协处理器工作,另外 3位指明这个处理器执行什么指令。随后的源操作数若是寄存器,则8086/8088 直接将其内容放置在数据总线上;如果这个源操作数是存储变量,则8086/8088 从存储器中取出操作数并放到数据总线上,从而使外部协处理器可以获取这个操作数,对它进行运算。EQ 关系运算符 相等。若满足条件,输出结果为全1(所有的位),否则为全0。EQU 等价伪指令。格式为 符号名 EQU 表达式.EQU 可以把它前面的符号定义为一个常量或一个能求出常数值的表达式,或定义为别的符号名,甚至定义为一条可执行的命令。不得重复定义。例一,新变量名 EQU THIS DWORD,该语句将紧跟其后的变量重新定义为双字类,以新变量名命名。数据存储区首址不变。例二,新变量名 EQU WORD PTR 旧变量名,该语句将旧变量重新定义为字类型,以新变量名命名。数据存储区首址不变。EVEN 伪指令。它使此语句后面的程序或数据块的起始地址为偶数。EXTRN 伪指令 定义外部符号。格式是 EXTRN 符号名:类型。表示本模块中需要引用但却是在其他模块中定义说明为PUBLIC的那些符号(符号常量、变量、标号以及过程名)。符号类型必须与他们在其他模块定义时的符号类型保持一致。FLAGS 标志寄存器(即PSW)。GE 关系运算符 大于等于。若满足条件,输出结果为全 1(所有的位),否则为全0。GROUP 伪指令 分组。把模块中若干不同名的段集合成一个组,并赋予一个组名,使它们都装在一个物理段中(64KB)。可以得到较紧凑的代码,组内各段间的跳转都可以看作名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 9 页 -是段内跳转。格式是 组名 GROUP 段名 1,段名 2,GT 关系运算符 大于。若满足条件,输出结果为全1(所有的位),否则为全0。H 数据类型后缀,表示十六进制常量。HIGH 字节分解运算符(操作符)。用来从运算对象(一个数或地址表达式)中分离出(取)高字节。HLT 指令助记符 停机。该指令使处理器处于暂停状态,该状态可以由复位信号、非屏蔽中断请求信号以及IF1 情况下可屏蔽中断信号清除。IDIV 指令助记符 带符号数除法。对于字节操作,16 位被除数(若被除数为 8 位,需用符号扩展的方法,即用CBW 指令扩展到16 位)放在AX 中,8 位除数为源操作数,相除结果,8 位商在 AL 中,而 8 位余数在AH 中。对于字操作,32 位被除数(若被除数为 16 位,用 CWD 指令扩展到32 位)放在 DX 和 AX 中,16 位除数为源操作数,相除结果,字(16 位)商在 AX 中,字余数在DX 中。余数的符号必须和被除数的符号相同。IFInterrupt Flag,中断标志,在标志寄存器的第9 字节,当 IF 为 1 时,允许中断,即 CPU响应外设的中断请求。伪指令 条件(表达式的值不等于0 为真)。若条件成立,则汇编整个程序块;但中间若有ELSE 命令,则只汇编到ELSE;当条件不成立时,只汇编从ELSE到 ENDIF 之间的程序块。IF1 伪指令 条件(若是第一趟扫描,条件为真)。IF2 伪指令 条件(若是第二趟扫描,条件为真)。IFB 伪指令 条件(若其后的参数对应的实参存在,为真)。IFDEF 伪指令 条件(若其后的符号已定义或被说明为外部符号,则条件为真)。IFDIF 伪指令 条件(若两个字符串参数不相同,则条件为真)。IFE 伪指令 条件(表达式的值等于0 时,条件为真)。IFIDN 伪指令 条件(若两个字符串参数相同,则条件为真)。IFNB 伪指令 条件(若其后的参数对应的实参不存在,为真)。IFNDEF 伪指令 条件(若其后的符号未定义或未被说明为外部符号,则条件为真)。IMUL 指令助记符 带符号的整数乘法。对于字节乘法,(AL)*(源操作数)名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 9 页 -AX;对于字乘法,(AX)*(源操作数)-AX 和 DX;若结果的高半部分(AH或 DX,对应字节和字)是低半部分的符号扩展,则CF0,OF0;否则,CF1,OF1,表示在AH(对于字节)或DX(对于字)中包含结果的有效值。IN指令助记符 输入。允许把一个字或字节由输入端口(port)传送到AX 或 AL。端口地址可以用直接寻址(IN AL n),也可用 DX 间接寻址(IN AL,DX)。8 位地址直接寻址,可寻址 256 个端口;DX 间接寻址,可寻址64K 个端口。INC 指令助记符 加 1。操作数可以是寄存器或存储器单元,但不能是段寄存器或立即数。状态标志CF 不受影响。INCLUDE 伪指令。当宏汇编程序汇编到INCLUDE伪指令时,立即打开INCLUDE指示的文件,并把它汇编到当前的源文件中去,直到该文件被汇编结束,汇编程序继续汇编INCLUDE伪指令之后的语句。INCLUDE可以嵌套。INT 指令助记符 中断调用。操作数是用户定义的中断类型,它可以实现256 种不同的中断。当指令执行时,首先将标志寄存器内容进栈,清除IF 和 TF 标志并将当前CS 内容进栈;然后将中断类型乘以4,得到中断向量地址;最后取中断向量的第二个字送CS,将 IP进栈,取中断向量的第一个字送IP。由于 CS:IP 指向中断服务程序,因此可以实现指定中断类型的段间调用。INTO 指令助记符 溢出中断。只有OF1 时才进入溢出中断(IF 和 TF 被改为 0)。IP Instruction Pointer,控制寄存器 指令指针寄存器。用来存放代码段中指令的偏移地址。在程序运行的过程中,它始终指向下一条指令的首地址。它与CS 联用,确定下一条要执行的指令的物理地址。IP 寄存器不能用于算术运算,也不能直接存取,但可以用控制转移指令加以改变。IRET 指令助记符 中断返回。执行该指令时,从栈中退出三个16 位的值,分别送IP、CS 和标志寄存器。IRP 宏指令 重复块(以ENDM 结束)。IRP 形参,实参1,实参2,这种宏指令用于带立即数的伪操作。实参是用户指定的立即数,它的个数就是重复的次数,每重复一次,就用一个实参代替形参。IRPC宏指令 重复块(以ENDM 结束)。IRPC 形参,字符串这种宏指令用于带字符串的重复伪操作。重复次数由字符串中字符个数确定。每次重复,依次用字符串中的一个字符替代形参,直到字符替代完毕。JA 无符号数条件转移指令助记符(无符号数比较)高于转移(等价JBE)。CF0,且 ZF0 则转移(段内直接短转移)。JAE 无符号数条件转移指令助记符(无符号数比较)高于或等于转移(等价JNB)。CF0,或 ZF1 则转移(段内直接短转移)。名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 9 页 -JB 无符号数条件转移指令助记符(无符号数比较)低于转移(等价 JNAE)。CF1,且ZF0 则转移(段内直接短转移)。JBE 无符号数条件转移指令助记符(无符号数比较)低于或等于转移(等价JNA)。CF1 或 ZF 1 则转移。JC 简单条件转移指令助记符 有进位转移。CF 1 则转移(段内直接短转移,产生 8位的位移量,即转移地址的偏移量在128 到 127 之间)。JCXZ指令助记符 条件转移。(CX)0,则转移(段内直接短转移?)。JE 简单条件转移指令助记符(两数比较)相等转移(同JZ)。前次操作结果为0,ZF1 则转移(段内直接短转移)。JG有符号数条件转移指令助记符(有符号数比较)大于转移(等价 JNLE)。SF 和 OF同号,且ZF0 时转移。(段内直接短转移)JGE 有符号数条件转移指令助记符(有符号数比较)大于或等于转移(等价于JNL)。当 SF和 OF 同号,或ZF1,则转移(段内直接短转移)。JL 有符号数条件转移指令助记符(有符号数比较)小于转移(等价于JNGE)。当 SF和 OF 异号,且ZF0 时转移(段内直接短转移)。名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 9 页 -