微机原理指令系统第6讲_第1页
微机原理指令系统第6讲_第2页
微机原理指令系统第6讲_第3页
微机原理指令系统第6讲_第4页
微机原理指令系统第6讲_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、12.2 8086/8088指令系统可分成如下6类: 数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 程序控制指令 处理器控制指令22.2.1 数据传送指令 可实现 存储器 寄存器 I/O 数据传送指令又可分为如下四种: 通用传送 目标地址传送 标志传送 输入输出(I/O口)31.通用传送指令(1) MOV dest,src; destsrc具体来说可实现:寄存器与寄存器/存储器之间;立即数至寄存器/存储器;寄存器/存储器与段寄存器之间; 4例:1) MOV reg,mem ;存储器送寄存器2) MOV mem,reg ;寄存器送存储器3) MOV reg,data ;立即数送寄存

2、器4) MOV mem,data ;立即数送存储单元5) MOV segreg,mem/reg ;存储单元/寄存器送 段寄存器6) MOV mem/reg,segreg ;段寄存器送存储单 元/寄存器5MOV指令使用规则:1) 立即数、CS、IP不能作目的操作数2) 不允许memmem3) 不允许segregsegreg5) 不允许segreg立即数6) 源操作数与目的操作数类型要一致6DS,CS,ES,SS存储器通用寄存器立即数CS、IP不能作目的操作数I/O7几个不能传送问题的解决办法:用AX作桥梁 存储器存储器 MOV AX,MEM1 MOV MEM2,AX段寄存器段寄存器: MOV A

3、X,DS MOV ES,AX段寄存器立即数: MOV AX,DATA MOV DS,AX8应用举例:例2.1将数据段偏移地址为1000H开始的100个存储单元全部填充为2AH。程序段如下: MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV DI,AL INC DI DEC CX JNZ AGAIN HLT9上程序段存放在代码段中,設(CS)=109EH,(IP)=0100H,则各条指令存放地址如下: CS : IP 指令109E : 0100 MOV DI,1000H109E : 0103 MOV CX,64H109E : 0106 MOV AL,2AH1

4、09E : 0108 MOV DI,AL109E : 010A INC DI109E : 010B DEC CX109E : 010C JNZ 0108109E : 010E HLT109E : 011010 写入2AH(*)后,数据段中相应存储单元的内容改变如下:DS:1000 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1010 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1020 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS

5、:1030 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1040 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1050 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2ADS:1060 2A 2A 2A 2A11例2.2 MOV SI , OFFSET BUFFER1 MOV DI , OFFSET BUFFER2 MOV CX , 200 NEXT:MOV AL , SI MOV DI , AL INC SI INC DI DEC CX

6、JNZ NEXT 。 。 。 12什么是堆栈? 按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入/弹出操作。为什么要设置堆栈?为什么要按 “后进先出”方式工作?参见下图(2) 堆栈操作指令13主程序IP继续执行主程序执行子程序转子程序压栈弹出返回主程序主程序IPIP(下)继续执行主程序转子程序1返回主程序IP执行子程序 2转子程序2返回子程序1IP(下)执行子程序1继续执行子程序1(a)(b)子程序调用示意图(a) 主程序调子程序; (b) 子程序嵌套示意图压栈弹出IP(下)14规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。

7、堆栈的最高地址叫栈底。 SPSS堆栈段进栈方向退栈方向栈底栈顶15 压栈指令 PUSH src ; src为16位操作数 例:PUSHAX;将AX内容压栈 执行过程:(SP)=(SP)-1,高字节AH入栈 (SP)= (SP)-1,低字节AL入栈 16设(AX)=1020H,执行示意图如图低地址存储区(SS段)执行前(SP)存储区(SS段)进栈方向执行后2010PUSH AX指令执行示意图(SP)=(SP)-1(SP)高地址低地址高地址(SP)=(SP)-117压栈指令的格式为: PUSH reg PUSH mem PUSH segreg例如: PUSH AX PUSH BX PUSH DS

8、注意:1)进栈方向是高地址向低地址延伸。先压入高8位,后压入低8位。2)入栈指令中目的操作数隐含,为存储器操作数,段基地址由SS提供,偏移地址由SP提供。18 弹出指令 POPdest例:POPBX;将栈顶内容弹至BX执行过程:(BL)栈顶一字节; (SP)=(SP)+1 (BH)栈顶一字节; (SP)=(SP)+1 1)出栈方向是低地址向高地址延伸。先弹出低8位,后弹出高8位。2)出栈指令中源操作数隐含,为存储器操作数,段基地址由SS 提供,偏移地址由SP提供。19POP BX 的执行示意图如下图所示出栈方向POP BX指令执行示意图(SP)存储区(SS段)执行后(SP)(SP=(SP)+1

9、(SP=(SP)+1低地址存储区(SS段)执行前2010BX2010高地址低地址高地址20堆栈指令使用时应注意几点:堆栈操作总是按字进行不能从栈顶弹出一个字给CS堆栈指针为SS:SP,SP永远指向栈顶SP自动进行增减量(-2,+2)21格式:XCHG reg,mem/reg功能:交换两操作数的内容。 要求:1)两操作数中必须有一个在寄存器中;2)操作数不能为段寄存器和立即数;3) 源和目地操作数长度类型要一致。举例: XCHGAX,BX XCHG2000H,CL(3)交换指令XCHG22(4)查表指令XLAT 执行的操作:AL(BX)+(AL) 又叫查表转换指令,它可根据表项序号查出表中对应代

10、码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。 例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。23303132.394142.4546.42000H+042000H+0BH0129ABEF十六进制数ASCII码表存储器24则可用如下几条指令实现:MOV BX,2000H ;(BX)表首地址MOV AL,0BH ;(AL)序号XALT ; 查表转换执行后得到:(AL)= 42H = B注意:转换表长度最大为2

11、56个表项(字节)。25(5)字节-字转换指令格式:CBW ;把AL的符号位复制到AH CWD ;把AX的符号位复制到DX用途:用于有符号数的除法。例如:(AL) = A7H,则执行CBW后,AH的内 容为FFH。262. 输入输出(I/O)指令 只限于用累加器AL或AX来传送信息。功能: (累加器)I/O端口(1)输入指令IN格式: IN acc,PORT ;PORT表示端口地址0255 IN acc,DX ;DX表示端口地址 0000H FFFFH例:IN AL,80H ;(AL)(80H端口) IN AL,DX ;(AL)(DX)27例:OUT 68H,AX ;(68H)(AX) OUT

12、 DX,AL ;(DX)(AL)在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如: MOV DX,220H IN AL,DX ;将220H端口内容读入AL(2) 输出指令OUT格式:OUT port,acc OUT DX,acc283. 地址传送指令共有三条:格式:LEA reg,mem ; 将指定存储器的16位偏移 地址送指定寄存器 LDS reg, mem32; DS:reg(mem开始的四 个内存单元) LES reg, mem32; 同上,但DS改为ES 要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。29设:(SI)=1

13、000H则执行该指令后,(BX)=1010H注意以下两条指令差别: LEA BX,BUFFER MOV BX,BUFFER前者表示将符号地址为BUFFER的存储单元的偏侈地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中.例:LEABX,SI+10H30下面两条指令等效: LEA BX,BUFFER MOV BX, OFFSET BUFFER其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。二者都可用于取存储器单元的偏移地址。314.标志传送指令共有四条:(1)读标志指令LAHF LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:OF

14、DFIFTFSFZFAFPFCFAHLAHF指令的功能FLAG32(2)设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。OFDFIFTFSFZFAFPFCFAHSAHF指令的功能FLAG33 执行的操作: (SP)=(SP)-1;标志寄存器高8位入栈 (SP)=(SP)-1;标志寄存器低8位入栈 (4)从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位栈顶一个字节; (SP)=(SP)+1 标志寄存器高8位栈顶一个字节; (SP)= (SP)+1 PUSHF和POPF指令用于保护和恢复标志寄存器内容。(3)把标志寄存器推

15、入栈顶指令PUSHF34例如: PUSHAX PUSHCX PUSHF ;保护标志寄存器内容 ;这段程序要用到AX,CX以及标志位 POPF ;恢复标志寄存器内容 POPCX POPAX. . .35数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。36例题1. 指出下列指令源操作数类型和位数,如果是存储器操作数,写出寻址算法。 (1) MOV AX , 1000H (2) XCHG AX , BX+SI H (3) PUSH BX (4) POP BX (5) IN AX, 60H (6) OUT DX , AL (7) LDS BP , DI H (8) XLA

16、T (9) LEA BX, 1000H 37 2. 指出下列指令使用错误 (1) MOV DS , ES (2) PUSH AL (3) IN DX , AL (4) IN AL ,1000H (5) OUT DX , BL (6) MOV BX , SI H (7) MOV CS, DI (8) LEA AL, BX (9) XCHG AX ,DS38 3 已知DS=5000H, SS=2000H,SP=1000H, BX=2378H, SI=0050H, BP=0FFCH,DX=80H,地址80H端口为16位I/O口,分析执行下列指令后结果. PUSH BX PUSH SI LEA DI

17、, BP MOV DI , BX MOV DI+2 ,SI MOV AX , SS: DI OUT DX , AX HLT SP=( ); DI=( ); DX=( ); I/O口 内容=( ); 并图示出内存相关单元存储内容。392.2.2 算术运算指令 涉及两种类型数据: 无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意: 参加的操作数必须都是无符号数或都是有符号数。 需使用不同的标志位来检查无符号数和有符号数的运算结果是否溢出。40 CF标志可用来表示无符号数的溢出,OF标志可用来表示有符号数的溢出。 有符号数的溢出是一种出错状态,在运算过程中应当避免。而无符

18、号数运算溢出不是出错状态。将CF值并入运算结果的高位,结果是正确的。41共有5条:(1) 不带进位的加法指令ADD 格式: ADD dest,src 如 ADD acc,data ADD mem/reg,data ADD mem/reg1,mem/reg2实例:ADD AL,30H ADD AX,BX+20H ADD CX,SI ADD DI,200HADD指令对标志位(指状态标志)都有影响。1.加法指令42例1设AL=79H,BH=0B3H,求执行指令ADD AL,BH后, AL=? BH=? 各个标志位的值?解: 79H= 0111 1001B+) B3H= 1011 0011B0010

19、1100B1所以,AL=0010 1100B=2CH,BH=0B3HSF=0,ZF=0,AF=0,PF=0,CF=1,OF=0。43(2) 带进位位的加法指令ADC ADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志CF的内容,例如: ADC AL,68H ADC AX,CX ADC BX,DI ADC BX,2010H ADC指令主要用于多字节加法运算中!44例 多字节加法运算求两个双字数据相加。假设数据1在DX(高字)和AX(低字)内,为12345678H,数据2在BX(高字)和CX(低字)内,为6789ABCDH。解:因为8086/8088的指令只能进行字或字节运算,

20、 所以对于双字必须分两步或四步进行。45解: 因此,本题要求的双字相加,由两条指令完成: ADD AX, CX ADC DX, BX46(3)加1指令INC指令格式:INC dst指令功能: (dst)+1(dst) CF不受影响,其他标志位随运算结果变化。如:INC AX;AX+1AXINC CL;CL+1CLINC BX;将EA=BX的内存单元内容; +1 该内存单元47加一指令通常用于存储器寻址地址指针向高地址方向修正。例:有两个4字节的无符号数相加: 2C56F8AC+309E47BE=? 设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1

21、存储区,如下页图所示。 因CPU只能进行8位或16位的加法运算,为此可将此问题加法运算分4次或2次进行。4856H2CHBEH47HBUFFER1BUFFER2ACHF8H9EH30H被加数加数数据段多字节加法示意图 .49(4)压缩的BCD码加法调整指令DAA指令格式:DAA指令功能:对AL中的压缩BCD数加法运算结果自动调整。压缩的BCD码加法调整原理:分两种情况进行。当AL低4位9或AF=1时, AL+06HAL,并 1AF;当AL的高4位9或CF=1时, AL+60H AL, 并1 CF。50例题已知两个压缩BCD码AL=38H和BL=24H,对其求和。解: 第一步 ADD AL,BL 38BCD = 0011 1000B +) 24BCD = 0010 0100B0101 1100B (=5CH)62BCD 显然,执行加法指令与实际结果不符合。51第二步 DAA ;注意操作数隐含,是对AL进行调整0101 1100B (=5CH,则低4位9) 0110B (=06H)0110 0010B (=62H即为62BCD)+) 所以,对于压缩BCD码,在进行加法运算后,必须紧跟一条调整指令DAA,

温馨提示

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

评论

0/150

提交评论