指令系统
2020-10-10 10:01:57 0 举报
AI智能生成
汇编语言的指令系统,每种指令的不同分类以及相应的格式 功能 操作数 标志和用途等
作者其他创作
大纲/内容
数据传送指令
通用数据传送指令
MOV传送指令
格式: MOV Seg/Reg/Mem, Seg/Reg/Mem/Imm
功能:把源操作数(第二操作数)的值传给目的操作数(第一操作数)
操作数:不允许使用立即数和CS段寄存器,且两操作数数据类型相同
用途:用于传送数据,使目的操作数的值被改变,而源操作数的值不变。
XCHG交换指令
格式:XCHG OPD,OPS
功能:可以将一个字节或一个字的源操作数与目的操作数相交换。
操作数:段寄存器和立即数不能作为一个操作数。
用途:将源操作数与目的操作数进行交换
堆栈指令
进栈指令PUSH
格式:PUSH Seg/Reg/Mem
功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2。
操作数:源操作数可以是CPU内部的16位通用寄存器、段寄存器和存储器操作数(所有寻址方式)
出栈指令POP
格式:POP Seg/Reg/Mem
功能:将栈顶元素弹出送至某一寄存器、段寄存器(除CS外)或存储器,堆栈指针加2。
所有寄存器进栈指令PUSHA
格式:PUSHA
功能:16位通用寄存器依次进栈,次序为AX、CX、DX、BX,指令执行前的SP、BP、SI、DI。
指令执行后(SP)-16→(SP)仍指向栈顶。
指令执行后(SP)-16→(SP)仍指向栈顶。
所有寄存器出栈指令POPA
格式:POPA
功能:16位通用寄存器依次出栈,次序为DI、SI、BP、SP,指令执行前的BX、DX、CX、AX。
指令执行后(SP)+16→(SP) 仍指向栈顶。
指令执行后(SP)+16→(SP) 仍指向栈顶。
累加器专用传送指令
输入指令IN
格式:
长格式:IN AL, PORT (字节)
IN AX, PORT (字)
IN AX, PORT (字)
短格式:IN AL, DX (字节)
IN AX, DX (字)
IN AX, DX (字)
用途:是从端口中读入一个字节或字,并保存在寄存器AL或AX中。
功能:使用累加器AX或AL传送信息
输出指令OUT
格式:
长格式:OUT PORT, AL (字节)
OUT PORT, AX (字)
OUT PORT, AX (字)
短格式:OUT DX, AL (字节)
OUT DX, AX (字)
OUT DX, AX (字)
用途:把累加器的内容送往指定的外设存储器
功能:把寄存器AL或AX的内容输出到指定端口
换码指令XLAT
格式:XLAT OPR 或 XLAT
操作数:有两个隐含操作数BX和AL。
功能:把BX的值作为内存字节数组首地址、下标为AL的数组元素的值传送给AL。
地址传送指令
有效地址送寄存器指令LEA
格式:LEA REG,OPS
功能:将源操作数的有效地址送到指定的寄存器中。
操作数:源操作数必须是一个内存操作数;目的操作数必须是一个16位的通用寄存器。
用途:用来建立串操作指令所须的寄存器指针。
指针送寄存器及相应段寄存器指令LDS和LES
LDS
格式:LDS REG,OPS
功能:完成一个地址指针的传送。
操作数:源操作数是一个内存操作数,目的操作数是一个基址寄存器或变址寄存器。
LES
格式:LES REG,OPS
标志寄存器传送指令
标志送AH指令LAHF
格式:LAHF
功能:将标志寄存器的SF、ZF、AF、PF和CF(低8位)传送至AH寄存器的指定位
AH送标志寄存器指令SAHF
格式:SAHF
功能:将寄存器AH的指定位,送至标志寄存器的SF、ZF、AF、PF和CF(低8位)
PUSHF
格式:PHSHF
功能:将标志寄存器压入堆栈顶部,同时修改堆栈指针
POPF
格式:POPF
功能:将堆栈顶部的一个字,传送到标志寄存器,同时修改堆栈指针
算数运算指令
加法指令
ADD加法指令
格式:ADD DST,SRC
功能:将目的操作数与源操作数相加,结果存入目的地址中,源地址的内容不改变。
ADC带进位的加法指令
格式:ADC DST,SRC
功能:将目的操作数加源操作数再加低位进位,结果送目的地址
INC加一指令
格式:INC OPR
功能:将目的操作数加1,结果送目的地址。
减法指令
SUB减法指令
格式:SUB DST,SRC
功能:目的操作数减去源操作数,结果存于目的地址,源地址的内容不变。
SBB带借位减法指令
格式:SBB DST,SRC
功能:目的操作数减源操作数再减低位借位CF,结果送目的地址
DEC减一指令
格式:DEC OPR
功能:将目的操作数减1,结果送目的地址。
NEG求补指令
格式:NEG OPR
功能:改变操作数的符号可用于取操作数的绝对
CMP比较指令
格式: CMP OPR1, OPR2
功能:目的操作数减源操作数,结果只影响标志位,不送入目的地址。
乘法指令
MUL无符号数乘法指令
格式:MUL SRC
功能:若是字节数据相乘,(AL)与SRC相乘得到字数据存入AX中
若是字数据相乘,则(AX)与SRC相乘得到双字数据,高字存入DX、低字存入AX中。
若是字数据相乘,则(AX)与SRC相乘得到双字数据,高字存入DX、低字存入AX中。
IMUL带符号数乘法指令
格式:IMUL SRC
操作数:目的操作数必须是累加器,字运算为AX,字节运算为AL
除法指令
DIV无符号数除法指令
格式:DIV SRC
功能:字节操作时,16位被除数在AX中,8位除数为源操作数,结果8位商在AL中,8位余数在AH中
字操作时,32位被除数在DX:AX中,16位除数为源操作数,结果16位商在AX中,8位余数在DX中
字操作时,32位被除数在DX:AX中,16位除数为源操作数,结果16位商在AX中,8位余数在DX中
IDIV带符号数除法指令
格式:IDIV SRC
功能:与DIV相同
操作数:带符号数,商和余数也是带符号数,余数的符号和被除数的符号相同
类型转换指令
字节扩展为字指令CBW
格式:CBW
功能:将(AL)符号扩展到(AH)
字扩展为双字指令CWD
格式:CWD
功能:将(AX)符号扩展到(DX)
十进制调整指令
加法的十进制调整指令DAA
格式:DAA
功能:把AL中存放的加法的和调整为压缩的BCD码
减法的十进制调整指令DAS
格式:DAS
加法的ASCII调整指令AAA
格式:AAA
功能:如果AL的低4位大于9或AF=1,则:
AL=AL+6,AH=AH+1,AF=CF=1, 且AL高4位清零。
否则:CF=AF=0,AL高4位清零。
AL=AL+6,AH=AH+1,AF=CF=1, 且AL高4位清零。
否则:CF=AF=0,AL高4位清零。
减法的ASCII调整指令AAS
格式:AAS
功能:如果AL的低4位大于9或AF=1,则:
AL=AL-6,AH=AH-1,AF=CF=1,AL高4位清零。
否则:CF=AF=0, AL高4位清零。
AL=AL-6,AH=AH-1,AF=CF=1,AL高4位清零。
否则:CF=AF=0, AL高4位清零。
逻辑指令
逻辑运算指令
AND逻辑与指令
格式:AND DST, SRC
功 能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“与操作”,操作结果存入目标操作数中。
用途:该指令用于清除目的操作数中与源操作数置0的对应位
OR逻辑或指令
格式:OR DST, SRC
功 能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑"或操作",操作结果存入目标操作数中。
用途:该指令用于设置目的操作数中与源操作数置1的对应位
NOT逻辑非指令
格式:NOT OPR
功能:将目的地址中的内容逐位取反后送入目的地址。
操作数:OPR不为立即数
XOR异或指令
格式:XOR DST,SRC
功能:把源操作数中的每位二进制与目的操作数中的相应二进制进行逻辑“异或操作”,操作结果存入目标操作数中。
用途:该指令用于将目的操作数中与源操作数置1的对应位取反
TEST测试指令
格式:TEST OPR1,OPR2
功能:把二个操作数进行逻辑“与”操作,并根据运算结果设置相应的标志位,但并不保存该运算结果
移位指令
移位指令
逻辑左移指令SHL
格式:SHL OPD,CNT
逻辑右移指令SHR
格式:SHR OPD,CNT
算数左移指令SAL
格式:SAL OPD,CNT
功能:把目的操作数的低位向高位移,空出的低位补0
算数右移指令SAR
格式:SAR OPD,CNT
功能:把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补
循环移位指令
循环左移指令ROL
格式:ROL OPD,CNT
循环右移指令ROR
格式:ROR OPD,CNT
带进位的循环左移指令RCL
格式:RCL OPD,CNT
带进位的循环右移指令RCR
格式:RCR OPD,CNT
串处理指令
重复指令前缀REP
格式:REP MOVS / STOS / LODS
功能:是重复其后的字符串操作指令,重复的次数由CX来决定
串指令
MOVS
格式:
MOVS DST,SRC (需在操作数中表明数据格式)
MOVSB (字节)
MOVSW (字)
MOVS DST,SRC (需在操作数中表明数据格式)
MOVSB (字节)
MOVSW (字)
功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中去,并自动修改指针,使之指向下一个字节(或字)存储单元。
串比较指令CMPS
格式:CMPSB
CMPSW
CMPSW
功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,并根据相减的结果设置标志,
串搜索指令SCAS
格式: SCASB
SCASW
SCASW
功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位
STOS
格式:
STOS DST (需在操作数中表明数据格式)
STOSB (字节)
STOSW (字)
STOS DST (需在操作数中表明数据格式)
STOSB (字节)
STOSW (字)
功能:将AL或AX中的数据送入EI:DI所指的目的串中的字节(或字)存储单元中。
LODS
格式:
LODS SRC (需在操作数中表明数据格式)
LODSB (字节)
LODSW (字)
LODS SRC (需在操作数中表明数据格式)
LODSB (字节)
LODSW (字)
功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中
串输入指令INS
格式:
INSB ;字节串输入
INSW ;字串串输入
INSB ;字节串输入
INSW ;字串串输入
功能:将由DX寄存器指定的I/O端口中的字、字节传送到附加段中的目的串中,并根据DF和数据类型来改变目的变址寄存器的方向内容。
串输出指令OUTS
格式:
OUTSB ;字节串输出
OUTSW ;字串串输出
OUTSB ;字节串输出
OUTSW ;字串串输出
功能:将由源串中的字、字节传送到在DX寄存器指定的I/O端口中,并根据DF和数据类型来改变源变址寄存器的方向内容
操作数是主存中连续存放的数据串(String)——即在连续的主存区域中,字节或字的序列
控制转移指令
无条件转移、调用和返回指令
无条件转移指令JMP
段内直接短转移:JMP SHORT OPR
段内直接近转移:JMP NEAR PTR OPR
段内间接转移: JMP WORD PTR OPR
功能:将一个寄存器或主存字单元内容送入IP寄存器,作为新的指令指针,但不修改CS寄存器的内容。
段间直接远转移:JMP FAR PTR OPR
功能:将标号所在段的段地址作为新的CS值,标号在该段内的偏移地址作为新的IP值;这样,程序跳转到新的代码段执行
段间间接转移: JMP DWORD PTR OPR
功能:用一个存储单元表示要跳转的目标地址。这个目标地址存放在主存中连续的字单元中的,低位字送IP寄存器,高位字送CS寄存器
调用和返回指令
条件转移指令
格式:JXX LABEL ;条件满足,发生转移:IP←IP+位移量
;条件不满足,顺序执行。
;条件不满足,顺序执行。
循环控制指令
LOOP
格式: LOOP 短标号
相等/为零循环指令 LOOPE/LOOPZ
格式: LOOPE/ LOOPZ 短标号
不相等/不为零循环指令LOOPNE/LOOPNZ
格式: LOOPNE/ LOOPNZ 短标号
子程序
子程序调用指令 CALL
段内直接调用
格式:CALL DST
段内间接调用
格式:CALL DST
段间直接调用
格式:CALL DSt
段间间接调用
格式:CALL DSt
返回指令 RET
段内近返回
格式:RET
段内带立即数近返回
格式:RET EXP
段间远返回
格式:RET
段间带立即数远返回
格式:RET EXP(同段内带立即数返回)
中断
中断指令 INT
格式:INT TYPE
溢出指令 INTO
格式:INTO
中断返回指令 IRET
格式:IRET
处理器控制指令
标志处理指令
CPU控制类指令
空操作指令 NOP
暂停指令 HLT
换码指令ESC
等待指令 WAIT
封锁数据指令LOCK
0 条评论
下一页
为你推荐
查看更多