80X86 汇编指令.docx
- 文档编号:7621732
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:18
- 大小:32.96KB
80X86 汇编指令.docx
《80X86 汇编指令.docx》由会员分享,可在线阅读,更多相关《80X86 汇编指令.docx(18页珍藏版)》请在冰豆网上搜索。
80X86汇编指令
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∶伪指令。
用于关闭列表文件输出。
%OUT∶伪指令。
在汇编时显示其后的信息。
AAA∶指令助记符——加法运算后的ASCII调整(非压缩的BCD码)。
无操作数,调整的加法结果在AL中。
AF和CF的状态改变说明结果大于9。
检查AL的低四位是否为合法的BCD码(0-9),如果合法就清除AL的高四位以及AF和CF标志。
当AL的低四位表示的数大于9或AF=1时,将AL加6,AH加1,并使AF和CF置位,清除AL中的高四位。
任何一个A—F之间的数加上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或AF=1时,将AL减6,AH减1,并使AF和CF置1,清除AL中的高四位。
ADC∶指令助记符——带进位加法(把CF的值加上)。
用于多字节数的高字节加法运算。
ADD∶指令助记符——加法。
参与运算的二操作数应该同时带符号或不带符号,并且长度一致。
操作数可以是寄存器、存储器或立即数,但不能同时为存储单元或段寄存器,立即数也不能作为目的操作数。
AF∶AuxiliaryCarryFlag,辅助进位标志,在标志寄存器的第4字节。
记录运算时第3位(半个字节)产生的进位值(置1)。
该标志用于对BCD码的加减运算中。
AND∶逻辑运算符(在语句的操作数部分,汇编时完成)或逻辑操作指令助记符(在语句的操作码部分,其运算在执行指令时完成)——按位与。
只有相“与”的两位全为1,结果才为1。
某数自己与自己相“与”,操作数不变,进位标志CF清0。
ASSUME∶段定义伪指令——设定分段寄存器,格式为"ASSUME段寄存器:
段名[,段寄存器名:
段名]"。
在代码段的开始用来指出所有段与段寄存器的关系,确定某个段分配给哪个段寄存器。
ASSUME只指出各段寄存器的分配,并没有把段地址装入相应的段寄存器。
为此,在代码段中,还必须把数据段和附加数据段的段地址装入相应的寄存器中。
AT∶伪指令——段定义(组合类型)。
该段按绝对地址定位,段基址为数值表达式的值,位移量为0。
不能指定代码段。
AX∶Accumulator,通用寄存器,算术运算的主要寄存器。
另外,所有的I/O指令都使用这一寄存器与外部设备传送信息。
其中AH是高8位,AL是低8位。
B∶数据类型后缀,表示二进制常量。
BP∶BasePointer,基址指针寄存器。
可以与SS寄存器联用来确定堆栈中任一存储单元的地址。
它指示堆栈中任一单元的偏移量。
非堆栈进出指令要访问堆栈,只能通过BP进行。
BX∶Base,通用寄存器。
在计算存储器地址时,经常用作基址寄存器。
其中BH是高8位,BL是低8位。
BYTE∶伪指令——段定义(定位类型)。
本段起始单元可以从任一地址开始,段间不留空隙,存储器利用率最高。
CALL∶指令助记符——程序调用。
一、段内直接调用:
格式为"CALL过程名"。
先把IP内容(子程序的返回地址,即CALL下一条指令的地址)压入堆栈,然后IP转移到子程序的入口地址。
二、段内间接调用:
格式为"CALLWORDPTROPD"。
先把IP的内容压入堆栈,然后IP指向(转到)由寻址方式决定的EA。
三、段间直接调用。
格式为"CALLFARPTR过程名"。
先把CS和IP的内容压入堆栈,然后在CS中装入新的段地址,IP指向段内偏移地址。
四、段间间接调用:
格式为"CALLDWORDPTROPD"。
先把CS和IP的内容压入堆栈,然后把寻址方式确定的有效地址所指定的一个字储存单元的内容送入IP,下一个字存储单元的内容(段首址)送入CS。
CBW∶指令助记符——字节转换为字。
把AL中字节的符号扩展到AH中,若(AL)的最高有效位为0,则(AH)=00;若(AH)的最高有效位为1,则(AH)=0FFH。
CF∶CarryFlag,进位标志,在标志寄存器的第0字节,记录运算时从最高有效位产生的进位值(置1)。
作加法时,CF位可以用来表示无符号数的溢出(有符号数溢出用OF表示)。
CLC∶指令助记符——标志(进位)设置。
设置CF=0。
CLD∶指令助记符——清方向标志。
使DF=0。
这样,当执行字节串操作指令时,地址自动增1;当执行字串操作指令时,地址自动增2。
CLI∶指令助记符——中断允许标志设置。
设置IF=0。
CMC∶指令助记符——标志(进位)设置。
CF取反。
CMP∶指令助记符——比较。
对于“CMPAX,BX”,如果是两个无符号数比较(减),若结果没有产生借位,即CF=0,则(AX)≥(BX);若CF=1,则(AX)〈(BX)。
如果是两个带符号数比较,则当没有溢出(OF=0)时,若SF=0,则(AX)〉(BX)若SF=1,则(AX)〈(BX)当产生溢出(OF=1)时,若SF=0,则(AX)〈(BX)多SF=1,则(AX)〉(BX)简炼的结论,若OF异或SF=0,则(AX)〉(BX)若OF异或SF=1,则(AX)〈(BX)
CMPS∶指令助记符——串比较。
通常用CMPSB或CMPSW。
CMPSB∶指令助记符——串比较。
将DS段SI指出的字节数据减去ES段DI指出的字节数据(不保存结果),然后根据相减结果设置标志位(两个数据相等,则ZF=1)。
并由方向标志DF修改SI和DI中的地址,即当DF=0时,地址都加1;当DF=1时,地址都减1。
CMPSW∶指令助记符——串比较。
将DS段SI指出的字数据减去ES段DI指出的字数据(不保存结果),然后根据相减结果设置标志位(两个数据相等,则ZF=1)。
并由方向标志DF修改SI和DI中的地址,即当DF=0时,地址都加2;当DF=1时,地址都减2。
COMMON∶伪指令——段定义(组合类型)。
该段与其它模块中所有也说明为COMMON的同名,同'类别'段共享相同的存储区域,即这些段的起始地址都相同,共享的公共存储区域的长度是各模块同名段中最大的长度。
使用COMMON方式可以使不同模块中的不同变量或标号作用于相同的存储单元。
CS∶CodeSegment,代码段寄存器,存放当前运行的代码段起始地址(高16位)。
代码段存放当前正在运行的程序。
CWD∶指令助记符——字转换为双字。
把AX中字节的符号扩展到DX中,若(AX)的最高有效位为0,则(DX)=0000;若(AX)的最高有效位为1,则(DX)=0FFFFH。
CX∶Count,通用寄存器。
在循环和串处理指令中用作隐含的计数器。
其中CH是高8位,CL是低8位。
DAA∶指令助记符——加法的十进制调整(压缩的BCD码)。
无操作数,调整的加法结果在AL中。
调整方法是,如果AL的低4位大于9或AF=1,则加6到AL并置AF=1;如果AL的高4位大于9或CF=1,则加60H到AL,并置CF=1。
DAS∶指令助记符——减法的十进制调整(压缩的BCD码)。
调整方法是,若AF=1或AL的低4位为A—F,则(AL)减06H,且AF置1;若CF=1或AL的高4位为A—F,则(AL)减60H,且CF置1。
DB∶伪指令——定义字节。
其后的每个操作数占用一个字节。
若是字符串,必须用引号''括起来,字符串不能超过255个字符,字符串自左至右以字符的ASCII码按地址递增的顺序依次存放。
DD∶伪指令——定义双字。
其后的每个操作数占用二个字(低字在前)。
DD还可以把其后的变量或标号的偏移地址和所在段首址存入存储器内指定的双字单元(即DD前面的变量)中,第一个字中存放DD后的变量的偏移地址,第二个字中存放该变量所在段的段首址。
DEC∶指令助记符——减1。
操作数可以是寄存器或存储器单元,但不能是段寄存器或立即数。
DF∶DirectionFlag,方向标志,在标志寄存器的第10字节,在串处理指令中控制处理信息的方向。
DF为1时是反向,每次操作后使SI和DI减量(这样就使串处理从高地址向低地址方向处理);当DF为0时是正向,使SI和DI增量。
DI∶DestinationIndex,目的变址寄存器。
与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("MOVDX,0")。
DQ∶伪指令——定义四字。
其后的每个操作数占用四个字。
DS∶DataSegment,数据段寄存器。
存放数据段的起始地址(高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之间的程序块。
END∶伪指令——程序模块结束。
主程序模块结束,END后要接标号(存储器地址),指出程序开始执行的地址。
子程序不用。
ENDIF∶伪指令——条件(结尾)。
ENDM∶宏指令——①宏定义(结尾)。
②重复块(结尾)。
ENDP∶伪指令——过程(子程序)定义(结尾)。
ENDS∶伪指令——段定义或结构定义(结尾)。
ES∶ExtraSegment,附加段寄存器。
用于存放附加段的起始地址(高16位)。
附加段是一个辅助的数据区,也是串处理指令的目的操作数据存放区。
ESC∶指令助记符——交权给外部协处理器。
是在大模式下使用的一条指令,它可以使外部协处理器从8086/8088指令流中获得一个操作码和一个操作数,并使用8086/8088的寻址方式。
指令后的操作码是一个6位的立即数,其中3位用来指明哪一个协处理器工作,另外3位指明这个处理器执行什么指令。
随后的源操作数若是寄存器,则8086/8088直接将其内容放置在数据总线上;如果这个源操作数是存储变量,则8086/8088从存储器中取出操作数并放到数据总线上,从而使外部协处理器可以获取这个操作数,对它进行运算。
EQ∶关系运算符——相等。
若满足条件,输出结果为全1(所有的位),否则为全0。
EQU∶等价伪指令。
格式为"符号名EQU表达式".EQU可以把它前面的符号定义为一个常量或一个能求出常数值的表达式,或定义为别的符号名,甚至定义为一条可执行的命令。
不得重复定义。
例一,"新变量名EQUTHISDWORD",该语句将紧跟其后的变量重新定义为双字类,以新变量名命名。
数据存储区首址不变。
例二,"新变量名EQUWORDPTR旧变量名",该语句将旧变量重新定义为字类型,以新变量名命名。
数据存储区首址不变。
EVEN∶伪指令。
它使此语句后面的程序或数据块的起始地址为偶数。
EXTRN∶伪指令——定义外部符号。
格式是EXTRN符号名:
类型。
表示本模块中需要引用但却是在其他模块中定义说明为PUBLIC的那些符号(符号常量、变量、标号以及过程名)。
符号类型必须与他们在其他模块定义时的符号类型保持一致。
FLAGS∶标志寄存器(即PSW)。
GE∶关系运算符——大于等于。
若满足条件,输出结果为全1(所有的位),否则为全0。
GROUP∶伪指令——分组。
把模块中若干不同名的段集合成一个组,并赋予一个组名,使它们都装在一个物理段中(64KB)。
可以得到较紧凑的代码,组内各段间的跳转都可以看作是段内跳转。
格式是组名GROUP<段名1,段名2,……>
GT∶关系运算符——大于。
若满足条件,输出结果为全1(所有的位),否则为全0。
H∶数据类型后缀,表示十六进制常量。
HIGH∶字节分解运算符(操作符)。
用来从运算对象(一个数或地址表达式)中分离出(取)高字节。
HLT∶指令助记符——停机。
该指令使处理器处于暂停状态,该状态可以由复位信号、非屏蔽中断请求信号以及IF=1情况下可屏蔽中断信号清除。
IDIV∶指令助记符——带符号数除法。
对于字节操作,16位被除数(若被除数为8位,需用符号扩展的方法,即用CBW指令扩展到16位)放在AX中,8位除数为源操作数,相除结果,8位商在AL中,而8位余数在AH中。
对于字操作,32位被除数(若被除数为16位,用CWD指令扩展到32位)放在DX和AX中,16位除数为源操作数,相除结果,字(16位)商在AX中,字余数在DX中。
余数的符号必须和被除数的符号相同。
IF∶InterruptFlag,①中断标志,在标志寄存器的第9字节,当IF为1时,允许中断,即CPU响应外设的中断请求。
②伪指令——条件(表达式的值不等于0为真)。
若条件成立,则汇编整个程序块;但中间若有ELSE命令,则只汇编到ELSE;当条件不成立时,只汇编从ELSE到ENDIF之间的程序块。
IF1∶伪指令——条件(若是第一趟扫描,条件为真)。
IF2∶伪指令——条件(若是第二趟扫描,条件为真)。
IFB∶伪指令——条件(若其后的参数对应的实参存在,为真)。
IFDEF∶伪指令——条件(若其后的符号已定义或被说明为外部符号,则条件为真)。
IFDIF∶伪指令——条件(若两个字符串参数不相同,则条件为真)。
IFE∶伪指令——条件(表达式的值等于0时,条件为真)。
IFIDN∶伪指令——条件(若两个字符串参数相同,则条件为真)。
IFNB∶伪指令——条件(若其后的参数对应的实参不存在,为真)。
IFNDEF∶伪指令——条件(若其后的符号未定义或未被说明为外部符号,则条件为真)。
IMUL∶指令助记符——带符号的整数乘法。
对于字节乘法,(AL)*(源操作数)--->AX; 对于字乘法,(AX)*(源操作数)--->AX和DX; 若结果的高半部分(AH或DX,对应字节和字)是低半部分的符号扩展,则CF=0,OF=0;否则,CF=1,OF=1,表示在AH(对于字节)或DX(对于字)中包含结果的有效值。
IN∶指令助记符——输入。
允许把一个字或字节由输入端口(port)传送到AX或AL。
端口地址可以用直接寻址(INALn),也可用DX间接寻址(INAL,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∶指令助记符——溢出中断。
只有OF=1时才进入溢出中断(IF和TF被改为0)。
IP∶InstructionPointer,控制寄存器——指令指针寄存器。
用来存放代码段中指令的偏移地址。
在程序运行的过程中,它始终指向下一条指令的首地址。
它与CS联用,确定下一条要执行的指令的物理地址。
IP寄存器不能用于算术运算,也不能直接存取,但可以用控制转移指令加以改变。
IRET∶指令助记符——中断返回。
执行该指令时,从栈中退出三个16位的值,分别送IP、CS和标志寄存器。
IRP∶宏指令——重复块(以ENDM结束)。
IRP形参,<实参1,实参2,…>这种宏指令用于带立即数的伪操作。
实参是用户指定的立即数,它的个数就是重复的次数,每重复一次,就用一个实参代替形参。
IRPC∶宏指令——重复块(以ENDM结束)。
IRPC形参,字符串这种宏指令用于带字符串的重复伪操作。
重复次数由字符串中字符个数确定。
每次重复,依次用字符串中的一个字符替代形参,直到字符替代完毕。
JA∶无符号数条件转移指令助记符——(无符号数比较)高于转移(等价JBE)。
CF=0,且ZF=0则转移(段内直接短转移)。
JAE∶无符号数条件转移指令助记符——(无符号数比较)高于或等于转移(等价JNB)。
CF=0,或ZF=1则转移(段内直接短转移)。
JB∶无符号数条件转移指令助记符——(无符号数比较)低于转移(等价JNAE)。
CF=1,且ZF=0则转移(段内直接短转移)。
JBE∶无符号数条件转移指令助记符——(无符号数比较)低于或等于转移(等价JNA)。
CF=1或ZF=1则转移。
JC∶简单条件转移指令助记符——有进位转移。
CF=1则转移(段内直接短转移,产生8位的位移量,即转移地址的偏移量在—128到+127之间)。
JCXZ∶指令助记符——条件转移。
(CX)=0,则转移(段内直接短转移?
)。
JE∶简单条件转移指令助记符——(两数比较)相等转移(同JZ)。
前次操作结果为0,ZF=1则转移(段内直接短转移)。
JG∶有符号数条件转移指令助记符——(有符号数比较)大于转移(等价JNLE)。
SF和OF同号,且ZF=0时转移。
(段内直接短转移)
JGE∶有符号数条件转移指令助记符——(有符号数比较)大于或等于转移(等价于JNL)。
当SF和OF同号,或ZF=1,则转移(段内直接短转移)。
JL∶有符号数条件转移指令助记符——(有符号数比较)小于转移(等价于JNGE)。
当SF和OF异号,且ZF=0时转移(段内直接短转移)。
JLE∶指令助记符——(有符号数比较)小于或等于转移(等价于JNG)。
当SF和OF异号或ZF=1时转移(段内直接短转移)。
JMP∶指令助记符——无条件转移。
无条件转移到指令所指示的目标地址,并从该地址开始执行。
目标地址可以从指令中直接得到,也可以从指令中给定的寄存器或存储器中得到。
一、段内直接短转移JMPSHORT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80X86 汇编指令 80 X86 汇编 指令