计算机组成原理 指令.docx
- 文档编号:13286559
- 上传时间:2023-06-12
- 格式:DOCX
- 页数:36
- 大小:50.46KB
计算机组成原理 指令.docx
《计算机组成原理 指令.docx》由会员分享,可在线阅读,更多相关《计算机组成原理 指令.docx(36页珍藏版)》请在冰点文库上搜索。
计算机组成原理指令
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;按位与,结果不送DST(同AND)影响SF,ZF,PF。
例:
测试AL的第3位是否为0;TESTAL,08H;ZF=1:
则为0ZF=0:
则不为0
(三)移位指令(8条,对R或M中的操作数进行指定移位)
(1)算术移位指令
指令格式:
算术左移:
SALDST,COUNT算术右移:
SARDST,COUNT
(2)逻辑移位指令
指令格式:
逻辑左移:
SHLDST,COUNT逻辑右移:
SHRDST,COUNT
(3)循环移位指令
指令格式:
循环左移:
ROLDST,COUNT循环右移:
RORDST,COUNT
带进位循环左移:
RCLDST,COUNT带进位循环右移:
RCRDST,COUNT
注意:
DST:
R或M;字或字节;
COUNT:
移位次数;
COUNT=1:
可用“1”代替。
COUNT≠1:
用CL代替。
左、右移中移出的位均送CF中。
算术/逻辑移位:
修改OF,ZF,SF,PF,CF。
循环移位:
修改OF,CF。
只移一位且移位前后操作数的符号位发生变化:
OF=1,否则OF=0。
若移位位数大于1,则OF不定。
例1:
AX中存放一带符号数,完成(AX)*3/2运算。
例2:
把存放在M+4,M+2,M三个字单元中的一个无符号数右移一位。
例1MOVDX,AX例2SHRM+4,1
SALAX,1;乘2→AXRCRM+2,1
ADDAX,DX;乘3→AXRCRM,1
SARAX,1;(AX)*3/2
4、控制转移类指令
(一)无条件转移指令JMP目标地址
(二)条件转移指令JXXX目标地址
指令功能:
测试条件满足:
IP←(IP)+8位位移量
其中:
(IP)的值为JXXX指令下一条指令的地址,8位位移量采用补码表示;
测试的条件满足,则转到目标地址执行
测试的条件不满足,则顺序执行下一条指令
(三)CX寄存器的值测试转移指令
指令格式:
JCXZ目标地址
指令功能:
测试CX内容,(CX)=0,转到目标处,否则,顺序执行。
(四)循环控制指令位移量是8位二进制以补码表示的带符号数。
(1)LOOP指令格式:
LOOP目标地址
功能:
循环次数(CX)-1CX;(CX)不为零,继续循环,转到目标处,否则,顺序执行。
(2)LOOPE/LOOPZ指令格式:
LOOPE/LOOPZ目标地址
功能:
循环次数(CX)-1CX;若(CX)不为零,且ZF=1,转到目标处,继续执行,否则((CX)=0或ZF=0),顺序执行。
(3)LOOPNE/LOOPNZ指令格式:
LOOPNE/LOOPNZ目标地址
功能:
循环次数(CX)-1CX;(CX)不为零,且ZF=0,转到目标处,继续执行,否则((CX)=0或ZF=1),顺序执行。
(五)子程序的调用与返回指令
(1)CALL调用子程序指令CALL目标地址返回地址入栈转移到(过程名所代表的)入口地址
CALLSUB1
CALLBX
CALLWORDPTR[BX]
(2)RET从子程序返回指令指令格式:
RET[PARA]
过程返回地址从栈中弹出到IP(CS)中返回原来的调用点
(六)中断子程序的调用与返回指令
(1)INT软中断指令指令格式:
INTn(其中:
n为中断类型码)
指令功能:
PUSHF,TF、IF清0,CS、IP入栈按中断类型码n,从中断向量表对应位置取出将要调用的功能子程序的入口地址CS,IP
(2)IRET从中断子程序返回指令指令格式:
IRET
指令功能:
从中断子程序返回断点
5、处理器控制类指令
(一)标志位处理指令
(1)清除进位标志指令CLC:
置CF=0
(2)进位标志置位指令STC:
置CF=1
(3)进位标志取反指令CMC:
CF取反(4)清除方向标志指令CLD:
置DF=0
(5)方向标志置位指令STD:
置DF=1(6)清除中断标志指令CLI:
置IF=0
(7)中断标志置位指令STI:
置IF=1
(二)处理器控制指令
(1)HLT:
停机指令
(2)WAIT:
等待指令(CPU等待外部事件就绪达到同步目的)
(3)ESC:
换码指令,外部协处理器指令的前缀
(4)LOCK:
总线封锁前缀指令(5)NOP:
空操作指令,用于延时
七、CISC与RISC指令系统
1.CISC(ComplexInstructionSetComputer)
复杂指令系统计算机
①执行一条指令要多次访问主存。
②执行一条指令需要多个微周期。
③流水线作业中,长指令的执行,妨碍其他指令的操作。
④寻址方式复杂,不易优化。
第八章汇编语言
五、汇编语言数据与运算符
1.常数数值常数:
二、八、十、十六进制B,O,D,H字符串常数
(1)在指令语句的原操作数中作立即数.MOVAL,0A9HMOVBX,‘AB’
(2)存储器操作数的寻址方式中作位移量。
MOVAL,DS:
[340H]
(3)在数据定义语句中,对存储单元预置初值。
DB12H,34H
2.变量
(1)用数据定义语句定义并预置初值后,变量代表存储单元的数据,并作为该单元的符号地址。
例如在某数据段已定义一变量:
DATA_VARDB40HDUP(?
)
几种含有变量名的地址表达式为:
直接寻址:
DATA_VAR+08H
基址变址寻址:
DATA_VAR[BX][DI]
☐地址表达式的值:
存放操作数的存储单元偏移量。
☐地址表达式的类型:
同变量名的类型。
2.变量
(2)在用DW或DD的数据定义语句中,若操作数字段引用了变量名,则在分配的存储单元中,预置被引用的变量名的地址部分:
偏移量、段基值
NUM1DB10HDUP(?
)
NUM2DW10HDUP(?
)
ARRAYDB10HDUP(‘ABCD’)
ADR1DWARRAY
ADR2DDARRAY
3.标号:
一条指令的符号地址。
段属性偏移属性类型属性
NEAR:
段内转移,作为标号所在段的转移、调用指令的目标地址。
FAR:
段间转移,作为其他段的转移、调用指令的目标地址。
类型属性设置:
(1)隐含方式:
NEXT:
MOVAX,3000
(2)用LABEL伪指令设置类型属性:
标号伪指令LABEL格式:
名字LABEL类型
☐与指令语句配合使用:
名字(新标号)LABEL类型(NEAR/FAR)
SUB1_FARLABELFAR
SUB1:
MOVAX,1234H
☐与数据定义语句配合使用:
名字(新变量名)LABEL类型(DB/DW/DD)
DATA_BYTELABELBYTE
DATA_WORDDW20HDUP(563H)
4.运算符
(1)算术运算符
只有减法运算可以用同一段内的两个变量相减
NUM=15*5;NUM=75
NUM=NUM/8;NUM=9
NUM=NUMMOD5;NUM=4
NUM=-NUM-6;NUM=-10
NUM=-NUM;NUM=10
ORG30H;下面定义数据的起始偏移是30H
DA1DB‘ABCDEFGH’
DA2DB‘IBMPCCOMPUTER’
COUNTEQUDA2-DA1;38H-30H=8
DA3EQUDA2+4
NUM=11011011B
DATA1DWNUMSHL3,NUMSHR2
...
MOVAX,NUMSHL3MOVAX,011011011000B
MOVBX,NUMSHR2MOVBX,00110110B
MOVCX,NUMSHL8MOVCX,1101101100000000B
MOVCX,NUMSHL16MOVCX,0
MOVDX,NUMSHR8MOVDX,0
MOVDX,NUMSHR16MOVDX,0
DATA1DW6D8H,36H
...
算术运算符移位运算符和移位指令区别
移位运算符不能对寄存器或存储单元进行移位运算
MOVAX,CXSHL5
MOVDX,DATA1SHR3
(2)逻辑运算符
MOVAL,NOT0F0H
MOVDX,NOT0F0H
MOVBL,55HOR0F0H
ANDBH,55HAND0F0H
XORCX,55HXOR50H
(3)关系运算符
全1为真,全0为假比较时,若为常数按无符号数比较,如果是变量按偏移量比较
DATASEGMENT
ORG10H
NUM1=1234
NUM2=1234H
DA_BYTEDB10HDUP(0)
DA_WORDDW10HDUP(0)
DA_VAR1DW
NUM2+DA_BYTEGTNUM1+DA_WORD
DA_VAR2DBNUM1LENUM2
DATAENDS
...
MOVAX,NUM1LTNUM2
MOVBL,NUM1GENUM2
MOVCX,DA_WORDGTDA_BYTE
...
DA_VAR1DW0FFFFH
DA_VAR2DB0FFH
...
MOVAX,0FFFFH
MOVBL,0
MOVCX,0FFFFH
...
可以对两个常数进行比较,不能用常数与偏移量进行比较
(4)数值返回运算符
格式:
<运算符><地址表达式>
运算对象是存储器操作数,由变量名或标号组成地址表达式
SEG:
返回变量所在的段值OFFSET:
返回变量所在偏移
TYPE:
返回变量的类型LENGTH:
返回数组变量的元素个数
SIZE:
返回数组变量所占的总字节数SIZE=TYPE*LENGTH
假设DATA的段基值是7A4EH
DATASEGMENT
ORG30H
DA1DB20HDUP(12H)
DA2DWDA1
...
DATAENDS
...
MOVAX,SEGDA1
MOVBX,SEGDA2
MOVSI,OFFSETDA1
MOVCX,DA2
MOVDI,OFFSETDA2
MOVDX,OFFSETDA1+4
MOVAX,7A4EH
MOVBX,7A4EH
MOVSI,30H
MOVCX,DA2
MOVDI,50H
MOVDX,34H
TYPE运算符
用数字形式表示变量和标号的类型属性
DA_BYTEDB12H
DA_WORDDW3456H
DA_DWORDDD789AH
...
MOVAL,TYPEDA_BYTE
MOVBL,TYPEDA_WORD
MOVCL,TYPEDA_DWORD
...
MOVAL,1
MOVBL,2
MOVCL,4
LENGTH与SIZE运算符
LENGTH运算符
返回数组变量的元素个数如果变量用DUP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机组成原理 指令 计算机 组成 原理
![提示](https://static.bingdoc.com/images/bang_tan.gif)