微机系统与接口课件:CH2_2第二章微型计算机指令系统(续)_第1页
微机系统与接口课件:CH2_2第二章微型计算机指令系统(续)_第2页
微机系统与接口课件:CH2_2第二章微型计算机指令系统(续)_第3页
微机系统与接口课件:CH2_2第二章微型计算机指令系统(续)_第4页
微机系统与接口课件:CH2_2第二章微型计算机指令系统(续)_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第二章 微型计算机指令系统(续),数据传送 (DATA TRANSFER) 通用/ I/O /目标地址传送/标志传送,算术运算(Arithmetic) 整型数据处理 逻辑运算与位操作(Logic) 逻辑数据处理 串操作(String Manipulation) 字符型数据处理 转移控制(Control Transfer) 程序流控制处理 MPU控制(Processor Control) 系统控制管理,8086/8088指令系统(六大类),2,数据传送与寻址方式,MOV AL,100; MOV CX,2000H; MOV DS, AX;MOVCX,BX;MOVSI,DX MOV AX,200

2、0H ;MOV AL,BUFFER(内存); MOV CS:2000H, 30H MOV AX,SI;MOV BL,DI; MOV AX,SS:SI MOV CH,BX; MOV BP,SI,MOV SI,SI+6;MOV DL,TABLEDI MOV BX+100,AL;MOV DX,TABLEBP MOVBXSICOUNT,AL; MOV DX,BXDI+900H; MOV DX,BP+DI+COUNT,PUSH ES:2000H LEA SI,BP+DICOUNT POP ES LDS SI, DICOUNT,所有数据传输指令 不应影响标志位,3,数据传送与寻址方式,非法数据传送指令:

3、两个操作数的类型不一致 例如源操作数是字节,而目的操作数是字;或相反 两个操作数不能都是存储器 传送指令很灵活,但主存之间的直接传送却不允许 段寄存器的操作有一些限制 段寄存器属专用寄存器,对他们的操作能力有限,寻址方式: 存储器操作数的类型需要明确 默认段寄存器 默认操作数,4,标志状态寄存器Flags,3个控制标志位 6个算术和逻辑运算结果特征,5,算术运算(Arithmetic)指令(1),ADD (Addition)加法:8位/16位操作数,影响FLAGS ADD dest,src; (dest)(dest)+(src) ADD AX,BX; ADD CL,10H;ADD SP,2;

4、ADD 2000H, AL; ADD WORD PTRBX, 20,例 : AL=7EH AH=5BH; ADD AL,AH AL=D9H 注意:源操作数和目标操作数不能同时为存储器;不能对段寄存器进行加法运算,段寄存器不能参加加减法、乘除法运算。 问题:如何影响标志位? CF=1 作为无符号数相加进位(字节/字256/65536) OF=1 当作为有符号数相加溢出(-128127/-3276832767),6,例 AL=7EH(01111110B) AH=5BH; (01011011B) ADD AL,AH AL=D9H(11011001B) 影响标志位: CF=0(加法、无进位); PF=

5、0 (1的个数为奇数。注:非逻辑运算,不必关注) ; AF=1(低4位向高4位有进位发生); ZF=0(结果不为零); SF=1(结果的最高位MSB为1); OF=1(运算的结果超过了127,超出了带符号数的范围)。,算术运算(Arithmetic)指令(1),7,算术运算(Arithmetic)指令(1),ADD (Addition)加法:8位/16位操作数,影响FLAGS 3AH + 72HACH,没有进位:CF = 0 结果不是零:ZF = 0 最高位D71:SF = 1 产生溢出:OF = 1 ACH10101100B 4个1,偶数个1:PF =1 BBH + 72H(1)2DH,有进

6、位:CF = 1 8EH + 72H(1)00H,结果是零:ZF = 1 最高位D70:SF = 0 BBH + 72H(1)2DH,没有溢出:OF = 0,*应该利用哪个标志,由程序员来决定如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。,8,ADC (ADD with Carry) (dest)(dest)+(src)+(CF) 例:MOV BX, OFFSET FIRST; L2 多位数连加: LH MOV SI,OFFSET SECOND ;L1 MOV AX, SI;L1 ADD BX, AX;L1+L2(L2) MOV AX, SI+2;H1

7、 ADC BX+2,AX;H1+H2(H2) 类似P65例2.2 5字节 ADC指令主要用于多字节数据的加法运算,如果低字节相加时产生进位,则在下一次高字节相加时应将这个进位加进去,算术运算(Arithmetic)指令(2),?问题1:运算符 专用指令:目标操作数加1,?问题2:如何在二进制运算基础上实现十进制BCD运算指令,H1 L1 + H2 L2,9,INC (Increment by 1) (dest)(dest)+1 加一操作 INC AX; INC DL; INC WORD PTR ES:2000H INC BYTE PTRBX; INC WORD PTR CS:DI+20 INC

8、指令的操作数不能为段寄存器 BYTE PTR或WORD PTR指定随后的存储器操作数的类型为字节或字 伪操作PTR INC指令通常用于循环程序中修改地址。,算术运算(Arithmetic)指令(2),10,算术运算(Arithmetic)指令(3),AAA*(ASCII adjust for Addition) 非压缩BCD加法调整 (单字节)只对Unpacked BCD (00-09H)有意义; 隐含操作数为:AL,AH 等效:IF(AL),例:MOV AH,0 MOV AL,7 MOV BL,8 ADD AL,BL;(AL=0FH); AAA; (AL+6=21=10101;10101 M

9、OV BL,59H; ADD AL,BL;(AL=C1H 不正确 ,AF=1); DAA;(CF=1=AF , AL=27H, 可连加) 上例的DAA调整,相当于加66H, 即相当于ADD AL,66H,打*指令一般了解,14,算术运算(Arithmetic)指令(5),减法 乘法 除法 SUB/SBB/DEC/MUL/AAMDIV/AAD AAS/DAS*(调整) IMUL(有符号乘) IDIV (有符号除) 例:减法:不允许两个存储器相减。8位或16位(注:CF=1 借位) SUB AL,CH; (dest)(dest)-(src) SUB BYTE PTR2000H, 20 SBB AX

10、, BP+1000 ; (dest)(dest)-(src)-(CF) 带借位的减指令主要用于多字节的减法 DEC SI; (dest)(dest)-1 DEC BYTE PTR SI;,打*指令一般了解,15,当无符号数的较小数减较大数,因不够减而产生借位,此时CF=1; 带符号数相减如果结果溢出,则OF=1.,算术运算(Arithmetic)指令(5),16,算术运算(Arithmetic)指令(6),NEG (Negate) 8位/16位求补(改变符号)绝对值不变 NEG dest; (dest)0-(dest)影响6个运算标志位 例:NEG AL; NEG BX; NEG BYTE P

11、TR CS:2000H AL=30HNEG AL D0H,CMP (Compare) (dest)-(src)影响6个运算标志位 例: CMP AL,CH; CMP AX,BX; CMP BYTE PTR2000H, 20 JC NEXT ; 利用FLAGS结果,无符号数比较 JG NEXT ; 有符号数比较,17,算术运算(Arithmetic)指令(7),16位无符号数乘法 MUL src; 默认AX*(src) 积= DX(高16位)|AX(低16位) 8位无符号数乘法 MUL src; 默认AL* (src) 积= AX(16位) MUL指令对CF和OF有影响:若运算结果的高半部分(A

12、H或DX中)为0,则CF=OF=0,否则CF=OF=1,例:AL=42H(66),CL=28H (40) MUL CLAX=0A50H(2640) AX,0A50H, CX=0333H MUL CX DX/AX=0020H/ 0FDF0H,18,算术运算(Arithmetic)指令(7),16位无符号数除法 DIV src; 默认被除数DX(高16位)|AX(低16位) /src(16位) 结果 DX=余数(16位) AX=商(16位) 8位无符号数除法 DIV src; 默认被除数AX(16位)/src(字节)结果 AH=余数(8位) AL=商(8位) 不允许两个字长相等的操作数相除,若被除

13、数和除数的字长相等,则须在DIV指令前将被除数的高位扩展8个零或16个零。,例:DX=20H,AX=0FDF2H SI=333H DIV SIAX=0A50H DX=0002H CL=42H DIV CL 0028H,注意: 除0/溢出 (字节除:商255 OR 字:商65535)除零中断,19,算术运算(Arithmetic)指令(8),IMUL/IDIV 有符号数乘/除法 IMUL src; 字节乘法 (AX) (src)*AL; 字乘法 (DX:AX) (src)*AX IDIV src; 字节除法 (AL) (AX)/(src) (AH) (AX)%(src) 字除法 (AX) (DX

14、:AX)/(src) (DX) (DX:AX)%(src) 指令将两个操作数均按带符号数处理,8位和16位带符号数的取值范围是-128+127 32768+32767. 指令对CF和OF有影响:若运算结果的高半部分(AH或DX中)仅为低半部分符号位的扩展,则CF=OF=0,否则若高半部分包含运算的有效数字则CF=OF=1。,注意: 除0/溢出 (字节除:商超出(-128+127) OR 字:商超出(-32768+32767)除零中断,若被除数和除数的字长相等,则须在IDIV指令前将被除数的符号位扩展,使之成为16位或32位数。,20,CBW/CWD 扩展字长(字节字; 字双字) 无符号数:高位

15、添加足够个数的零 有符号数:高位添加足够个数的符号位 CBW:将一个字节扩展成为字,隐含操作数:AL AH CWD:将一个字扩展成为双字,隐含操作数:AX DX 比较MOV AL,4FH 和 MOV AL,0F8H CBW CBW,算术运算(Arithmetic)指令(8),21,算术运算(Arithmetic)指令(8),AAM* (ASCII adjust for Multiply) AL寄存器中的二进制数转换成不压缩BCD码,十位放在AH中,个位放在AL中。 隐含操作数:AL AH 等效:AH(AL)/10; (商); (AL)(AL)%10 (余数) 根据AL中的结果改变SF,ZF,P

16、F 单字节! 例:7*9=? MOV AL,07H ;(AL)=07H MOV BL,09H ;(BL)=09H MUL BL ;(AX)=07H*09H=003FH AAM ;(AH)=06H,(AL)=03H,(SF)=0,(ZF)=0,(PF)=1,打*指令一般了解,22,AAD*( ASCII adjust for Divide):Unpacked BCD调整 隐含操作数:AL AH AAD与其它ASCII调整指令不同,AAD不是在除法之后,而是在除法之前进行调整,然后用DIV进行除法,所得之商还需要用AAM进行调整,才能得到正确的非压缩BCD码的结果。 AL=AH*10+AL;AH=

17、0 单字节! (AX HEX) 注意:AAD-DIV(B)-AAM 例:73/2=? MOV AX,0703H ;(AH)=07H,(AL)=03H MOV BL,02H ;(BL)=02H AAD ;(AL)=49H(即十进制数73) DIV BL ;(AL)=24H(商),(AH)=01H(余数) AAM ;(AH)=03H,(AL)=06H,算术运算(Arithmetic)指令(8),23,8086/8088指令系统(六大类),数据传送 通用/ 输入输出 / 目标地址传送/标志传送 算术运算 整型数据处理 逻辑运算与位操作 逻辑数据处理 串操作 字符型数据处理 转移控制 程序流控制处理(

18、条件/无条件) MPU控制 系统控制管理,24,逻辑运算与移位(Logical AND AX, BX; AND CL,08H OR dest, src; OR AL,55H; OR WORD PTR BX, DX XOR dest, src (logical Exclsive or ) XOR AX,AX; XOR CL, BX TEST dest,src 逻辑与测试,仅影响标志位 TEST AL,80H; TEST AX,0FFFFH;ZF= AND AL,80H; AND AX,0FFFFH .TEST与AND指令 的差别. 常用于位判别,与条件转移指令一起,共同完成对特定位状态的判断,并

19、实现相应的程序转移。 NOT dest ;将操作数按位取反 B:dest=255-dest; W:dest=65535-dest NOT AL; NOT WORD PTR BX NOT BYTE PTR ES: 2000H,25,逻辑运算与移位(Logical BIT7=1 OR CL, 04H 复位(清0)可采用AND 指令 AND AL, 7FH ;BIT7=0 实现某些位求反,可采用XOR 指令 如:MOV AL, 0FH; (AL)=(00001111B) XOR AL, 0AAH;(AL)=(10100101B)实现了BIT1,3,5,7位求反 XOR的另一个用途:将寄存器的内容清零

20、 XOR AX,AX,26,逻辑运算与移位(Logical SHL AL,1; SHL CX,1 SHL/SAL dest,CL SHL WORD PTRBX,CL CF dest(MSB LSB) 0 移一次 当 移位后MSBCF则OF=1 SHR(Shift logical right)相当于无符号数/2 SHR dest, 1(CL) 0dest(MSBLSB)CF 移一次 当移位后新的最高位和次高位不等则OF=1,27,逻辑运算与移位(Logical SAR dest,CL MSBdest(MSBLSB)CF 算术右移和逻辑右移区别:算术右移最高位保持不变 MOV AL, 100010

21、00B; SAR AL,1 ;10001000B=(88H= -78H) /2 AL=11000100B(C4H=-60= - 3CH),28,由于移位指令可以实现乘2的若干次方,且移位指令比乘法除法指令速度快得多,一般用移位指令代替乘法除法指令,速度可提高10倍甚至更多。,逻辑运算与移位(Logical 近短跳转 当前IP的128+127内 IP=IP+disp8,39,2.段内直接转移 JMP(JUMP)NEAR_LABEL IP=IP+disp16段内跳转 3.段内间接转移 JMP reg16 ;(IP) (reg16) JMP MEN16 ;(IP) (mem16) 4.段间直接转移

22、JMP FAR_LABEL; 段间地址 CS:IP=新地址 IP OFFSET FAR_LABEL ; CS SEG FAR_LABEL,转移控制 (Control Transfer)-程序流,40,5.段间间接转移 JMP mem32 ;(IP) (mem32) ;(CS) (mem32+2) 段内跳转应为16位地址 段间跳转应为32位地址 JMP SHORT JMP NEAR PTR JMP 2000H; JMP BX; JMP 0FFFFH:0 (热启动) JMP FAR PTR TABLESI; JMP NEAR PTR BPDI,转移控制 (Control Transfer)-程序流

23、,41,转移控制 (Control Transfer),转移指令-条件跳转(conditional Jump) (利用CMP,TEST,计算,移位指令等结果改变程序流) JCC SHORT_LABEL; 限近短跳转 IP 128+127 满足条件 IP=IP+disp8,否则顺序执行 (IF ELSE) JZ/JE -JNZ/JNE (ZF)=1 -(ZF)=0 JS -JNS (SF)=1 -(SF)=0 JP/JPE -JNP/JPO (PF)=1 -(PF)=0 JO -JNO (OF)=1 -(OF)=0 JC -JNC (CF)=1 -(CF)=0,42,转移控制 (Control

24、Transfer),转移指令-条件跳转(conditional Jump) Unsigned大小比较 P98表2.7 JB/JNAE -JNB/JAE (CF)=1 -(CF)=0 JA/JNBE -JNA/JBE (CF)=0 loop CX times 循环控制 (Loop) LOOPZ/LOOPE short_label; (loop while zero/equal) 循环直到(CX)=0 or (ZF=0) LOOPNE/LOOPNZ short_label; (Loop while NZ/NE) 循环直到(CX)=0 or (ZF=1) JCXZ if CX=0 Jump to (

25、Jump On CX Zero) CX为零控制调转 . Do while/ while Do/ For (i=0;i100;i+),44,过程调用指令 ( Call a procedure ),过程(Procedure);如果一些程序模块需要在不同地方多次反复地出现使用,则可以将这些程序模块设计成过程,每次需要时进行调用。过程结束后再返回原来调用的地方(下一条指令)。 (相当于高级语言中的子程序Subroutine,或函数function), 缩短源程序代码总长度 利于实现模块化的程序设计,便于编制、调试和维护 -需要利用堆栈技术,控制与传递参数,45,过程调用指令 ( Call a proc

26、edure ),CALL 段内段间:直接/间接调用(过程/子程序Subroutine) RET (RETF) 过程返回 (分远近,产生不同RET码(C3/CBH),不但CS:IP发生变化(新地址), 而且堆栈SP及其内容均发生变化,46,过程调用指令 ( Call a procedure ),段内直接调用 CALL NEAR_PROC; (SP)(SP)-2,(SP)+1,(SP)(IP); (IP)(IP)+proc_disp 段内间接调用 CALL reg16/mem16 . (SP)(SP)-2,(SP)+1,(SP)(IP); (IP)reg16/mem16 段间直接调用 CALL F

27、AR_PROC; (SP)(SP)-2,(SP)+1,(SP)(CS); (CS)SEG F_PROC (SP)(SP)-2,(SP)+1,(SP)(IP); (IP)OFFSET F_PROC 段间间接调用 CALL MEM32; (SP)(SP)-2,(SP)+1,(SP)(CS);(CS)MEM32+2, (SP)(SP)-2,(SP)+1,(SP)(IP); (IP)MEM32 例:CALL 2000H; CALL BX; CALL NEAR PTR ES:SI CALL 2000:3000H; CALL FAR PTR2000H,47,过程返回指令 ( Return From Cal

28、l ),从近过程返回: RET(C3H ); (IP)(SP)+1:(SP), (SP)(SP)+2 RET pop_value ;(C2H data_low data_high) (IP)(SP)+1:(SP), (SP)(SP)+2; (SP)(SP)+pop_value =ADD SP,Pop_value 可带一个弹出值,064k的立即数,表示返回时从堆栈舍弃的字节数。 从远过程返回: RETF (CBH) ; (IP)(SP)+1:(SP), (SP)(SP)+2 (CS)(SP)+1:(SP), (SP)(SP)+2 RETF pop_value ; (CAH data_low da

29、ta_high) IP:CS弹出 (SP)(SP)+pop_value,48,8086/8088指令系统(各类重点),数据传送(DATA TRANSFER) 重点:寻址(20位地址,段寄存器) 算术运算(Arithmetic) 关注:标志位 逻辑运算与位操作(Logic) 简单(数据处理) 串操作(String Manipulation) 特殊操作(硬记) 转移控制(Control Transfer) 程序流控制(重要) MPU控制(Processor Control) 系统控制(重要),49,中断(Interrupt)控制,CPU与外设交换信息的一种方式=硬件手段 影响和改变CPU执行程序的

30、顺序(程序流),50,标志控制寄存器Flags (位),TF 跟踪标志位 TF= 1,使CPU处于单步执行指令的工作方式。这种方式便于进行程序的调试。每执行一条指令后,自动产生一次内部中断,从而使用户能逐条指令地检查程序。 IF 中断允许标志位 IF= l使CPU可以响应可屏蔽中断请求。 IF= 0使CPU禁止响应可屏蔽中断请求。 DF 方向标志位 DF= l 使串操作按减地址方式进行。也就是说,从高地址开始,每操作一次地址减小一次。DF0使串操作按增地址方式进行。,3个控制标志位,51,8088中断结构,直接执行软件中断/指令执行结果 除零(INT 00H) 单步(INT 1) IF=1 T

31、F=1 溢出(INTO INT 04H) 软件中断调用(INT xxH) 非屏蔽中断NMI(Non-Maskable Interrupt) 可屏蔽中断INTR(IF=1),内部中断,外部中断,52,中断方式下CPU执行程序流程,53,8086/8088中断过程,保护断点 (F入栈;IF=0 TF=0; CS、IP入栈; 中断服务(中断类型号: n ) (0:4*n取向量 CS:IP); 返回断点 (IRET:依次弹出IP、CS、F),54,运行程序(数据)分段存储,55,中断指令 Interrupt,软件中断: 8086支持在程序中安排一条中断指令引起中断过程(服务),对应中断服务(Service)程序 软件中断程序编号n(n=0-FFH),可通过中断向量(矢量)重新定向 8086/8088:中断0-FFH(0255), 每个占用4字节中断向量(CS:IP) 对应向量存储区: 0000:000003FFH n号中断向量存储在0000:4*n0000:4*n+3单元,56,中断指令 Interrupt,INT(Interrupt) INT n ; (SP)(SP)-2,(SP)+1,(SP)(FLAGS); (IF)0 (TF)0 (SP)(SP)-2,(SP)+1,(SP)(CS); (CS)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论