微机原理指令表V20.docx
- 文档编号:10872177
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:61
- 大小:39.66KB
微机原理指令表V20.docx
《微机原理指令表V20.docx》由会员分享,可在线阅读,更多相关《微机原理指令表V20.docx(61页珍藏版)》请在冰豆网上搜索。
微机原理指令表V20
1
MOV
通用数据传送指令MOV
格式:
MOVdest,src
指令功能:
将操作数src复制传送到操作数dest,即src→dest
备注:
有时MASM不能确定内存操作数的类型,需要用byteptr和wordptr明确指出字节货字节类型
说明:
一:
目的操作数不可以是立即数,源和目的操作数支持所有的寻址方式
二:
(1)所有的MOV传送指令的不改变标致寄存器FR的标志位。
(2)代码段的段基址和偏移地址寄存器CS,IP不能作为目的操作数。
例如“MOVCS,AX”是错误指令。
(3)两个段寄存器间的数据不能直接传送。
例如“MOVDS,SS”就是错误的指令。
(4)立即数不能直接传送给段寄存器。
例如“MOVDS,2000H”就是错误的指令,如果要进行这样的操作,可间接完成
MOVAX,2000H
MOVDS,AX
(5)两个操作数不能同时为内存单元的数据,即内存单元的数据不能直接传送。
例如“MOV[DI],[SI]”就是错误的指令,间接完成:
MOVAX,[SI]
MOV[DI],AX
(6)立即数不能作为目的操作数,例如“MOV1000H,AX”就是错误的指令。
(7)所传送的源和目的的操作数的数据位数必须一致。
例如“MOVBX,AL”就是错误的指令,BX的数据位数为16位,而AL为8位,传送的数据不匹配。
2
PUSH
入栈指令PUSH
格式:
PUSHOPRD
指令功能:
将指定的寄存器或存储单元的内容存入到栈顶
实现压入操作的是PUSH,实现弹出操作指令是POP
注意:
(1)操作数OPRD不可以是立即数;
(2)入栈的数据必须是16位的,且支持所有寻址方式
入栈过程:
第一步:
SP—1→SP,然后操作数的高位字节送至SP所指向的单元;
第二部:
SP—1→SP,然后操作数的低位字节送至SP所指向的单元;
3
POP
出栈指令POP
格式:
POPOPRD
指令功能:
将栈顶的数据复制到指定的寄存器或内存单元中。
注意:
(1)操作数不可以是CS寄存器;
(2)出栈的数据必须是16位的,且支持所有的寻址方式
出栈的顺序与入栈顺序相反,其过程分以下两步:
第一步:
SP所指向单元的数据送至操作数的低位字节,SP+1→SP;
第二部:
SP所指向单元的数据送至操作数的高位字节,SP+1→SP;
4
PUSHF
标志进栈指令PUSHF
指令功能:
将标志寄存器FR的内容存入到栈顶。
注:
指令的执行步骤与PUSHOPRD一致,只不过操作数是16位的标志寄存器FR的内容。
指令执行后,SP寄存器的内容减2,而栈顶字单元的内容就是FR中的数据。
指令执行对标致寄存器各位没有影响。
5
POPF
标志出栈指令POPF
指令格式:
POPF
指令功能:
将SP指向的栈顶字单元的内容送至标志寄存器FR。
注:
指令的执行步骤与POPOPRD一致,指令执行时,首先将SP所指向的字单元的内容送至FR,然后SP寄存器的内容加2,指向堆栈的下一个字单元,即栈顶向下移动两个字节
6
XCHG
交换指令XCHG
指令格式:
XCHGdest,src
指令功能:
将目的操作数dest与源操作数src的内容相互交换
注意:
(1)两个操作数必须同为8位或16位的数据;
(2)段寄存器不能作为操作数;
(3)两操作数不能同为内存中的数据。
【例3.16】XCHGAX,DI
将寄存器AX与DI的内容进行交换。
若指令执行前(AX)=1234H,(DI)=AABBH,则指令执行后(AX)=AABBH,(DI)=1234H。
7
LEA
有效地址传送指令LEA
指令格式:
LEAdest,src
指令功能:
把源操作数src的地址偏移量送至目的操作数dest。
注意:
(1)源操作数src必须是一个内存操作数;
(2)目的操作数dest必须是一个16位的通用寄存器;
(3)指令执行对标志位没有影响。
【例3.17】LEASI,[BX]
将[BX]地址偏移量送至寄存器SI。
由于[BX]是内存数据段中的数据,其偏移地址就是BX寄存器中的内容,故指令是将BX中的内容送至SI。
若指令执行前(SI)=1200H,(BX)=0100H,则指令执行后,(SI)=0100H,(BX)=0100H。
8
LDS
全地址指针传送指令LDS
指令格式:
LDSdest,src
指令功能:
从源操作数src指示的存储单元开始,连续取出4个字节的数据,这4个字节的数据组成一个完整的内存逻辑地址,即段基址(16位);偏移地址(16位)。
其中较低地址单元的两个字节的数据作为偏移地址送至目的寄存器dest,而较高地地址单元的两个字节的数据作为段基址送至数据段寄存器DS。
注意:
(1)源操作数src必须是一个内存操作数;
(2)目的操作数dest必须是一个16位的通用寄存器;
(3)指令执行对标志位没有影响。
9
LES
全地址指针传送指令LES
指令格式:
LESdest,src
指令功能:
从源操作数src指示的存储单元开始,连续取出4个字节的数据,这4个字节的数据组成一个完整的内存逻辑地址,即段基址(16位):
偏移地址(16)位。
其中较低地址单元的两个字节的数据作为偏移地址送至目的寄存器dest,而较高地址单元的两个字节的数据作为段基址送至附加段寄存器ES。
注意:
(1)源操作数src必须是一个内存操作数;
(2)目的操作数dest必须是一个16位的通用寄存器;
(3)指令执行对标志位没有影响。
LES和LDS不同点:
LES将源操作数src所指定的较高地址的字单元数据复制到附加段的段寄存器ES中。
10
XLAT
查表指令XLAT
指令格式:
XLAT或XLAT表首址。
指令功能:
((BX)+(AL))→(AL)·,把内存数据段中的一个字节的数据复制进AL,该数据的偏移地址是(BX)+(AL).
可以把内存数据段中以BX为偏移地址的一段连续的存储空间看成是一张表,而AL是表中具体数据项距表头的位移量(索引值)。
只要知道了这个位移量,就能利用XLAT指令方便地找到表中的数据。
注意:
利用XLAT指令查表,表的最大长度不能超过256字节。
可见,XLAT指令使AL中的索引量变换为存储表格中对应于该索引量的具体数据,适用于码制转换、数学计算等方面
11
INAL,PORT
直接输入指令IN
指令格式:
INAL,PORT
或INAX,PORT
指令功能:
(PORT)→(AL),将地址为PORT的I/O端口中的一个字节的数据复制到寄存器AL中;或(PORT+1)→(AH),(PORT)→(AL),即将地址为PORT+1,PORT的I/O端口中的两个字节的数据复制到寄存器AX中。
备注:
PORT为I/O端口地址,范围为00H~FFH,即由低八位地址线A7~A0表示的范围。
注意:
输入输出指令均不影响标志位。
12
INAL,DX
间接输入指令
指令格式:
INAL,DX或
INAX,DX
指令功能:
(DX)→(AL),将以DX中的内容为地址的I/O端口中的一个字节的数据复制到寄存器AL中;或(DX+1)→(AH),
(DX)→(AL),即将以DX+1,DX中的内容为地址的I/O端口中的两个字节的数据复制到寄存器AX中。
其中,DX寄存器中的内容就是I/O端口的地址,可见,此时I/O端口的地址范围是0000H~FFFFH,即由16位地址总线A15~A0表示的范围。
【例3.24】从I/O地址为3F8H的端口上读取1个字节的数据,指令如下:
MOVDX,3F8H
INAL,DX
若执行该指令序列前地址为3F8H的I/O端口中的数据为12H,即(3F8H)=12H,则执行该指令后(AL)=12H。
13
OUTPORT,AL
或
OUTPORT,AX
直接输出指令
指令格式:
OUTPORT,AL或OUTPORT,AX
指令功能:
(AL)→(PORT)将寄存器AL中的内容复制到地址为PORT的I/O端口中;或(AH)→(PORT+1),(AL)→(PORT),即寄存器AX中的内容复制到地址为PORT+1,PORT的I/O端口中。
其中,PORT为I/O端口地址,范围为00H~FFH,即由低八位地址线A7~A0表示的范围。
【例3.25】OUT86H,AX
将AH中的内容复制到I/O端口87H中,将AL中的内容复制到I/O端口86H中。
若执行该指令前(AX)=1234H,则执行指令后,(87H)=12H,(86H)=34H。
14
OUTDX,AL或OUTDX,AX
间接输出指令
指令格式:
OUTDX,AL或OUTDX,AX
指令功能:
(AL)→(DX),将寄存器AL中的数据复制到以DX中的内容为地址的I/O端口中;或(AH)→(DX+1),(AL)→(DX),即将寄存器AX中的内容复制到以DX+1、DX中的内容为地址的I/O端口中。
其中,DX寄存器中的内容就是I/O端口的地址,可见,此时I/O端口的地址范围是0000H~FFFFH,即由16位地址线A15~A0表示的范围。
加法指令ADD
15
ADD
指令格式:
ADDdest,src
指令功能:
(dest)←(dest)+(src),即将目的操作数dest与源操作数src相加,结果送至目的操作数dest中,源操作数src中的内容不变,并根据指令的执行结果设置状态标志位CF、PF、AF、ZF、SF和OF。
其中,ADD指令可以是两字节数据相加或两个字数据相加。
源操作数src可以是通用寄存器,存储器操作数或立即数,而目的操作数dest只能是通用寄存器或存储器操作数,且不允许dest和src同时为存储器操作数。
16
ADC
带进位的加法指令ADC
指令格式:
ADCdest,src
指令功能:
(dest)←(dest)+(src)+CF,即将目的操作数dest与源操作数src和当前的CF值相加,结果送至目的操作数dest中,源操作数src中的内容不变,并根据指令的执行结果设置状态标志位CF、PF、AF、ZF、SF和OF。
其中,参与运算的CF值是该指令执行前的CF值,指令执行后各个标志位要根据指令的执行结果重置。
dest与src的操作数类型与ADD指令相同。
该指令主要用于多字节数相加运算。
17
INC
自加1指令
指令格式:
INCdest
指令功能:
(dest)←(dest)+1,即将目的的操作数dest加1,将结果回送至目的操作数并根据指令的执行结果设置状态标志位PF、AF、ZF、SF和OF。
注意:
该指令不影响状态标志位CF。
其中,目的操作数dest可以是通用寄存器或存储操作数。
例如:
INCCX;将CX寄存器中的内容加1,结果仍存入CX中
【例3.31】INCAL
如果执行指令前(AL)=0FFH,则执行该指令后(AL)=0,此时,OF置0,SF置1,PF置1,AF置1,而CF保持执行指令前的原值不变。
18
SUB
基本减法指令SUB
指令格式:
SUBdest,src
指令功能:
(dest)←(dest)—(src),即将目的的操作数dest与源操作数src相减,结果送至目的操作数dest中,源操作数src中的内容不变,并根据指令的执行结果设置状态标志位CF、PF、AF、ZF、SF和OF
SUB允许的操作数类型与ADD完全一致;
19
SBB
带借位的减法指令SBB
指令功能:
(dest)←(dest)—(src)—CF,即将目的操作数dest减去源操作数src和当前的CF值,结果送至目的操作数dest中,源操作数src中的内容不变,并根据指令的执行结果设置状态标志位CF、PF、AF、ZF、SF和OF。
其中,参与运算的CF值是该指令执行前的CF值,指令执行后各个标志位要根据指令的执行结果重置。
dest与src的操作数类型与ADC指令相同。
与ADC指令一样,该指令主要用于多字节数的相减运算。
20
DEC
自减1指令
指令格式:
DECdest
指令功能:
(dest)←(dest)—1,即将目的的操作数dest减1,将结果回送至目的操作数,并根据指令的执行结果设置状态标志位PF、AF、ZF、SF和OF。
注意:
该指令不影响状态标志位CF。
其中,目的操作数dest可以是通过寄存器或存储器操作数。
例如:
DECCX;将CX寄存器中的内容减1,结果仍存入CX中
【例3.33】DECAL
如果执行指令前(AL)0H,则执行该指令后(AL)=0FFH,此时,OF置0,SF置1,ZF置0,PF置1,AF置1,而CF保持执行指令前的原值不变。
21
CMP
比较指令:
CMP
指令格式:
CMPdest,src
指令格式;该指令与SUB指令类似,区别是(dest)—(src)的差值不送入(dest),其指令的执行结果只影响状态标志位CF、PF、AF、ZF、SF、OF,也就是说,CMP指令只根据相减的结果自动设置这6个状态标志位,而不影响目的操作数dest。
CMP允许的操作数类型与SUB完全一致
根据CMP指令的特点,可根据相减后的状态标志位来判断减数和被减数的大小
(1)如果是两个无符号数dest和src进行比较,执行指令“CMPdest,src”后仅根据CF的状态就可以进行判断。
当CF为1时,表示dest小于src;当CF为0时,表示dest大于等于src。
当ZF为1时,表示dest等于src。
(2)如果是两个带符号数dest和src进行比较,情况就要复杂的多。
执行指令“CMPdest,src”后,要根据OF和SF的状态综合判断;若OF≠SF,表示dest小于src;若OF=SF,表示dest大于等于src。
(详见3.7节)
22
NEG
取负指令NEG
指令格式:
NEGdest
指令格式:
(dest)←0—(dest),用0减去目的操作数,并将结果送回目的操作数。
其指令的执行结果影响状态标志位CF、PF、AF、ZF、SF和OF
注意:
如果是字节操作数,当(dest)=80H时,执行指令“NEGdest”后,dest的值不变,但OF置1;同样地,如果是字操作数,当(dest)=8000H时,执行指令“NEGdest”后,dest的值变,但OF置1。
其中,目的操作数dest可以是通用寄存器或存储操作数。
非组合BCD码加法调整指令AAA
23
AAA
指令格式:
AAA
指令功能:
两个非组合的BCD码相加,结果在AL中,执行该指令后将结果调整为十进制,放在AX中。
调整原则:
在调整前若AL低4位包含的数值大于9或AF=1,则AAA完成下列操作:
AL加6,AH加1,AF和CF置1,AL的高4位清零。
注意:
AAA指令紧跟在加法指令之后,且相加的结果应在AL中。
该指令是由CPU自动按照调整原则执行的。
24
DAA
组合BCD码加法调整指令DAA
指令格式:
DAA
指令功能:
两个组合的BCD码相加,结果在AL中,执行该指令后将结果调整为十进制,放在AL中,同时用CF表示进位。
调整原则:
(1)如果AF=1或AL的低4位大于9,则AL加06H并置AF=1;
(2)如果CF=1或AL的高4位大于9,则AL加60H并置CF=1;
(3)如果同时满足上诉两条,则AL加66H,并置AF=1,CF=1。
注意:
DAA指令紧跟在加法指令之后,且相加的结果应在AL中。
该指令是由CPU自动按照调整原则执行的。
25
AAS
非组合BCD码减法调整指令AAS
指令格式:
AAS
指令功能:
两个非组合的BCD码相减,结果在AL中,执行该指令后将结果调整为十进制,放在AX中。
调整原则:
在调整前若AL低4位包含的数值大于9或AF=1,则AAS完成下列操作;AL减6,AH减1,AF和CF置1,AL的高4位清零。
注意:
AAS指令紧跟在减法指令之后,且相减的结果应在AL中。
该指令是由cpu自动按照调整原则执行的。
26
DAS
组合BCD码减法调整指令DAS
指令格式:
DAS
指令功能:
两个组合的BCD码相减,结果在AL中,执行该指令后将结果调整为十进制,放在AL中,同时用CF表示错位。
调整原则:
(1)如果AF=1或AL的低4位大于9,则AL减06H并置AF=1;
(2)如果CF=1或AL的高4位大于9,则AL减60H并置CF=1;
(3)如果同时满足上述两条,则AL减66H,并置AF,CF=1。
注意:
DAS指令紧跟在减法指令之后,且相减的结果应在AL中。
该指令是由CPU自动按照调整原则执行的。
乘法指令
乘法指令注意事项:
(1)8位数据×8位数据→16位数据,16位数据×16位数据→32位数据;
(2)两个8位数据相乘,有一个乘数在AL中,另一个乘数在寄存器或内存中,乘积在AX中;
(3)两个16位数据相乘,有一个乘数在AX中,另一个乘数在寄存器或内存中,乘积的高16位在DX中,低16位在AX中;
(4)乘法指令分别有符号数乘法指令和无符号数乘法指令两组指令。
27
MUL
无符号乘法指令MUL
指令格式:
MULdest
指令功能:
若dest是字节数据操作数,则(AL)×(dest)→(AX),若此时(AH)≠0,则CF=OF=1,表示相乘后操作数长度扩展,否则CF=OF=0;若dest是字数据操作数,则(AX)×(dest)→(DX)(AX),若此时(DX)≠0,则CF=OF=1,表示相乘后操作数长度扩展,否则CF=OF=0。
【例3.40】MULBL
这是字节数据相乘指令。
若在执行指令前(AL)=24H,(BL)=82H,则执行指令后(AX)=1284H,由于(AH)=12H,故CF=OF=1,表示两数据相乘后操作数位数得到扩展。
【例3.41】MULBX
这是字数据相乘指令。
若在执行指令前(AX)=0A824H,(BX)=827BH,则执行指令后(DX)=55B3H,(AX)=114CH,CF=OF=1,表示两数据相乘后操作数位数得到扩展。
28
IMUL
带符号乘法指令IMUL
指令格式:
IMULdest
指令功能:
指令的操作数类型,存放方式的规定与MUL指令相同。
无论是字节数据或字数据相乘,首先将两数的绝对值相乘,再根据乘数的符号确定积的符号,最后所得的积是补码形式的带符号数。
若乘积的高位(AH)或(DX)不是低位(AL)或(AX)的符号扩展,则CF=OF=1,表示乘积的高位含有有效数据,否则CF=OF=0。
除法指令
(1)16位数据÷8位数据→8位数据
32位数据÷16位数据→16位数据
由此可见,除数必须为被除数的一半字长。
(2)被除数为16位,放在AX中,除数为8位,在寄存器或内存中,进行除法运算后,商为8位存放在AL中,余数为8位存放在AH中。
(32)被除数为32位,分别放在DX(高位)和AX(低位)中,除数为16位,在寄存器或内存中,进行除法运算后,商为16位存放在AX中,余数为16位存放在DX中。
29
DIV
无符号除法指令DIV
指令格式:
DIVdest
指令功能:
若dest是字节数据操作数,则(AX)÷(dest)→(AL),(AX)mod(dest)→(AH);若dest是字节数据操作数,则(DX)(AX)÷(dest)→(AX),(DX)(AX)mod(dest)→(DX)。
除法运算不影响标志位。
【例3.43】DIVBL
BL是字节数据操作数。
若执行指令前(AX)=124AH,(BL)=82H,则执行指令后商(AL)=24H,余数(AH)=02H。
30
IDIV
带符号除法指令IDIV
指令格式:
IDIVdest
指令功能:
指令的操作数类型、存放方式的规定与DIV指令相同。
无论是dest是字数据或是字节数据,首先将两数的绝对值相除,再根据被除数和除数的符号确定商和余数的符号,最后所得的商和余数是补码形式的带符号数。
8086/8088规定余数的符号与被除数的符号相同。
31
CBW
字节数据符号扩展指令CBW
指令格式:
CBW
指令功能:
将AL中的符号位扩展到AH中。
当(AL)<80H,执行CBW后,(AH)=0;当(AL)≥80H时,执行CBW后,(AH)=0FFH。
该指令不影响任何标志位。
注意:
当遇到两个有符号字节数据相除时,要预先执行CBW指令,扩展被除数,否则不能正确执行除法操作。
【例3.45】CBW
若在执行指令前(AX)=1256H,则执行CBW后,(AX)=0056H。
32
CWD
字数据符号扩展指令CWD
指令格式:
CWD
指令功能:
将AX中的符号位扩展到DX中。
当(AX)<8000H,执行CWD后,(DX)=0;当(AX)≥8000H时,执行CWD后,(DX)=0FFFFH。
该指令不影响任何标志位。
注意:
当遇到两个有符号字数据相除时,要预先执行CWD指令,扩展被除数,否则不能正确执行除法操作。
十进制乘除运算调整指令
对于非组合的BCD码,进行乘除运算时还是遵循着二进制运算的规则,然后将其二进制运算的结果用相应的BCD码调整指令进行十进制调整,调整后的结果即为十进制BCD码的结果。
BCD码都是无符号数,8086/8088只支持非组合的BCD码乘除运算。
33
AAM
非组合BCD码乘法调整指令AAM
指令格式:
AAM
指令功能:
(AX)÷10→(AH),(AX)mod10→(AL),根据AX所得的结果,设置状态标志位SF,ZF和PF。
注意:
AAM实际上是字节乘法操作结束后,将AX中的二进制乘积(数值范围为0~99)转换为两个非组合BCD码的形式,十位数存放在AH中,个位数存放在AL中。
34
AAD
非组合BCD码除法调整指令AAD
指令格式:
AAD
指令功能:
(AH)×10+(AL)→(AX),根据AX所得的结果,设置状态标志位SF,ZF和PF。
注意:
AAD实际上是将两个非组的BCD码数据(范围为0~99)转换成等值的二进制数据,并且AAD指令必须在DIV指令执行前调整。
逻辑运算和移位循环指令
35
NOT
逻辑非指令NOT
指令格式:
NOTdest;B/W
指令功能:
将目的操作数dest按位取反,结果返回目的操作数dest,即(
)→(dest)。
注意:
(1)B/W表示操作数dest是字节数据类型或字数据类型;
(2)dest可以是通用寄存器或存储器操作数,且该指令不影响任何状态标志位。
【例3.48】NOTAL
若在执行指令前(AL)=25H(00100101B),则执行NOTAL后,(AL)=0DAH(11011010B)。
并且各个状态标志位均保持不变。
36
AND
逻辑与指令AND
指令格式:
ANDdest,src;B/W
指令功能:
将目的的操作数dest和源操作数src按位相与,结果返回目的操作数dest。
即(dest)&(src)→(dest)。
注意:
(1)任何二进制位与1相与保持不变,与0相与结果为0;
(2)dest可以使通用寄存器或存储器操作数,执行指令后,OF=CF=0,ZF,SF,PF由指令运行结果设置。
37
TEST
测试指令TEST
指令格式:
TESTdest,src;B/W
指令功能:
将目的操作数dest和源操作数src按位相与,结果只影响各个状态标志位。
即(dest)&(src)。
注意:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 指令 V20