汇编指令大全.docx
- 文档编号:6963559
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:24
- 大小:39.05KB
汇编指令大全.docx
《汇编指令大全.docx》由会员分享,可在线阅读,更多相关《汇编指令大全.docx(24页珍藏版)》请在冰点文库上搜索。
汇编指令大全
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位标志出栈.
二、算术运算指令
───────────────────────────────────────
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次.
移位一次时,可直接用**作码.如SHLAX,1.
移位>1次时,则由寄存器CL给出移位次数.
如MOVCL,04
SHLAX,CL
四、串指令
───────────────────────────────────────
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清中断允许位. 六、伪指令 ─────────────────────────────────────── DW定义字(2字节). PROC定义过程. ENDP过程结束. SEGMENT定义段. ASSUME建立段寄存器寻址. ENDS段结束. END程序结束. 详细: 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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 指令 大全
![提示](https://static.bingdoc.com/images/bang_tan.gif)