计算机组成原理 指令.docx
《计算机组成原理 指令.docx》由会员分享,可在线阅读,更多相关《计算机组成原理 指令.docx(30页珍藏版)》请在冰豆网上搜索。
![计算机组成原理 指令.docx](https://file1.bdocx.com/fileroot1/2022-10/28/be347b48-4517-4c55-9f9e-9ea499c2bc26/be347b48-4517-4c55-9f9e-9ea499c2bc261.gif)
计算机组成原理指令
8086/8088指令
除串操作指令外,所有指令只允许有一个操作数在存储器中。
1.传送类指令
(数据传送指令,专用累加器传送指令,标志位传送指令,地址传送指令)
(一)数据传送指令
(1)MOV数据传送指令
指令格式:
MOVDST,SRC;
操作数可以是字节、字,源、目的操作数位数必须一致且不能同时在存储器中。
源操作数:
可在通用R、段R、存储器中、或为立即数。
目的操作数:
不能为立即数。
目的地址是段R名时,源操作数不能是立即数(立即数不能直接传给段R)段R间不能直接传送数据。
例1:
立即数送R或存储单元
•MOVAH,2AH;字节传送;
•MOVCX,1234H;字传送;
•MOVDA_BYTE,02FH;字节传送;
•MOVDA_WORD,1020H;字传送;
例2:
寄存器之间传送MOVAL,BL;MOVES,AX;
例3:
R与M之间传送。
MOVAL,DB_BYTE
例4:
把DA_BYTE1字节单元内容传送到DA_BYTE2字节单元中。
MOVAH,DA_BYTE1
MOVDA_BYTE2,AH
例5:
把立即数1020H传送给DS,ES。
MOVAX,1020H
MOVDS,AX
MOVES,AX
(2)XCHG交换指令
XCHGDST,SRC
☐(SRCDST)将源地址的内容与目的地址内容相互交换。
☐交换数据可为字、字节,只能在通用R之间或R与M之间进行。
不能使用段R、立即数。
例、数据段中定义了两个字变量VAR1和VAR2,(VAR1)=1234H,(VAR2)=5678H;
将这两个字单元内容互换。
MOVAX,VAR1XCHGVAR2,AXMOVVAR1,AX(或:
XCHGVAR1,AX)
(3)PUSH进栈指令格式:
PUSHSRC
<1>8086的堆栈由SS指定的一段存储器(64KB)构成。
自下向上生成的堆栈。
SP初始化:
堆栈段长(MAX:
FFFFH)
SP初始值指向:
(SS)*16+段长;(即:
栈底+2单元
<2>8086/8088堆栈规定:
以字(2个字节)为单位进行存取。
低地址存放字的低字节单元的内容;高地址存放字的高字节单元的内容。
<3>堆栈操作:
设置堆栈:
对堆栈段R(SS)及堆栈指针(SP)赋初值。
编程设置堆栈段。
(4)POP出栈指令格式:
POPDST
(5)、IN(input)输入指令
1、直接I/O端口寻址方式:
INAL,pn(字节)INAX,pn(字)
指令功能:
AL/AX←(pn);其中:
pn表示I/O端口地址(或称作:
I/O端口号)。
2、间接I/O端口寻址方式:
INAL,DX(字节)INAX,DX(字)
指令功能:
AL/AX←(DX);其中:
DX中的内容为I/O端口地址。
例、把I/O端口379H的字节内容传送到主存数据段的VARBYTE字节单元中。
MOVDX,379H
INAL,DX
MOVVARBYTE,AL
(6)OUT(output)输出指令
1、直接I/O端口寻址方式:
OUTpn,AL(字节)OUTpn,AX(字)
指令功能:
pn←(AL/AX);其中:
pn表示I/O端口地址(或称作:
I/O端口号)。
2、间接I/O端口寻址方式:
OUTDX,AL(字节)OUTDX,AX(字)
指令功能:
DX←(AL/AX);其中:
DX中的内容为I/O端口地址。
例、把主存数据段的VARBYTE字节单元中的内容传送到I/O端口230H中。
MOVDX,230H
MOVAL,VARBYTE
OUTDX,AL
(7)XLAT(translate)换码指令
指令格式:
XLAT[TABADDR]
指令功能:
AL←((BX)+(AL))
其中:
[TABADDR]中的方括号表示本项内容可以省略,TABADDR表示换码表首地址的符号地址。
BX的内容为换码表的首地址在数据段中的偏移量,AL的内容是相对于表格首地址的偏移量。
例、把十进制数“3”转换为相应的ASCII码。
在主存的数据段设置一个转换表,内容为09的ASCII码(30H39H),表名为TAB1,位于数据段偏移2字节处,假定(DS)=1200H。
可用下述指令完成转换:
MOVBX,0002H
MOVAL,3
XLATTAB1
指令执行后,(AL)=33H,即:
十进制数“3”的ASCII码。
(二)标志位传送指令对标志位进行存取操作,无操作数
(1)取标志指令LAHF:
将标志R的低八位传送到AH中。
(2)存标志指令SAHF:
将AH内容传送给标志R的低八位。
(设置或恢复SF、ZF、AF、PF、CF,对高八位无影响)。
例:
将标志R的低8位清0。
MOVAH,00H;SAHF
(3)标志R进栈指令:
PUSHF
16位标志R内容送SP所指栈顶字单元中。
(4)标志R出栈指令:
POPF
栈顶字单元内容弹出到标志R中。
(三)地址传送指令
将存储器操作数的地址(偏移量、段基值)传送给R。
(1)装入有效地址指令
LEADST,SRC;将源OP数的有效地址(偏移量)传送到目的地址中。
例:
LEASI,BUF;
•源操作数须是存储器操作数(可以是字节也可以是字)。
•目的操作数只能是16位通用R。
(2)装入地址指针指令(LDS/LES)
存储单元的地址指针:
4个字节
段基值:
存于2个高字节单元中
偏移量:
存于2个低字节单元中
指令功能:
从存放地址指针的4个字节存储单元中,同时取出段基值和偏移量,分别送到段R(DS/ES)和通用R中。
LDSDST,SRC;从存放地址指针的4个单元中,同时取出
•LESDST,SRC;段基值→DS(ES)偏移量→通用R
SRC:
存储器OP数DST:
16位通用R
例:
LDSSI,ADDR_TABLE[BX];
•DS:
ADDR_TABLE[BX]中存放的偏移量→SI,新的段基值→DS。
2、算术运算类指令
(一)加法运算指令
(1)加法指令
指令格式:
ADDDST,SRC;(SRC)+(DST)→DST
设置标志寄存器的OF、SF、ZF、AF、PF、CF标志位。
源操作数:
可在通用R、存储单元中,或为立即数。
目的操作数:
在通用R或存储单元中。
(2)带进位加法指令
指令格式:
ADCDST,SRC;(SRC)+(DST)+CF→DST(主要用于大于16位数的加法运算)
例:
32位无符号数存放在DX(高16),AX(低16位)中,若要加上常数76F1A23H,则用下述指令实现:
ADDAX,1A23H
ADCDX,76FH;(将低16位进位加上)
(3)加“1”指令:
指令格式:
INCDST;(不影响CF)
(DST)+1→DST(OP数:
字、字节、无符号数)
只能在通用寄存器或存储单元中,不能是立即数。
主要用于计数或修改地址指针。
(二)减法运算指令
(1)减法指令
指令格式:
SUBDST,SRC;(DST)-(SRC)→DST
例:
SUBAL,DA_BYTE;
(AL)-(DA_BYTE)→AL
(2)带借位减法指令指令格式:
SBBDST,SRC;(DST)-(SRC)-CF→DST
(3)减“1”指令指令格式:
DECDST;
(DST)-1→DST(不影响CF)(OP数:
字、字节、无符号数)
只能在通用寄存器或存储单元中,不能是立即数。
主要用于计数或修改地址指针。
(4)求负数指令指令格式:
NEGDST;0-(DST)→DST
•字节操作数:
-128;字操作数:
-32768;执行NEG后,操作数不变,OF置“1”。
•操作数为0,NEG后仍为0,CF置0;否则CF置1。
例:
(AL)=25H=(00100101)2
•NEGAL;(AL)=DBH=(11011011)2
(5)比较指令
指令格式:
CMPDST,SRC;(DST)-(SRC)→置标志位,不保留两数相减结果
若:
ZF=1,则(DST)=(SRC)
无符号数:
CF=0:
(DST)≥(SRC);
带符号数:
OF=SF:
(DST)>(SRC);OF≠SF:
(DST)<(SRC);
(三)乘法指令
(1)无符号数乘法指令
指令格式:
MULSRC;(另一操作数在AL或AX中)
•字节无符号数相乘:
(SRC)*(AL)→AX;
•AH为全0,CF=OF=0;否则:
CF=OF=1;
•字无符号数相乘:
(SRC)*(AX)→DX:
AX;
•DX为全0,CF=OF=0;否则:
CF=OF=1;
•只影响CF,OF标志位。
例:
两个字节存储单元BYTE1、BYTE2内容(无符号数)相乘,乘积放在字单元PROC中。
MOVAL,BYTE2
MULBYTE1
MOVPROC,AX
(2)带符号数乘法指令
指令格式:
IMULSRC;
操作数及乘积均带符号,且用补码表示。
若乘积的高半字AH(字节乘法)、或DX(字乘法)不是低半部的符号扩展,则为乘积的符号和有效数:
CF=OF=1;否则,CF=OF=0。
(四)除法指令
(1)无符号数除法指令指令格式:
DIVSRC;
SRC存除数,8位(字节)或16位(字)
字节除法:
(AX)/(SRC)→AL,余数→AH
字除法:
(DX:
AX)/(SRC)→AX,余数→DX
当:
除数为0,即(SRC)=0;或商溢出:
即(AL)>0FFH或(AX)>0FFFFH;
产生0型中断(除法出错中断)。
(2)带符号数除法指令指令格式:
IDIVSRC
操作数、商及余数均带符号且用补码表示。
当除数为0或商超出最大值或最小值时,产生0型中断。
最大正数商:
+127(字节),+32767(字)最小负数商:
-128(字节),-32768(字)
(五)类型转换指令
指令格式:
CBW/CWD;隐含使用AH/DX
CBW:
扩展AL中的符号位至AH中
CWD:
扩展AX中的符号位至DX中
例:
两个8位带符号数存于BYTE1,BYTE2字节单元中,将BYTE1除以BYTE2,商放入QUOT字节单元中。
MOVAL,BYTE1CBWIDIVBYTE2MOVQUOT,AL
3.逻辑运算类指令
(一)逻辑运算指令(按位进行逻辑运算)
指令格式:
逻辑与:
ANDDST,SRC;SF,ZF,PF逻辑或:
ORDST,SRC;
按结果设定逻辑异或:
XORDST,SRC;CF,OF总为0AF不确定
逻辑非指令:
NOTDST;对标志位无影响
例:
(AL)=10100101,ANDAL,0FH指令运算结果:
(AL)=10100101
∧0F=00001111
——————————
00000101→AL
标志位:
SF=0,ZF=0,PF=1
例:
AL中最高位置1;ORAL,80H
例:
AL中最低位求反;XORAL,01H
(二)测试指令
指令格式:
TESTDST,SRC;按位与,结果不