计原与汇编4.ppt

上传人:本田雅阁 文档编号:2653326 上传时间:2019-04-30 格式:PPT 页数:119 大小:1.27MB
返回 下载 相关 举报
计原与汇编4.ppt_第1页
第1页 / 共119页
计原与汇编4.ppt_第2页
第2页 / 共119页
计原与汇编4.ppt_第3页
第3页 / 共119页
亲,该文档总共119页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《计原与汇编4.ppt》由会员分享,可在线阅读,更多相关《计原与汇编4.ppt(119页珍藏版)》请在三一文库上搜索。

1、指令:规定计算机执行某种操作的指示和命令。 指令系统:一台计算机的所有指令的集合。,一、 指令格式,指令的基本格式:,设计指令格式包括:指令字长度、操作码字段结构和地址码字段结构。,第四章 指令系统,(二)操作码结构 操作码:指令中表示机器操作性质和种类的部分。 操作码长度:决定了指令系统中完成不同操作的指 令条数。 操作码设计方法: 1. 固定长度操作码 2. 可变长度操作码(扩展操作码),(一)指令字长度 指令字长度即一条指令中包含的二进制代码的位数。,(三)地址码结构 地址码结构包括: 指令中需要几个地址指令格式; 地址如何给出寻址方式; 地址码长度 指令格式分类:,格式,(1)四地址指

2、令,意义:(A1) OP (A2) A3 (A4) 下一条指令地址,(2)三地址指令,格式,意义:(A1) OP (A2) A3 (PC) 下一条指令地址 (3)二地址指令 格式,意义:(A1) OP (A2) A2 (PC) 下一条指令地址,(4)一地址指令,格式:,意义:单操作数指令 OP(A)A 双操作数指令 (AX) OP (A)AX 缩短指令长度的方法: 结果存放在目的操作数地址中。 用CPU中的寄存器隐含一个OP数。 把地址隐含在寄存器中。,(5)零地址指令,格式,用于:空操作指令、停机指令等。 堆栈指令。,OP,(四)指令助记符和机器指令代码,二、指令格式举例,1Intel 80

3、86指令格式,2MIPS指令格式,寻址方式:寻找所要处理的指令或操作数地址 的各种方法。,三、寻址方式,1、指令寻址方式:顺序寻址方式和跳转寻址方式,2、操作数寻址方式 (一)隐含寻址 某个操作数(或操作数地址)隐含在某个通用寄存器(或指定的存储单元)中。 例:MUL OPR,三、寻址方式,(二)立即寻址 指令的地址码部分是操作数本身。,例:MOV AX,8,(三)寄存器寻址 指令的地址码字段直接给出寄存器编号。,(四)直接寻址 指令的地址码部分给出操作数的有效地址。,例:MOV AX,BX,(五)间接寻址 指令的地址码部分给出存放操作数地址的存储单元的地址(简称:地址的地址)。,(六)寄存器

4、间接寻址 指令地址码部分给出寄存器地址,操作数地址 在指定的寄存器中。,(七)变址寻址 指定某寄存器作为变址寄存器,指令的地址码部分给出一个形式地址,变址寄存器的内容与形式地址相加为操作数的有效地址。,(八)基址寻址 指令中的形式地址与基址寄存器的内容之和,作 为操作数有效地址。,(九)相对寻址 程序计数器PC的当前内容与指令地址码部分给出的形式地址相加做为操作数的地址。,(十)堆栈寻址 操作数地址由堆栈指针SP指定。,四、 8086寻址方式示例,1、8086/8088的CPU结构,(1)执行部件(EU- Execution Unit ):从指令队列中取出指令,完成指令规定的操作。(包括:16

5、位ALU、通用R组、暂存器、标志R、EU控制器、16位数据通路)。 (2)总线接口部件(BIU-Bus Interface Unit):完成CPU与主存或外设之间的数据传送。 即完成:从主存预取后续指令送到指令队列中;从主存取操作数,传送给EU执行指令(或反向传送)。 (包括:一组段R、指令指针、6字节指令队列、20位总线地址形成部件、总线控制逻辑)。,8086/8088主存物理地址的形成:,段:主存连续空间。8086的不论程序还是数据都是按段成组存放的。 段长度 64KB。 段基址:段的首址。 20bits, 低4位为0。 段寄存器:存放对应段的高16位地址(段基值)。 主存物理地址形成:

6、(段寄存器)*16 + 偏移量 0 H 段基址 + H 偏移 H 20位内存地址,2、8086/8088CPU中的寄存器,( 1 ) 段寄存器:指示相应段的首址的高16位(段基值) 主存单元的逻辑地址 = 段基值:段内偏移量 主存物理地址 = (段寄存器)*16 + 段内偏移量,CS(代码段R):存放当前代码段的首址的高16位。 代码段:存放指令代码(程序)。,DS(数据段R):存放当前数据段的首址的高16位。 数据段:存放程序的有关数据。,SS(堆栈段R):存放当前堆栈段的首址的高16位。 堆栈段:存放后进先出顺序存取的信息。,ES(附加段R):存放当前附加段的首址的高16位。 附加段:存放

7、运算结果或辅助数据。,( 2 ) 通用R(8个16位R):,SI(源变址R):存放数据段中某(源)OP数所在存储单元的偏移量。,DI(目的变址R):存放数据段中某(目的)OP数所在存储单元的偏移量。,SP(堆栈指针):存放堆栈段中栈顶单元的偏移量。 BP(基址指针):存放堆栈段中某一存储单元的偏移量。, 地址指针R(给出段内偏移量), 数据R,AX:累加器; BX:基址R; CX:计数R; DX:数据R,4个16位R: AX,BX,CX,DX 8个8位R: AH,AL,BH,BL,CH,CL DH,DL,( 2 ) 通用R(8个16位R):,IP(指令指针)是指令的地址指针。,(4)标志寄存器

8、FR(Flags Register) 记录程序执行时的状态,存储PSW(16位长),有9个标志位。,1 状态标志位:,CF(0):进/借位标志 PF(2):奇偶标志 AF(4):辅助进位标志 (AF=1表示低4位有进位) ZF(6):零值标志 SF(7):符号标志 OF(11):溢出标志,2 控制标志位,TF(8):单步标志 IF(9):中断允许标志。 IF=1:允许CPU响应可屏蔽外中断请求。 IF=0: 禁止CPU响应可屏蔽中断。 DF(10):方向标志。用于串操作指令。 DF=0:地址指针(SI/DI)自动递增; DF=1:地址指针(SI/DI)自动递减。,3、8086/8088的主存,

9、(1)主存特点 CPU有20条地址线。1MB寻址能力;00000HFFFFFH 支持字/字节访问。 字寻址:字存放在相邻的2个字节单元:高地址存字的高8位;低地址存字的低8位。 (字地址存放字的低8位)。,00000H,10000H,10001H,10002H,字,字,主存,56H,34H,12H,(2)主存的段结构: 可重叠。 最大段:64KB;偏移量为:0000HFFFFH,00000H,10000H,FFFFFH,物理存储器,邻接,部分重叠,间隔,完全重叠,段1,段2,段3,段4,段5,段寄存器,B,F,I,K,SS,ES,DS,CS,00000H,FFFFFH,A,D,E,F,J,K,

10、I,H,C,G,B,物理存储器,逻辑段,(3)逻辑地址与物理地址: 物理地址: 20位真正地址, 00000HFFFFFH 逻辑地址: 由段基值和偏移量表示。 逻辑地址与物理地址的转换: 物理地址= (段R)*16 + 偏移量 物理地址的形成: 取指令:物理地址=CS*24 + IP 取OP数:物理地址=DS(ES)*24 + 偏移量 堆栈OP:物理地址=SS*24 + SP(BP) 段的重叠导致逻辑地址不唯一, 但物理地址是唯一的。 一个物理地址可对应多个逻辑地址。,01B50H,01F50H,021A0H,031ACH,段基址,被访问存储单元,00000H,FFFFFH,165CH,125

11、CH,100CH,01B5H,01F5H,021AH,偏 移 量,逻 辑 地 址,物 理 地 址,4、与数据相关的寻址方式,(一)寄存器寻址 指令中所需的操作数放在CPU内的某通用寄存器中,由指令给出该寄存器的地址。 指令(地址码部分):通用寄存器的地址,R# 操作数地址形成: R# 操作数: 在通用寄存器中,( R#),例. MOV CX , AX 若(AX)=1020H,则指令执行后(CX)为1020H。,例: MOV AH , AL 若(AL)=20H,则(AH)为20H。,(二)立即寻址,指令中所需的OP数直接包含在指令代码中。 指令(地址码部分): 给出操作数。 操作数: 在指令中。

12、 立即数可以是8位或16位二进制数(带符号数,以补码表示)。只能作为源操作数,且只能是常数。,例: MOV AX, 1326H,(三)存储器操作数的寻址方式,存储单元地址的逻辑地址形式: 段基值 : 偏移量,段基值:存放在某个段R(CS,DS,ES,SS)中。 偏移量(有效地址EA):存放OP数的存储单元与段起址(段基址)之间的距离。,EA可以由位移量(常数,OP数名)、基地址(BX,BP)和变址量(SI,DI)组合成。,逻辑地址的来源,(1)直接寻址方式 操作数的有效地址(EA)由指令中的位移量字段直接提供。 指令(地址码部分) : 给出操作数的有效地址EA 操作数地址形成: A = DS

13、(段R )* 24 + EA 操作数: 在内存中, ( A ),用符号表示 例: MOV AX,VAR 或MOV AX,VAR, 用常数表示 例: MOV AX, DS:1200H 把当前数据段偏移1200H个字节的字存储单元内容送入AX中。,(2) 寄存器间接寻址 操作数的有效地址EA存放在SI,DI,BX,BP寄存器中,由指令提供所用的寄存器。 BX, SI, DI 隐含使用DS; BP隐含使用SS。,指令(地址码部分): 存放操作数地址的寄存器号,R# 操作数地址形成: A = DS (段R )* 24 +( R# ) 操作数: 在内存中, ( A ),(2) 寄存器间接寻址,例: MO

14、V AH, BX; MOV AH, DS:BX MOV DX, BP ; MOV DX, SS:BP MOV AL, SI; MOV AL, DS:SI MOV DI, CX ; MOV DS:DI, CX,例:MOV AX,BX,等价于:MOV AX,DS:BX。 设(DS)= 2000H,(BX)= 1200H,则指令功能是把主存中数据段偏移1200H字节处的一个字的内容传送到通用寄存器AX中。,(3) 变址寻址(隐含使用段R同上) 操作数有效地址EA为指定R的内容与指令中的位移量(8,16位)相加而成。 其中:位移量可以采用符号地址。,指令(地址码部分): 存放变址寄存器RX和位移量D

15、操作数地址形成: A = DS (段R )* 24 + ( RX )+D 操作数: 在内存中, ( A ),(3) 变址寻址(隐含使用段R同上),例:MOV AX,VARSI等价于:MOV AX,DS:VARSI 也可以写成:MOV AX,DS:VAR+SI或写成:MOV AX,DS:SI+ VAR。假设该符号地址VAR位于数据段偏移1200H字节处,(DS)= 2000H,(SI)= 30H。,则本条指令的功能,是把主存中数据段偏移1230H字节处(即:主存的物理地址为21230H)的一个字内容传送到通用寄存器AX中。,假设ARRAY1数组的首地址位于数据段偏移2300H处,(DS)= 20

16、00H,数组的每个元素占2个字节。使用指令:MOV AX,ARRAY1BX 可以把ARRAY1数组中的元素取出传送到通用寄存器AX中。如果(BX)= 0006H,则可以访问到ARRAY1 数组中的第4个元素ARRAY1(3),要访问元素ARRAY1(i),则设置(BX)= i2。,(4) 基址变址寻址 操作数的有效地址EA由指令中的位移量,基址寄存器(BX或BP)内容与变址寄存器(SI或DI)内容相加而成。,(三)存储器操作数的寻址方式,基址R为:BP 则:段R隐含为SS 基址R为:BX 则:段R隐含为DS,寻址方式格式: MOV AX,ARRAYBXSI; MOV AX,DS : ARRAY

17、BXSI; MOV 10HBPSI,DX; MOV SS:10H BPSI,DX,具有10行、10列的二维数组ARRAY2按照第一行(0-9个元素)、第二行(0-9个元素)的顺序连续存放在主存的数据段中,假设ARRAY2数组的首地址位于数据段偏移3400H处,(DS)= 2000H,数组的每个元素占2个字节。如果需要把数组的第1行第6个元素ARRAY2(1,6)传送到通用寄存器AX中时,则可以把BX设置成20(14H)(120),把SI设置成12(0CH)(62),使用指令MOV AX,ARRAY2BXSI完成所需数据的传送:,例:用不同寻址方式编写显示字符串String的程序,DATA SE

18、GMENT string db Hello world!,0DH,0Ah,$ count DW 14 DATA ENDS .直接寻址 mov dl,string mov ah,2 int 21h ;显示字符H mov dl,string+1 mov ah,2 int 21h ;显示字符e .,寄存器间接寻址 mov cx,count mov bx,offset string ;string的偏移地址 next: mov dl,bx mov ah,2 int 21h ;显示一个字符 inc bx loop next ;循环指令,例:用不同寻址方式编写显示字符串String的程序,变址寻址 mov

19、 cx,count mov si,0 next:mov dl,stringsi mov ah,2 int 21h inc si loop next,例:用不同寻址方式编写显示字符串String的程序,基址变址寻址 mov cx,count mov bx,offset string ;string的偏移地址 mov si,0 next: mov dl,bxsi mov ah,2 int 21h ;显示一个字符 inc si loop next ;循环指令,例:用不同寻址方式编写显示字符串String的程序,DOS显示字符串功能 mov dx,offset string mov ah,9 int

20、21h ;显示一串字符,例:用不同寻址方式编写显示字符串String的程序,(四)串操作寻址方式(8086/8088提供专门的串OP指令,OP数在存储器中),串操作指令规定:隐含使用SI作为源串在数据段(DS)中的地址指针。 隐含使用DI作为目的串在附加段(ES)中的地址指针。,标志寄存器中的方向位: DF=0:SI,DI自动增量; DF=1:SI,DI自动减量。,字节串:增量/减量为1 ; 字 串 : 增量/减量为2。,短转移:(DELT1127或DELT2-128) JMP SHORT JMPLAB,5、与转移地址相关的寻址方式,(1)段内直接寻址 JMP JMPLAB,例:JMP CX

21、JMP WORD PTR BX 或 JMP BX,(2) 段内间接寻址,(3) 段间直接寻址 JMP FAR PTR JMPLAB,(4) 段间间接寻址 JMP DWORD PTR BX,6 . I/O端口寻址 I/O接口的编址: 与存储器统一编址 I/O端口单独编址 I/O操作必须通过累加器AX 或AL。,(1)直接I/O端口寻址方式,端口地址n(8位),可访问0255以内的端口。,(2) 间接端口寻址方式,DX为I/O间址寄存器(16位地址)可访问064K-1范围的I/O端口。,(一)数据传送指令: 将数据从一个地方传送到另一个地方。 (二)算术运算指令 (三)逻辑运算指令 (四)程序控制

22、指令,五、 指令类型,1.转移指令 无条件转移:不受任何条件约束转移。 条件转移:按状态寄存器标志转移。 保存的标志包括:进位标志(C),结果 为零标志(Z),结果为负标志(S),结 果溢出标志(O),结果奇偶标志(P)。 2.循环控制指令 3.子程序调用和返回指令 4.程序自中断指令 (五)串处理类指令,(六)输入输出类指令 1.设置专用的 I/O 指令。 2.采用通用的数据传送指令实现 I/O 操作。 3.通过 I/O 处理机执行 I/O操作。 (七)系统控制类指令(包含特权指令、标志位 设置或复位指令、停机指令等) 特权指令特点及用途: 不直接提供给用户使用。 任务的创建和切换,检测用户

23、的访问权限, 改变系统的工作方式。,六、8086/8088指令,除串操作指令外,所有指令只允许有一个 操作数在存储器中。,1. 传送类指令(数据传送指令,专用累加器传 送指令,标志位传送指令,地址传送指令),(一) 数据传送指令,指令格式:MOV DST,SRC;,指令数据传送方向,(1) MOV数据传送指令,(1) MOV数据传送指令,指令格式:MOV DST,SRC; 操作数可以是字节、字,源、目的操作数位数必 须一致,且不能同时在存储器中。, 源操作数:可在通用R、段R、存储器中、或为立 即数。, 目的操作数:不能为立即数。, 目的地址是段R名时,源操作数不能是立即数(立即数不能直接传给

24、段R), 段R间不能直接传送数据。,例 1:立即数送R或存储单元 MOV AH,2AH; 字节传送; MOV CX,1234H; 字传送; MOV DA_BYTE, 02FH; 字节传送; MOV DA_WORD,1020H; 字传送;,例 2: 寄存器之间传送 MOV AL, BL; MOV ES, AX;,例 3:R 与 M 之间传送。 MOV AL, DB_BYTE,例 4: 把DA_BYTE1字节单元内容传送到DA_BYTE2字节单元中。 MOV AH, DA_BYTE1 MOV DA_BYTE2, AH 例 5: 把立即数1020H传送给DS ,ES。 MOV AX , 1020H

25、MOV DS , AX MOV ES , AX,不能使用段R、立即数。,交换数据可为字、字节,只能在通用R之间或R 与M 之间进行。,(2)XCHG交换指令,例、数据段中定义了两个字变量VAR1和VAR2, (VAR1)= 1234H,(VAR2)= 5678H; 将这两个字单元内容互换。 MOV AX,VAR1 XCHG VAR2,AX MOV VAR1,AX (或:XCHG VAR1,AX), 8086的堆栈由SS指定的一段存储器( 64KB)构成。 自下向上生成的堆栈。 SP初始化:堆栈段长(MAX:FFFFH) SP初始值指向:(SS)*16 + 段长;(即:栈底+2单元),(3)PU

26、SH进栈指令 格式:PUSH SRC, 8086/8088堆栈规定:以字(2个字节)为单位进行存取。 低地址存放字的低字节单元的内容; 高地址存放字的高字节单元的内容。 堆栈操作: 设置堆栈:对堆栈段R(SS)及堆栈指针(SP)赋初值。 编程设置堆栈段。,00000H,FFFFFH,堆栈段,SS,40H,SP,00000H,FFFFFH,PUSH AX,SP,SS,(SP)-2,AH,AL,X X,X X,(4)POP出栈指令 格式:POP DST,(5)、IN(input)输入指令 1、直接I/O端口寻址方式: IN AL,pn (字节) IN AX,pn (字) 指令功能:AL/AX (p

27、n);其中:pn表示I/O端口地址(或称作:I/O端口号)。 2、间接I/O端口寻址方式: IN AL,DX (字节) IN AX,DX (字) 指令功能:AL/AX (DX);其中:DX中的内容为I/O端口地址。,例、把I/O端口379H的字节内容传送到主存数据段的VARBYTE字节单元中。 MOV DX,379H IN AL,DX MOV VARBYTE,AL,(6)OUT(output)输出指令 1、直接I/O端口寻址方式: OUT pn,AL (字节) OUT pn,AX (字) 指令功能:pn (AL/AX);其中:pn表示I/O端口地址(或称作:I/O端口号)。 2、间接I/O端口

28、寻址方式: OUT DX,AL (字节) OUT DX,AX (字) 指令功能:DX (AL/AX);其中:DX中的内容为I/O端口地址。,例、 把主存数据段的VARBYTE字节单元中的内容传送到I/O端口230H中。 MOV DX,230H MOV AL,VARBYTE OUT DX,AL,(7)XLAT(translate)换码指令 指令格式:XLAT TABADDR 指令功能:AL (BX)+(AL) 其中: TABADDR中的方括号表示本项内容可以省略,TABADDR表示换码表首地址的符号地址。 BX的内容为换码表的首地址在数据段中的偏移量,AL的内容是相对于表格首地址的偏移量。,例、

29、 把十进制数“3”转换为相应的ASCII码。 在主存的数据段设置一个转换表,内容为09的ASCII码(30H39H),表名为TAB1,位于数据段偏移2字节处,假定(DS)=1200H。可用下述指令完成转换: MOV BX,0002H MOV AL,3 XLAT TAB1 指令执行后,(AL)=33H,即:十进制数“3”的ASCII码。,(二)标志位传送指令 对标志位进行存取操作,无操作数,(1)取标志指令LAHF:将标志R的低 八位传送到AH中。,(2)存标志指令SAHF:将AH内容传送 给标志R的低八位。 (设置或恢复SF、ZF、AF、PF、 CF,对高八位无影响)。,例:将标志R的低8位清

30、0 。 MOV AH ,00H; SAHF,(3)标志R进栈指令:PUSHF 16位标志R内容送SP所指栈顶字单元中。,(4)标志R出栈指令:POPF 栈顶字单元内容弹出到标志R中。,(三)地址传送指令 将存储器操作数的地址(偏移量、段基 值)传送给R。,(1)装入有效地址指令 LEA DST,SRC; 将源OP数的有效地 址(偏移量)传送到目的地址中。,例: LEA SI ,BUF; 源操作数须是存储器操作数(可以是字节也可以是字) 。 目的操作数只能是16位通用R。,(2)装入地址指针指令(LDS/LES) 存储单元的地址指针:4个字节 段基值:存于2个高字节单元中 偏移量:存于2个低字节

31、单元中,指令功能:从存放地址指针的4个字节存储单元中,同时取出段基值和偏移量,分别送到段R(DS/ES)和通用R中。,LDS DST ,SRC; 从存放地址指针的 4个单元中,同时取出,LES DST ,SRC; 段基值 DS(ES), 偏移量 通用R,SRC: 存储器OP数 DST: 16位通用R,例: LDS SI, ADDR_TABLEBX; DS:ADDR_TABLEBX中存放的偏移量 SI,新的段基值 DS。,2、算术运算类指令,(一)加法运算指令,(1)加法指令,指令格式: ADD DST, SRC; (SRC)+(DST) DST 设置标志寄存器的OF、SF、ZF、AF、PF、C

32、F标志位。 源操作数:可在通用R、存储单元中,或为立即数。 目的操作数: 在通用R或存储单元中。,例:ADD DL,0D4H,(2)带进位加法指令,指令格式: ADC DST,SRC; (SRC)+(DST)+CF DST (主要用于大于16位数的加法运算),例:32位无符号数存放在DX(高16),AX(低16位)中,若要加上常数76F1A23H,则用下述指令实现:,ADD AX,1A23H ADC DX,76FH;(将低16位进位加上),(3)加“1”指令: 指令格式: INC DST;(不影响CF) (DST)+1 DST (OP数:字、字节、无符号数 ) 只能在通用寄存器或存储单元中,不

33、能是立即数。 主要用于计数或修改地址指针。,(二)减法运算指令,(1)减法指令 指令格式: SUB DST , SRC; (DST)-(SRC) DST,例:SUB AL,DA_BYTE; (AL)-(DA_BYTE) AL,(2)带借位减法指令 指令格式: SBB DST, SRC; (DST)-(SRC)-CF DST,(3)减“1”指令 指令格式: DEC DST; (DST)-1 DST(不影响CF) (OP数:字、字节、无符号数 ) 只能在通用寄存器或存储单元中,不能是立即数。 主要用于计数或修改地址指针。,(4)求负数指令 指令格式: NEG DST; 0-(DST) DST, 字

34、节操作数:-128;字操作数:-32768;执行NEG后,操作数不变,OF置“1”。 操作数为0,NEG后仍为0,CF置0;否则CF置1。,例: (AL)=25H=(00100101)2 NEG AL; (AL)=DBH=(11011011)2,(5)比较指令 指令格式: CMP DST,SRC; (DST)-(SRC) 置标志位 ,不保留两数相减结果 若:ZF=1,则(DST)=(SRC),无符号数: CF=0:(DST)(SRC); 带符号数: OF=SF:(DST)(SRC); OFSF:(DST)(SRC);,(三)乘法指令,指令格式: MUL SRC ; (另一操作数在AL或AX中)

35、,(1)无符号数乘法指令,字节无符号数相乘:(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中。 MOV AL,BYTE2 MUL BYTE1 MOV PROC,AX,(2)带符号数乘法指令 指令格式 :IMUL SRC; 操作数及乘积均带符号,且用补码表示。 若乘积的高半字AH(字节乘法)、或DX(字乘法)不是低半部的符号扩展,

36、则为乘积的符号和有效数:CF=OF=1; 否则,CF=OF=0。,(四)除法指令,(1)无符号数除法指令 指令格式: DIV SRC; SRC存除数,8位(字节)或16位(字),字节除法:(AX)/(SRC) AL, 余数 AH 字除法:(DX:AX)/(SRC) AX, 余数 DX,当:除数为0,即(SRC)=0 ; 或商溢出:即(AL)0FFH 或 (AX)0FFFFH ; 产生0型中断(除法出错中断)。,(2)带符号数除法指令 指令格式: IDIV SRC 操作数、商及余数均带符号且用补码表示。,当除数为0 或商超出最大值或最小值时,产生0型中断。 最大正数商:+127(字节),+327

37、67(字) 最小负数商:-128(字节), -32768(字),(五)类型转换指令 指令格式:CBW/CWD;隐含使用AH/DX CBW :扩展AL中的符号位至AH中 CWD:扩展AX中的符号位至DX中,例: 两个8位带符号数存于BYTE1,BYTE2字节单元中,将BYTE1除以BYTE2,商放入QUOT字节单元中。,MOV AL , BYTE1 CBW IDIV BYTE2 MOV QUOT , AL,3.逻辑运算类指令,(一)逻辑运算指令(按位进行逻辑运算),逻辑非指令:NOT DST; 对标志位无影响,例: (AL)=10100101, AND AL,0FH 指令运算结果:,( AL )

38、 = 10100101 0F = 00001111 00000101 AL,标志位:SF=0,ZF=0,PF=1,例:AL中最高位置1; OR AL ,80H 例: AL中最低位求反 ; XOR AL ,01H,(二)测试指令 指令格式: TEST DST, SRC; 按位与,结果不送DST(同AND)影响 SF,ZF,PF。,例 :测试AL的第3位是否为0; TEST AL, 08H; ZF=1: 则为0 ZF=0: 则不为0,(三)移位指令 (8条,对R或M中的操作数进 行指定移位),(1)算术移位指令 指令格式:算术左移:SAL DST , COUNT 算术右移:SAR DST, COU

39、NT,(2)逻辑移位指令 指令格式:逻辑左移:SHL DST ,COUNT 逻辑右移:SHR DST, COUNT,带进位循环左移: RCL DST , COUNT 带进位循环右移: RCR DST , COUNT,注意: DST: R或M ; 字或字节 ; COUNT: 移位次数; COUNT=1:可用“1”代替。 COUNT1:用CL代替 。,(3)循环移位指令,指令格式:循环左移:ROL DST ,COUNT 循环右移:ROR DST, COUNT,左、右移中移出的位均送CF中。 算术/逻辑移位: 修改 OF,ZF,SF,PF,CF。 循环移位:修改OF,CF。 只移一位且移位前后操作数

40、的符号位发生 变化:OF=1,否则 OF=0。 若移位位数大于1,则OF不定。,例:AX中存放一带符号数,完成(AX)*3/2运算。,MOV DX, AX SAL AX , 1; 乘2 AX ADD AX, DX; 乘3 AX SAR AX, 1 ; (AX)*3/2,SHR M+4,1 RCR M+2,1 RCR M ,1,例: 把存放在M+4,M+2,M 三个字单元中的一个无符号数右移一位。,4、控制转移类指令,(一)无条件转移指令 JMP 目标地址,(二)条件转移指令 JXXX 目标地址,指令功能: 测试条件满足:IP (IP)+ 8位位移量 其中:(IP)的值为JXXX指令下一条指令

41、的地址,8位位移量采用补码表示; 测试的条件满足,则转到目标地址执行 测试的条件不满足,则顺序执行下一条指令,条件转移指令及其判断条件,续表,(三)CX寄存器的值测试转移指令,指令格式: JCXZ 目标地址,指令功能: 测试 CX内容,(CX)=0,转到 目标处,否则,顺序执行。,(四)循环控制指令 位移量是8位二进制以补码表示的带符号数。 (1)LOOP指令 格式:LOOP 目标地址 功能:循环次数(CX)-1 CX;(CX)不为 零,继续循环,转到目标处,否则,顺序 执行。,(2)LOOPE/LOOPZ指令 格式: LOOPE/LOOPZ 目标地址 功能:循环次数(CX)-1 CX;若(C

42、X)不为 零,且ZF=1,转到目标处,继续执行, 否 则(CX)=0或ZF=0),顺序执行。,(3)LOOPNE/LOOPNZ指令 格式: LOOPNE/LOOPNZ 目标地址 功能:循环次数(CX)-1 CX;(CX)不为 零,且ZF=0,转到目标处,继续执行, 否 则(CX)=0或ZF=1) ,顺序执行。,(五)子程序的调用与返回指令,返回地址入栈 转移到(过程名所代表的)入口地址,段内,段间,CALL SUB1 CALL BX CALL WORD PTR BX,CALL FAR PTR SUB1 CALL DWORD PTR BX,(1)CALL调用子程序指令 CALL 目标地址,(2)

43、RET从子程序返回指令,指令格式:RET PARA,过程返回地址从栈中弹出到 IP (CS)中 返回原来的调用点,段内,段间,返回指令,段内,段间,带立即数返回指令,RET,RET n,(六)中断子程序的调用与返回指令,(1)INT软中断指令 指令格式:INT n (其中:n为中断类型码) 指令功能: PUSHF,TF、IF清0,CS、IP入栈 按中断类型码n,从中断向量表对应位置取出将 要调用的功能子程序的入口地址CS,IP,(2)IRET从中断子程序返回指令 指令格式:IRET 指令功能: 从中断子程序返回断点,(3)进位标志取反指令CMC: CF取反 (4)清除方向标志指令CLD: 置D

44、F=0 (5)方向标志置位指令STD: 置DF=1 (6)清除中断标志指令CLI: 置IF=0 (7)中断标志置位指令STI: 置IF=1,5、处理器控制类指令 (一)标志位处理指令 (1)清除进位标志指令 CLC: 置CF=0 (2)进位标志置位指令STC: 置CF=1,(二)处理器控制指令,(1)HLT : 停机指令 (2)WAIT:等待指令(CPU等待外部事件 就绪达到同步目的) (3)ESC: 换码指令,外部协处理器指 令的前缀 (4)LOCK:总线封锁前缀指令,(5)NOP: 空操作指令,用于延时,七、CISC与RISC指令系统,1. CISC (Complex Instruction Set Computer) 复杂指令系统计算机 执行一条指令要多次访问主存。 执行一条指令需要多个微周期。,流水线作业中,长指令的执行,妨碍其他指 令的操作。,寻址方式复杂,不易优化。,2. RISC (Reduced Instruction Set Computer)精简指令系统计算机,(1)指令系统选取使用频率最高的一些简单指令。 (2)指令格式力求一致,寻址方式尽量简单。 (3)指令的操作尽量都在CPU芯片上的寄存器之间 进行,只有取数/存数指令访问主存。 (4)指令尽量在一个周期内完成,注重编译的优化。 (5)采用硬布线控制逻辑。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1