蓝盐 下载:80X86 汇编指令符号大全(下)

来源:百度文库 编辑:九乡新闻网 时间:2024/04/30 20:26:00
MUL∶ 指令助记符——无符号数乘法。  字节乘法:(AL)*(源操作数)->AX

  字乘法: (AX)*(源操作数)->DX和AX

  若结果的高半部分(AH或DX,对应字节和字)为非0 值,则CF和OF置1;否则CF和OF清0。

  NAME∶伪指令——模块定义。程序将对给定的程序模块取模块名。格式是,NAME 模块名。 汇编处理时,一个模块就是一个独立的汇编单位。汇编处理只进行到模块结束语句END 为止。如果该模块是主模块,END 语句可以指出一个标号,它表示该程序的启动地址。

  NE∶关系运算符——不等。若满足条件,输出结果为全1 (所有的位),否则为全0 。

  NEG∶ 指令助记符——求补。将目的操作数的每一位求反(包括符号位)后加1.若在字节操作时对—128,或在字操作时对—32768取补,则操作数不变,但溢出标志OF置位。操作数可以是寄存器或存储器单元,但不能是段寄存器或立即数。结果送回目的操作数。执行结果不但影响标志位AF、CF、OF、PF、SF和 ZF,而且一般总是置CF=1 (除非操作数为0)。

  NONE∶伪指令——段定义(组合类型)。本段与其它段逻辑上不发生关系,每段都有自己的基地址。这是隐含的组合类型。

  NOP∶ 指令助记符——空操作。用于程序调试。

  NOT∶ 逻辑运算符(在语句的操作数部分)或逻辑操作指令助记符(在语句的操作码部分)——按位非(求反)。将目的地址中的内容逐位取反后再送入目的地址中。

  OF∶Overflow Flag, 溢出标志,在标志寄存器的第11字节。在运算过程中,如操作数超出了机器能表示的范围,此时OF 置1。作加法时,OF位是根据操作数的符号及其结果情况来设置的,若两个操作数的符号相同,而结果的符号与之相反时,OF置1,否则置0。

  OFFSET∶数值返回运算符。其加在一个变量名或标号前面,返回的数值是该变量名或标号所在的段的偏移地址。

  OPD∶ 教材符号--目的操作数。

  OPR∶ 教材符号--源操作数。

  OR∶ 逻辑运算符(在语句的操作数部分)或逻辑操作指令助记符(在语句的操作码部分)——按位或。进行“或”运算的两位中任一位是 1,则结果为1 。

  ORG∶ 伪指令——定位(置汇编地址计数器)。在每段源程序或数据块的开始,指明此语句后面的程序或数据块的起始地址,其余指令或数据就连续存放在以后的地址单元中。

  例一 ORG $+10 表示跳过10个字节。

  例二 ORG 数值表达式(值为0-65535) 表示$改为数值表达式的值。

  OUT∶ 指令助记符——输出。把AX或AL中的内容传送到一个输出端口。寻址方式与IN相同。

  PA∶教材符号--某一存储单元的物理地址。  对于指令,PA=(CS)左移4位+(IP);

  对于堆栈段数据,PA=(SS)左移4位+(SP);或PA=(SS)左移4位+(BP);

  对于数据段和附加数据段数据,PA=(DS或ES)+该变量的偏移地址。

  PARA∶伪指令——段定义(定位类型方式)。规定在定位时每个段的起始地址总是16的整倍数,最后四位二进制数一定是0 。这种定位方式最简单,但段间往往有空隙(最多为15个字节)。缺省定位方式是按PARA定位。

  PAGE∶①伪指令——段定义(定位类型方式)。要求段起始地址是 256的整倍数,即段的边界必须是页的边界。段地址的最低两位(16进制数)必须是0 。②伪指令——格式控制。指定汇编程序所产生的列表文件每页多少行(10—255), 每行多少字符(60-132)。或指定输出新的一页(用+号)。

  PF∶Parity Flag,奇偶标志,在标志寄存器的第2字节,当运算结果(指低8位)中1的个数为偶数时置1,否则置0。该标志主要用来检测数据在传输过程中的错误。

  POP∶指令助记符——出栈。将栈顶元素弹出送至某一寄存器,段寄存器(CS除外)或存储器中。首先将SP指的内容送至低8位,SP加1;再将SP指的内容送入高8位,SP再加1。

  POPF∶指令助记符——将堆栈顶端的字数据送入标志寄存器。对于TF和OF置位可先将数值置于AX中,压入堆栈,再用POPF送入标志寄存器。此方式对 TF和OF标志位是唯一可行的置位方法。

  PROC∶伪指令——过程(子程序)定义(起始)。定义一个子程序,并说明它是NEAR或FAR 过程。定义的过程如果由 DOS直接装入并启动执行,则该过程必须定义为 FAR过程。

  PSW∶Program Status Word,程序状态字寄存器,由条件码标志(OF、SF、ZF、AF、PF、CF)和控制标志(DF、IF、TF)构成。

  11 10 9  8 7  6    4    2    0

  ─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐

  │OF│DF│IF│TF│SF│ZF│ │AF│ │PF│ │CF│

  ─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

  PTR∶ 修改属性运算符。用来明确指出变量、标号或地址表达式的类型属性( 只在所在的指令内有效)。类型放在PTR 之前,可以是BYTE、WORD、 DWORD、NEAR、FAR。

  PUBLIC∶①伪指令——段定义(组合类型)。该段与其它模块中说明为PUBLIC类型的同名同'类别'段组合起来,形成一个物理段(小于等于 64K),公用一个段基址,②伪指令——定义全局符号。表示该模块中定义的哪些符号常量、变量、标号以及过程名(几个模块公用的过程一般都是FAR 过程)等可以被其他模块所引用。

  PURGE∶ 宏指令——取消宏定义。

  PUSH∶指令助记符——进栈。把寄存器,段寄存器中的一个字数据压入堆栈。高8位先进,SP减1;低8位后进,SP再减1。

  PUSHF∶ 指令助记符——把标志寄存器的内容压入堆栈。在子程序调用和中断服务中可用来保护标志位(恢复用POPF)。

  RCL∶ 指令助记符——带进位循环左移。

  格式为:RCL 目的操作数,1

  或RCL 目的操作数,CL  (其中CL中存放的是移动次数)

  ┌─┐  ┌───────────────┐

  ┌│CF│← │ ←───────────── │←┐

  │└─┘  └───────────────┘ │

  └───────────────────────┘

  RCR∶ 指令助记符——带进位循环右移。

  ┌───────────────┐ ┌─┐

  ┌→│ ─────────────→ │→│CF│─┐

  │ └───────────────┘ └─┘ │

  └───────────────────────┘

  RECORD∶伪指令——设计一个单字节或双字节的记录格式。指令格式为,

  记录名 RECORD 字段名1:=表达式,字段名2:=表达式 ……

  记录定义后,必须利用初始化记录的方法来定义存储器变量,格式为,

  变量名 记录名 <表达式,表达式,……>

  或变量名 记录名 数量DUP(<表达式,……>)

  REP∶ 指令助记符——重复前缀。它可以使串指令反复执行(CX不等于0 就执行),每执行一次,CX的内容减1 。

  REPE∶指令助记符——重复前缀。当两串相等,即ZF=1时 ,它可以使串指令反复执行(CX不等于0 就执行),每执行一次,CX的内容减1 。(与REPZ完全一样)

  REPNE∶ 指令助记符——重复前缀。当两串不相等,即ZF=0时, 它可以使串指令反复执行(CX不等于0 就执行),每执行一次,CX的内容减1 。(与REPNZ完全一样)

  REPNZ∶ 指令助记符——重复前缀。当两串不相等,即ZF=0时, 它可以使串指令反复执行(CX不等于0 就执行),每执行一次,CX的内容减1 。(与REPNE完全一样)

  REPT∶宏指令——重复块(以ENDM结束)。

  格式为: REPT 重复次数

  重复块

  ENDM

  这种宏指令用于确定重复次数。

  REPZ∶指令助记符——重复前缀。当两串相等,即ZF=1时, 它可以使串指令反复执行(CX不等于0 就执行),每执行一次,CX的内容减1 。(与REPE完全一样)

  RET∶ 指令助记符——返回。

  一、段内返回。先将栈顶的字送入IP,然后SP增2 。若带立即数,SP再加立即数(丢弃一些在执行CALL之前入栈的参数)。

  二、段间返回。栈顶的字送入IP后(SP增 2),再将栈顶的字送入CS,SP再增2 。若带立即数,则SP再加立即数。

  ROL∶ 指令助记符——循环左移。

  格式为:ROL 目的操作数,1

  或ROL 目的操作数,CL  (其中CL中存放的是移动次数)

  ┌─┐  ┌───────────────┐

  │CF│←┬│ ←───────────── │←┐

  └─┘ │└───────────────┘ │

  └──────────────────┘

  ROR∶ 指令助记符——循环右移。

  ┌───────────────┐  ┌─┐

  ┌→│ ─────────────→ │┬→│CF│

  │ └───────────────┘│ └─┘

  └──────────────────┘

  SAHF∶指令助记符——将AH 寄存器的内容送入标志寄存器(PSW)的低字节中,标志寄存器高八位保持不变。

  SAL∶ 指令助记符——带符号数的算术左移。经常用来乘以2。

  格式为: SAL 目的操作数,1

  当移位次数大于 1时,则移位次数应预先置于CL寄存器中。

  格式为: SAL 目的操作数,CL

  ┌─┐ ┌───────────────┐

  │CF│←│ ←───────────── │← 0

  └─┘ └───────────────┘

  如果符号位发生变化时,就将 1送到OF标志,表示移位前操作数的最高位与移位后的最高位不同。

  SAR∶ 指令助记符——带符号数的算术右移。符号位保持不变。经常用来除以2。当移位次数大于 1时,则移位次数应预先置于CL寄存器中。

  ┌───────────────┐ ┌─┐

  ┌→│ ─────────────→ │→│CF│

  │ └───────────────┘ └─┘

  └──┘

  SBB∶ 指令助记符——带借位减法(减去CF的值)。用于多字节减法运算。两高位字相减,并减去低位的借位CF。

  SCAS∶指令助记符——串搜索(扫描)。通常用SCASB或SCASW。

  SCASB∶ 指令助记符——字节串扫描(搜索)。用AL寄存器中的内容与由ES段DI指定的一个字节数据进行比较(减),若相等(结果为0) ,ZF=1 。并依方向标志DF的值修改DI中的地址,即DF=0 ,地址加1 ;DF=1 ,地址减 1。

  SCASW∶ 指令助记符——字串扫描(搜索)。 用AX寄存器中的内容与由ES段DI 指定的一个字数据进行比较(减),若相等(结果为0) ,ZF=1 。并依方向标志DF的值修改DI中的地址,即DF=0 ,地址加2 ;DF=1 ,地址减 2。

  SEG∶ 数值返回运算符。其加在一个变量名或标号前面,返回的数值是该变量名或标号所在的段基址(段寄存器的内容)。

  SEGMENT∶ 段定义伪指令 。格式为 段名 SEGMENT [定位方式][组合方式]['类别']。在定义段的时候,还可以在SEGMENT 语句中给出该段的类别,类别名是一个用单括号括起来的字符串。进行连接处理时,LINK程序把类别名相同的所有段放在连续的存储区域内。同类的各个段在连接时,先出现的在前,后出现的在后。

  SF∶Sign Flag, 符号标志,在标志寄存器的第7字节.记录运算结果的符号,结果为负时置1。

  SHL∶

  一、算术运算符——左移(移1位相当于乘以2)。

  二、指令助记符——无符号数的逻辑左移。经常用来乘以2。 当移位次数大于1 时,则移位次数应预先置于CL寄存器中,写成“SHL OPD CL”。

  ┌─┐ ┌───────────────┐

  │CF│←| ←───────────── │← 0

  └─┘ └───────────────┘

  SHORT∶ 属性运算符(操作符)。用来指定JMP 指令中转向地址的属性,指出转向(目标)地址与本指令地址的字节距离在-128到+127之间。

  SHR∶

  一、算术运算符——右移(移1位相当于除以2)。

  二、指令助记符——无符号数的逻辑右移。经常用来除以2。 当移位次数大于 1时,则移位次数应预先置于CL寄存器中,写成“SHR …,CL”。

  ┌───────────────┐ ┌─┐

  0→ │ ─────────────→ │→│CF│

  └───────────────┘ └─┘

  SI∶Source Index,源变址寄存器。与DS联用,用来确定数据段中某一存储单元的偏移地址。在串处理指令中,SI指出源操作数的地址,隐含段为当前的数据段。

  SIZE∶数值返回运算符。其加在一个变量前面,返回的是数组变量所占的总字节数(LENGTH和TYPE返回值的乘积)。

  SP∶Stack Pointer,堆栈指针寄存器。可以与SS寄存器(决定堆栈的起始地址)联用。SP确定了栈顶的偏移量,始终指向最后推入堆栈的信息所在的单元。 8086的堆栈是下推式的,随着推入堆栈的内容增加,SP的值减小,直至为0。在对SP设置初值(MOV SP,im)时,要考虑所用堆栈的大小。

  SS∶Stack Segment,堆栈段寄存器。 用来存放堆栈段的起始地址(高16位)。

  STACK∶ 伪指令——段定义(组合类型)。指定该段在运行时为堆栈段的一部分。被连接的程序中必须至少有一个STACK 段。初始化时,SS指向第一个遇到的STACK段。

  STC∶ 指令助记符——标志(进位)设置。设置CF=1。

  STD∶ 指令助记符——建立方向标志。使DF=1 。这样,当执行字节串操作指令时,地址自动减1 ;当执行字串操作指令时,地址自动减2 。

  STI∶ 指令助记符--中断允许标志设置。设置IF=1。

  STOS∶指令助记符——保存串。通常用STOSB或STODW。

  STOSB∶ 指令助记符——字节保存(往字节串中存数)。把AL寄存器的内容保存在由 DI 指定的附加段的存储单元中,并根据DF的值修改DI中的地址。即DF=0时 ,地址加1 ;DF=1 时,地址减1 。该指令带重复前缀可将一片连续的存储字节置相同的值。

  STOSW∶ 指令助记符——字保存(往字串中存数)。 把AX寄存器的内容保存在由 DI 指定的附加段的存储单元中,并根据DF的值修改DI中的地址。即DF=0时 ,地址加2 ;DF=1 时,地址减2 。

  STRUC∶ 伪指令——设计一个结构。

  例 定义名为S的结构如下 S STRUC

  FL1 DB 1,2

  FL2 DB 'DOBOSKY'

  S ENDS

  然后定义一个类型为 S的变量 DBAREA S < ,'ANY'>

  DBAREA就是一个类型为S 的结构变量,它包含二个字段,FL1 是二个字节,初值是1和2;FL2 是七个字节,初值是'ANY' 。

  SUB∶ 指令助记符——减法。

  SUBTTL∶伪指令。为程序指定一个小标题,并打印在每一页的标题之后。

  TEST∶指令助记符——测试。对二操作数进行“与”操作,根据结果设置状态标志位,但不改变原操作数。

  例如 TEST AL,01H(检查AL的第0位,是0则ZF=1; 是1则ZF=0。随后可用JNE、JZ 等指令转移到某一标号)

  TF∶Trap Flag, 陷阱(跟踪)标志,在标志寄存器的第8字节,用于单步方式操作,当TF位为1 时,每条指令执行后 CPU自动产生一个类型为1的中断,使程序单步执行,这就能跟踪一个程序具体的执行过程,检查每一步运行结果,确定出错的位置。如果TF=0,则CPU处于连续工作方式。

  THIS∶修改属性运算符。该运算符(借助于EQU) 可以指定一个操作数的段地址和偏移地址与下一个存储单元相同。

  例一 DA_BYTE EQU THIS BYTE

  DA_WORD DW 20H DUP(0)

  DA_BYTE(字节类型)的段地址和偏移地址与 DA_WORD(字类型)完全相同。可以用变量名DA_BYTE 以字节形式访问DA_WORD 数组元素某字单元。

  例二 JMP_FAR  EQU THIS FAR

  JMP_NEAR:MOV AL,30H

  当从段内某指令调用这个程序段时,可用标号JMP_NEAR,而从另一个代码段调用时,只要使用标号JMP_FAR即可。

  TITLE∶ 伪指令。在每一页上打印标题。

  TYPE∶数值返回运算符。其加在一个变量名前面,返回的数值是该变量的类型属性(1:BYTE—占一个字节;2:WORD—占两个字节;4:DWORD —占四个字节;8:QWORD —占八个字节;10:TWORD —占十个字节);若加于某标号之前时,返回的数值是这个标号的距离属性(-1:NEAR—标号作段内转移指令的目标地址;-2:FAR—标号作段间转移或调用指令的目标地址)。

  注:有的教材说近标号的类型值为0FFFFH,远标号的类型值为0FFFEH.

  WAIT∶指令助记符——等待。使处理机置于空闲状态,但它定期检查TEST信号,若TEST=0, 程序就从WAIT的下一条指令开始执行。在等待时,处理器也接受中断,不过从中断返回后,又进入等待状态。

  WIDTH∶ 运算符。用于返回记录或记录字段所占的位数。

  WORD∶伪指令——段定义(定位类型方式)。本段从一个偶字节开始,即段起始地址的最后一位二进制数一定是0 。这种定位方式适用于数据项类型是字的数据段。

  XCHG∶指令助记符——数据交换。操作数可以是寄存器或存储单元,但不能是段寄存器或立即数,也不能同时为两个存储器操作数。

  XLAT∶指令助记符——一个字节的查表转换。专门用于AL(其内容是字节表的下标)和字节表中某一存储单元之间执行数据转换。表的长度为256 字节,定义为: 表名 DB '字符串' 。表头地址先放在BX寄存器中(MOV BX,OFFSET 表名)。指令(XLAT)执行时,根据AL中预先设置的偏移地址,把需要查询的数据从字节表的某一存储单元传送到AL中(AL=[BX+AL])。该指令可以将一种代码转换成另一种代码。

  XOR∶ 逻辑运算符(在语句的操作数部分)或逻辑操作指令助记符(在语句的操作码部分)——按位异或(当对应位不同时结果为1)。当一个操作数自身作“异或”,结果为0 ,且使CF为0 。这是使操作数置0 的常用的有效方法。例:XOR AX,AX 可使AX清0 。

  ZF∶Zero Flag,零标志,在标志寄存器的第6字节.运算结果为0时置1。