ImageVerifierCode 换一换
格式:PPT , 页数:136 ,大小:2.55MB ,
文档编号:433271      下载积分:13 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-433271.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(金钥匙文档)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(原理第3章.ppt)为本站会员(金钥匙文档)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

原理第3章.ppt

1、1,微型计算机原理 与接口技术,第三章,第3章 8086指令系统,2,教学目的 了解指令的一般概念、基本格式 掌握操作数的寻址方式 掌握指令系统中的基本指令,3.1 概述 3.1.1 机器语言与汇编语言,机器语言由二进制代码组成。 机器语言中的每一条称为指令,计算机能够识别的所有指令的集合称为指令系统。 指令是计算机能够执行的最小功能单位。 机器语言程序就是由一条条的指令按一定顺序组织起来的指令序列。 计算机的CPU不同,指令系统也不同。,3,一条指令一般由操作码和操作数两部分组成。操作码详细地说明指令要执行的操作,操作数是指令执行时需要的数据。 汇编语言是一种符号语言。用汇编语言编制的程序称

2、为汇编语言源程序,计算机不能直接识别执行,必须翻译成机器语言程序。翻译的过程称为汇编,完成汇编工作的程序称为汇编程序。汇编程序属于系统程序,是汇编语言的命令处理程序。 计算机的CPU不同,汇编语言也不同。本章以8086 CPU为主,介绍常用的汇编语言指令格式、寻址方式和用法。,4,3.1.2 指令的基本构成,指令的一般格式 一条指令包含操作码和操作数两部分。,5,源操作数,操作码,目的操作数,12字节,16字节,24字节,操作数可以有一个也可以有两个,还可以没有。只有一个操作数的指令常称为单操作数指令,有两个操作数的指令常称为双操作数指令。形式上无操作数的指令,通常操作数是隐含的。操作数有源操

3、作数和目的操作数之分。 操作数的长度与指令的寻址方式有关 。,2. 操作数类型 8086CPU指令的操作数有三种类型:立即数、寄存器和存储器操作数。 立即数操作数又称为常数,可以是数值型常数也可以是字符型常数。数值型常数可以是字节或字,可以是无符号数或有符号数。立即数在指令中只能作为源操作数,不能作为目的操作数。,6,寄存器操作数 8086CPU含有的8个16位的通用数据寄存器和4个段寄存器作为16位寄存器操作数,还有8个8位寄存器操作数。控制寄存器IP、Flags只在特定指令中作为操作数。 寄存器操作数在指令中可以作为源操作数也可以作为目的操作数,段寄存器CS除外,它只能作为源操作数 。 个

4、别指令将FLAGS作为操作数。,7,通用寄存器中AX、BX、CX、DX、SI、DI、BP、SP存放字操作数; AH、AL、BH、BL、CH、CL、DH、DL存放字节操作数;,存储器操作数 用内存单元中的数据作为操作数,通常用内存单元地址表明。存储器操作数既可以作为源操作数也可以作为目的操作数,但多数指令要求源和目的操作数不能同时为存储器操作数。 指令中的操作数如果是存储器操作数,通常指令指明存储单元的地址或用某种方式指明存储单元的地址,指令执行时需要根据这个地址从内存单元中取出操作数,操作数可以是1个字节或2个字节(字)甚至4个字节(双字)。,8,数据在内存中以“高高低低”的原则存放,高字节存

5、于高地址内存中,低字节存于低地址内存中。存储器操作数如果是多字节,指令中指明的存储单元地址通常是它的低地址或称为首地址。 如寄存器AX的内容为6E53H,将它存入20000H中:,9,低,高,地址,AH AL,3. 指令的书写格式 指令的书写格式为: 标号: 操作码助记符 目的操作数,源操作数 ;注释 例如: GOON: MOV AX, BX ;数据传送,10,标号是字母数字组合的符号,代表指令,是指令的地址用符号表示的地址。标号后跟冒号“:”作为间隔符。标号一般由字母开头的字母数字组成,长度不超过31个字符。不允许使用汇编语言中的保留字作标号。 操作码助记符与操作数助记符之间至少应有一个空格

6、作为间隔符。如果指令有两个操作数,操作数之间以逗号“,”作为间隔符。 操作数助记符与注释之间用分号“;”作为间隔符。可以跟在指令的后面也可以单独一行,若注释超过一行,则新行以分号“;”开头。 指令中的标点符号应为ACSII字符。,3.2 8086CPU寻址方式,寻址方式,即获得地址的方法,主要指获得段内偏移地址的方法,段基址常采用默认方式获得。8086CPU指令系统的寻址方式有两类: (1)获得指令中操作数地址的方法 立即数操作数作为指令的一部分出现在指令中,随着CPU取指令的动作进入CPU内,不需要再寻址; 寄存器操作数本就在CPU内部,寄存器的符号就是地址; 存储器操作数在内存中,指令只能

7、给出内存单元的偏移地址,而且这个地址常常并不是指令需要的操作数有效地址,要通过某种计算方法才能得到操作数的最终地址。这个过程称为操作数寻址。汇编语言的寻址方式主要指的是存储器操作数的寻址方式 。,11,所以,含有这三种操作数的指令执行速度顺序为:寄存器操作数、立即数、存储器操作数。 *注意:存储器操作数通常存储在数据段、附加数据段或堆栈段,相应的段基址由段寄存器DS、ES或SS提供。,(2)获得要执行的下一条指令的地址的方法 在正常情况下,每当BIU取完一条指令,程序计数器IP自动指向下一条,程序就按照指令的先后顺序执行。但当程序执行转移指令或子程序调用指令时,程序的执行顺序必须按照指令的要求

8、改变,这时需要寻找下一条指令的地址。这类寻址发生在程序代码段内,由CS段寄存器提供段基址。这一类寻址方式只涉及转移指令和子程序调用指令,在介绍相关指令时再详细讲解。,13,1. 立即寻址,源操作数是立即数,可以是8位或16位的二进制数,也可以是字符常数。 MOV AX, 2000H ;2000H是立即数操作数 MOV AH, A ;A是字符常数,等于41H ADD AL, 6 ;6是立即数操作数 立即数作为操作数,这个操作数的寻址方式称为立即寻址,其实它不用寻址。立即数操作数只能作源操作数,不能作为目的操作数。,14,2. 直接寻址,操作数在内存中,指令中直接给出操作数所在的内存单元的偏移地址

9、。可以是数值形式的地址,也可以是符号表示的地址-符号地址。例如: MOV BL, 2000H ;偏移地址为2000H的内存单元的内容传送给BL寄存器。方括号表示地址 。 BL为8位的寄存器,决定了这条指令为8位的数据传送指令 。,15,MOV BX, 3200H ;将偏移地址为3200H为首地址的连续两个内存单元的内容传送给BX寄存器。 BX为16位的寄存器,决定了这条指令为16位的数据传送指令 汇编指令中存储器操作数的地址都是逻辑地址,例如上面指令中的 2000H和3200H,都是段内偏移地址,它们的段基址由DS指明。 在通常情况下,存储器操作数的默认在数据段,段基址在DS。在特殊说 明的情

10、况下,存储器操作数的段基址也可以替换为CS、ES或SS。,16,17,表3-1 8088/8086CPU系统中逻辑地址的来源,MOV BL, 2000H ;将DS:2000H之内容送入BL MOV BX, 3200H ;将DS:3200H之内容送入BX 设DS=A000H,则:A000H*10H+3200H=A3200H 如下图:,18,功能: 将A3200H之内容送入AL 将A3201H之内容送入AH,如果操作数的段基址不是DS段,指令中要特别说明。例如在ES段,指令应书写为: MOV BX, ES:3200H 这种用法称为段超越,其中冒号“:”为段超越符。 此操作数的物理地址为: ES X

11、 10H+3200H。,19,3. 寄存器寻址(Register Addressing),操作数在CPU内部的寄存器中,例如: MOV BL,2000H ;目的操作数BL为寄存器寻址。 ADD AX,BX ;源和目的操作数的都是寄存器寻址。 再如: MOV AL,BL MOV AX,DX MOV DS,AX MOV SI,BP,20,4. 寄存器间接寻址,操作数在内存中,内存单元的偏移地址存放在寄存器中。 MOV AX, SI 源 操作数SI的寻址方式为寄存器间接寻址 SI的内容为内存单元的偏移地址,DS为段基址, 以DS X 10H+SI为首地址,取出连续两个内存单元的数据传送给AX。 如果

12、DS=2000,SI=02H, 指令的执行结果为AX=C396H,21,再如: MOV DX, DI ;将DS:DI指明的连续两个内存单元的数据传送到DX。 MOV BX, AX ;AX的内容传送到DS:BX指明的连续两个内存单元中。 MOV CX, BP ;将SS:BP指明的连续两个内存单元的数据传送到CX。,22,8086CPU中能够作为寄存器间接寻址方式使用的寄存器只有4个:BX、BP、SI、DI。这4个寄存器在作为间接寻址使用时,要用 申明,这时常称为它们为地址指针或间址寄存器。 BP在作为间址寄存器时,段基址默认为SS;其它3个的默认段基址为DS。都可以段超越。 例如: MOV DX

13、, ES:DI 上述指令的功能为:从物理地址为ES X 10H+DI的内存单元取出两个字节的数据传送给DX。,23,5. 寄存器相对寻址,操作数在内存中,内存单元的偏移地址一部分由间接寻址寄存器提供,一部分是指令给定的8位或16位地址位移量,二者相加形成操作数的有效地址。例如: MOV AX, BX+DATA ;将以BX+DATA为首地址的连续两个内存单元的数据传送给AX MOV AL, SI+20H MOV CX, DI+DATA MOV DX, BP+DATA,24,例:MOV AX,DATABX 假设:(DS)=6000H, (BX)=1000H, DATA=08H 则内存单元的物理地址

14、为:6000X10H+1000H+08H=61008H 指令的执行情况如下:,25,61008H,码段,数据段,(AX)=5566H,上述指令的书写格式很灵活,也可以如下书写: MOV AX, BX+DATA MOV AL, 20H SI MOV CX, DATA DI MOV DX, DATA+ BP 这种寻址方式可用于存取数据表中的数据,用间址寄存器存放数据表首地址,地址位移量指明要存取表中的哪一个数据,可以方便地存取数据表中的任何数据。,26,例:某数据表的首地址(偏移地址)为TABLE,要取出该表中第10个字节,并存放到AL中,可用如下指令段实现: MOV SI, 9 MOV AL,

15、TABLE+SI 相对寻址指令的书写格式允许有以下几种: MOV AL, TABLESI MOV AL, SIDATA MOV AL, DATA+SI MOV AL, SI+DATA MOV AL, DATA+SI MOV AL, SI+DATA,27,TABLE,位移量,0,1,2,3,4,5,6,7,8,9,6. 基址-变址寻址,操作数在内存中,基址寄存器和变址寄存器相加作为操作数的偏移地址。 MOV AX, BXSI ;将BX+SI为首地址的连续两个内存单元的数据送给AX。 MOV CX, BPDI ;将BP+DI为首地址的连续两个内存单元的数据送给CX。,28,8086CPU中寄存器B

16、X和BP为基址寄存器,SI和DI为变址寄存器。这种寻址方式中,一个基址寄存器加一个变址寄存器构成操作数,操作数的形式只有4种: BXSI BXDI BPSI BPDI,29,这种寻址方式里段基址是DS还是SS呢?,8086汇编规定以基地址为主,如果基址寄存器为BP,则操作数的段基址默认由SS提供;若BX为基址寄存器,则段基址默认由DS提供。 MOV AX, BXDI ;源操作数的物理地址为:DS X 10H+BX+DI MOV BPSI, DX ;目的操作数的物理地址为:SS X 10H+BP+SI 基址变址寻址方式适用于处理一维数组,可将首地址存放在基址寄存器中,通过修改变址寄存器的内容来访

17、问数组中的各个元素,它比寄存器相对寻址更加灵活。,30,7、基址-变址寻址相对寻址,操作数在内存中,操作数的地址由基址寄存器加上变址寄存器再加上地址位移量构成。 MOV AX, DATABXSI MOV AX, BPDI DATA 假设:(DS)=8000H, (BX)=2000H, (SI)=1000H, DATA=0200H 则操作数DATABXSI的物理地址为: 8000H X 10H+2000H+1000H+0200H=83200H 这种寻址方式主要用于二维数组操作。地址位移量作为数组首地址,两个寄存器分别作为行和列的地址指针,可以很方便实现数据阵列检索,31,基址-变址相对寻址指令的

18、书写格式允许有以下几种: MOV AX, DATASIBX MOV AX, BX+DATASI MOV AX, BX+DATA +SI MOV AX, BXDATASI MOV AX, BX+SIDATA 下列指令是非法的: MOV AX, DI+SI+DATA MOV AX, BX+BP+DATA,32,8、隐含寻址 操作码本身隐含地指明了操作数或部分操作数的地址。 如:MUL BL; AL X BL AX,33,CPU的寻址方式总结:,获得操作数所在地址的寻址方式: 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 寄存器相对寻址 基址-变址寻址 基址-变址相对寻址 隐含寻址,34,MOV

19、AX, 3102H MOV AL, 4000H MOV AL,BL MOV AX,ES:SI MOV AX,SI MOV AX,DATABX MOV AX, BXSI MOV AX, DATADIBX MUL BL;,3.3 8086/8088 CPU指令系统,指令系统分为六个功能组: 1、数据传送指令 2、算术运算指令 3、逻辑运算指令 4、串操作指令 5、控制传送指令 6、处理器控制指令,35,指令中常用的一些符号约定: OPRD 各种类型的操作数 src 源操作数 dst 目的操作数 acc 累加器AX或AL port 输入输出端口 count 计数器 mem 存储器 存储单元内容 :

20、段超越符,3.3.1 数据传送类指令,36,数据传送指令细分为通用数据传送指令、端口输入输出指令、地址传送指令和标志寄存器传送指令。,1. 通用数据传送指令MOV,PUSH,POP,XCHG,XLAT,(1)MOV 指令格式:MOV dst, src 立即数到通用寄存器的数据传送 MOV AL, 4 ;AL=4 MOV AX, 1000H ;AX=1000H MOV SI, 037BH ;SI=037BH 但是:MOV DS, 2000H ;语法错误,不能用立即数给段寄存器赋值。 应该为: MOV AX, 2000 MOV DS, AX,37,立即数到存储单元的数据传送 MOV WORD PT

21、RDI, 2000H 将立即数2000H传送到内存单元,内存单元的地址以间接寻址的 方式由DI提供。 设DS=3000H,DI=1500H,目的操作数的物理首地址为31500H,38,PTR是属性运算符,功能为修改操作数的类型。 WORD PTR的作用是将操作数的类型设置为字类型。 BYTE PTR将操作数的类型设置为字节类型。 例如: MOV BYTE PTRSI, 4AH 将立即数4AH传送到内存单元,内存单元的地址以间接寻址的方式 由SI提供,传送一个字节。 MOV DI, 04AH ;语法错误:源和目的操作数的类型都不确定。 MOV指令中的两个操作数的类型必须至少有一个是确定的,另 一

22、个依附这一个。属性运算符PTR帮助我们确定存储器操作数的类型。,39, CPU内部寄存器之间的数据传送 MOV AL, BL ;BL传送给AL,传送一个字节。 MOV AX, BX ;BX传送给AX,传送一个字。 MOV DS, AX ;给数据段寄存器赋值。 MOV SI, BP ;BP传送给SI,传送一个字。 寄存器与存储单元之间的数据传送 MOV AL, 2000H MOV AX, SI MOV 3200H, CX MOV ARRYDI, DL MOV DL, BXSI,40,MOV CL, BPDI 设 (SS)=8000H ,(BP)=1020H ,(DI)=0383H , 内存单元

23、(813A3H)=44H 上面指令执行后: 则(CL)=44H,41,SS,1020H,BP,813A3H,44H,指令对操作数的要求:,MOV指令的两个操作数类型必须相同; MOV AX,BL ; 错误! 两个操作数不能同时为存储操作数; MOV BX,SI ; 错误! 不能用立即数直接给段寄存器赋值; MOV DS,3000H ; 错误! 两个操作数不能同时为段寄存器; MOV DS, ES ; 错误! MOV指令不能访问IP和Flags; MOV指令不影响标志寄存器的任何标志位 ; 不允许给CS赋值。,42,MOV指令实现数据块传送,例:把内存中首地址为MEM1的200个字节送到首地址为

24、MEM2的区域; MOV SI,OFFSET MEM1 MOV DI,OFFSET MEM2 MOV CX,200 NEXT: MOV AL,SI MOV DI,AL INC SI INC DI DEC CX JNZ NEXT HLT,43,MEM1,MEM2,(2)PUSH、POP指令,堆栈是程序在内存中开辟的一个数据区,用以保存寄存器或存储器中暂时不用而又必须保存的数据。堆栈的段基址放在SS中,堆栈指针为SP; 堆栈是一种线性表,只在栈顶(低地址端)进行输入输出操作。CPU对堆栈的操作采用先进后出(或后进先出)存取方法。CPU把数据存入堆栈称为压入堆栈PUSH,从堆栈中取出数据称为弹出堆栈

25、POP。 指令格式: PUSH src ;压栈指令 POP dst ;出栈指令,44,堆栈存取规则如下: 1. 每次存取一个字(16位); 2. 存放数据时,从高地址向低地址; 读取数据时正好相反; 3. SP总是指向栈顶; 压入操作数时 SP减2, 弹出操作数SP加2; 4. 操作数不能是立即数; 5. 后进先出(LIFO)的原则; 6. 参数传递、子程序调用、中断响应,45,SS10H,SP,50000,5FFFF,堆栈增长方向,堆栈段,栈顶,栈底,例: PUSH AX 设(AX)=1122H,SP=FFFE,SS=1000H 执行: SP-1 SP AH SP SP-1 SP AL SP

26、 SP=FFFCH 例: PUSH AX PUSH DI PUSH WORD PTR1000H PUSH WORD PTRSI PUSH WORD PTRBP+6,46,SS段,SP,SS X 10H,堆栈段,10000H,1FFFFH,例: 设SS=2000H,SP=102H,AX=623EH,执行下面指令后: PUSH AX SS=2000H,SP=100H, AX的数据62H存入20101H单元,3EH存入20100H单元。,47,20000H 20100H 20101H 20102H 20103H 2FFFFH,3EH 62H FFH 79H,栈底,POP AX 执行过程: SP AL

27、 SP+1 SP SP AH SP+1 SP,48,SS段,SP,SS 10H,SS段,SP,SS10H,MOV AX, 9000H MOV SS, AX MOV SP, 0E200H MOV DX, 38FFH PUSH DX PUSH AX POP AX POP DX,49,SS段,9E200H,90000H,9E1FCH,9E1FDH,9E1FEH,9E1FFH,SS段,9E200H,90000H,9E1FCH,9E1FDH,9E1FEH,9E1FFH,堆栈的作用,主要用来存放寄存器或存储器中暂时不用又必须保存的数据。如调用子程序或响应中断时保护断点地址; 堆栈操作数可以是16位通用寄存

28、器、段寄存器、存储器; PUSH和POP一般是成对出现的,且执行顺序相反,以保持堆栈原有的状态。,50,51,(3)交换指令XCHG 指令格式:XCHG OPRD1,OPRD2 功能:两个操作数交换。 说明:操作数可以是通用寄存器,不能是段寄存器;可以是存储器单元,但两个操作数不能同时为存储器操作数。操作数的字长必须相等。 例如: XCHG AX, BX XCHG AL, SI XCHG BX+DI, CX,52,(4)字节转换指令XLAT XLAT主要用于查表转换,隐含寻址。指令功能是将内存单元BX+AL的单字节内容传送给AL寄存器,指令执行前后AL的内容发生转换。在使用XLAT指令前,需要

29、预置DS:BX指向一张表,BX作为表的首地址。如果查表中第9个字节的内容,需要预置AL为9。 指令格式:XLAT,【例题3-1】 在DS数据段中存放有LED显示器7段码值表,TABLE为表首地址,查表取出LED显示器显示数字3 的码值,其中LED端口地址为88H。 MOV BX, OFFSET TABLE MOV AL, 3 XLAT OUT 88H, AL ;LED显示数字3 (4FH)。,2. 输入输出(I/O)指令,8086 CPU对所有输入/输出端口统一管理,提供了一个与内存储器地址空间分开的、完全独立的地址空间,I/O端口的地址有8位和16位两种形式。 直接端口寻址方式:当端口地址是

30、8位的二进制数时,可以在指令中直接使用该地址。 寄存器间接寻址方式:当端口地址为16位,不能直接使用,需要预先将其传送到DX寄存器中,并且只能是DX作为间接寻址寄存器。,53,cpu与外设进行数据传输,接口电路需要设置若干专用寄存器,缓冲输入输出数据,设定控制方式,保存输入输出状态信息,这些寄存器常称为端口,54,输入指令IN 格式: IN ACC, port ;直接寻址,8位port 为立即数端口地址。 或 IN ACC, DX ;间接寻址,DX存有16位端口地址。 例如: IN AL, 60H ;从60H端口输入一个字节。 IN AX, 60H ;从60H端口输入一个字 IN AL, DX

31、 ;从DX端口中输入一个字节。 IN AX, DX ;从DX端口中输入一个字。,输出指令OUT 格式: OUT port, ACC ;直接寻址,port 为8位立即数端口地址 或 OUT DX, ACC ;间接寻址,DX存有16位端口地址。 例如: OUT 60H, AL ;AL从60H端口输出。 OUT 60H, AX ;AX从60H端口输出。 OUT DX, AL ;AL从DX端口中输出。 OUT DX, AX ;AX从DX端口中输出。,55,【例题3-2】从并行口0378H输出一个字符A。 MOV DX, 0378H MOV AL, A OUT DX, AL,56,3. 地址传送指令LE

32、A,LDS,LES,57,(1)取有效地址指令LEA 指令格式:LEA dst , src 功能:把源操作数的地址偏移量传送到目的操作数。 说明:源操作数必须是存储器操作数,目的操作数必须是16位寄存器。 例如: LEA BX, TABLE ;TABLE的偏移地址传送给BX, ;TABLE为符号变量。 LEA SI, DATABX ;(SI)=(BX)+DATA,设BUFF为符号变量,比较下面两条指令的功能: MOV DI, OFFSET BUFF LEA DI, BUFF 上面两条指令的功能完全相同,但LEA指令更简洁。OFFSET为取值运算符,又称为数值返回运算符,用以求出变量或标号的属性

33、值。常见的取值运算符还有SEG。 SEG运算符用以求出变量或标号所在段的段基址。 例如: MOV AX, SEG BUFF ;BUFF的段基址送AX。 MOV DS, AX OFFSET用以求出变量或标号的偏移地址。例如: MOV SI, OFFSET BUFF ;BUFF的偏移地址送AX。,58,例:设(BX)=1000H, (DS)=6000H, 内存单元(61050H)=33H, (61051H)=44H;比较一下两条指令的执行结果: LEA BX,BX+50H MOV BX,BX+50H,59,61050H 61051H,DS段,LEA BX,BX+50H,MOV BX,BX+50H,

34、60,4. 标志寄存器传送指令LAHF,SAHF,PUSHF,POPF 这4条指令都是隐含寻址方式。 LAHF指令 指令格式:LAHF 功能:把标志寄存器Flags的低8位装入AH寄存器。 SAHF指令 指令格式:SAHF 功能:把AH传送到Flags的低8位,指令影响标志位。 PUSHF指令 指令格式:PUSHF 功能:把Flags压入堆栈。 POPF指令 指令格式:POPF 功能:从堆栈中弹出两个字节传送给Flags,指令影响标志位。,3.3.2 算术运算指令,8088/8086CPU提供了加、减、乘、除4种基本算术运算指令,可以实现二进制数的运算也可以实现十进制数运算。可以实现字节运算也

35、可以实现字运算。可以进行有符号数运算也可以进行无符号数运算,有符号数运算以补码形式进行。这4种算术运算指令都对标志位产生影响。算术运算指令应尽量使用累加器作操作数。,61,62,1. 加法运算指令和调正指令ADD,ADC,INC,AAA,DAA (1)不带进位的加法运算指令ADD ADD指令完成两个操作数相加,并将结果保存在目的操作数中。 指令格式: ADD OPRD1, OPRD2 功能:操作数OPRD1与OPRD2相加,结果保存在OPRD1中。 说明:操作数OPRD1可以是累加器AL或AX,也可以是其它通用寄存器或存储器操作数,OPRD2可以是累加器、其它通用寄存器或存储器操作数,还可以是

36、立即数。OPRD1和OPRD2不能同时为存储器操作数,不能为段寄存器。ADD指令的执行对全部6个状态标志位产生影响。,63,1 1 0 1 1 0 0 1 + 0 1 1 0 1 1 1 0 10 1 0 0 0 1 1 1,例如: ADD AL, BL ;AL+BL结果存回AL中。 ADD AX, SI ;AX+SI结果存回AX中。 ADD BX, 3DFH ;BX+03DFH结果存回BX中。 ADD DX, DATABP+SI ;DX与内存单元相加,结果存回DX中。 ADD BYTE PTRDI, 30H ;内存单元与30H相加,结果存回内存单元中。 ADD SI, AX ;内存单元SI与

37、AX相加,结果存回SI中。 ADD BX+SI, AL ;内存单元与AL相加,结果存回内存单元中。,【例题3-3】求D9H与6EH的和,并注明受影响的标志位状态。 MOV AL, 0D9H MOV BL, 6EH ADD AL, BL 结果AL=47H,标志位CF=1,PF=1,AF=1,ZF=0,SF=0,OF=0,64,(2)带进位的加法运算指令ADC ADC指令完成两个操作数相加之后,再加上Flags的进位标志CF。CF的值可能为1或0。 指令格式: ADC OPRD1, OPRD2 功能:操作数OPRD1与OPRD2相加后,再加上CF的值,结果保存在OPRD1中。 说明:对操作数的要求

38、与ADD指令一样。 例如: ADC AL, BL ADC AX, BX ADC DI, 30H ADC指令主要用于多字节数的加法运算,以保证低位向高位的进位被正确接收。,【例题3-4】求3AD9FH与25BC6EH的和,结果存放在DX:AX中。 MOV AX, 0AD9FH ;AX=AD9FH MOV BX, 0BC6EH ;BX=BC6EH ADD AX, BX ;AX=6A0DH,CF=1 MOV DX, 03H ;DX=3 ADC DX, 25H ;DX=29H, 结果DX:AX=296A0DH,65,66,(3)加1指令INC 加1指令又称增量指令,指令不影响CF标志位。 指令格式:I

39、NC OPRD 功能:OPRD加1后送回OPRD。 说明:操作数OPRD可以是寄存器或存储器操作数,指令可以完成字节或字的加1操作。 例如: INC AL INC AX INC BYTE PTRSI INC WORD PTRBX+DI (4)十进制数加法调正指令AAA、DAA ADD和ADC指令允许BCD数作为操作数进行加法运算,我们得以按照十进制数的方式完成加法运算。但是CPU在完成运算时依然按照二进制数进行,所以在ADD或ADC指令之后,应进行十进制的调正。,67,2. 减法运算指令SUB,SBB,DEC,NEG,CMP,AAS,DAS (1)不带借位CF的减法指令SUB 指令格式: SU

40、B OPRD1, OPRD2 功能:操作数OPRD1减去OPRD2结果保存在OPRD1中。 说明:操作数OPRD1可以是累加器AL或AX,也可以是其它通用寄存器或存储器操作数,OPRD2可以是累加器、其它通用寄存器或存储器操作数,还可以是立即数。OPRD1和OPRD2不能同时为存储器操作数,不能为段寄存器。SUB指令的执行对全部6个状态标志位产生影响。,68,1 1 0 1 1 0 0 1 - 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 1,例如: SUB AL, BL ;AL-BL结果存回AL SUB CX, BX ;CX-BX结果存回CX SUB DX, SI ;DX与SI

41、内存单元相减,结果存回DX SUB DATABX, CL ;内存单元的数减去CL结果存回内存单元 SUB BL, 2 ;BL-2结果在BL中 SUB WORD PTRBP+SI, 100H ;内存单元减去100H,结果存回内存 【例题3-5】求D9H与6EH相减,并注明受影响的标志位状态。 MOV AL, 0D9H MOV BL, 6EH SUB AL, BL 结果AL=6BH, 标志位CF=0,PF=0,AF=1,ZF=0,SF=0,OF=1,69,(2)带借位CF的减法指令SBB 指令格式:SBB OPRD1, OPRD2 功能:操作数OPRD1减去OPRD2再减去CF的值,结果保存在OP

42、RD1中。 说明:与SUB指令相同。常用于多字节数减法。对全部6个状态标志位产生影响。 例如: SBB AL, 30H ;AL-30H-CF结果存回AL SBB AX, BX ;AX-BX-CF结果存回AX SBB DI, AH ;DI内存单元的数减去AH结果存回内存单 ;元DI中,70,(3)减1指令DEC DEC指令又称为减量指令,指令不影响CF标志位,对其它5个状态标志位产生影响。 指令格式: DEC OPRD 功能:操作数OPRD减1后回送OPRD。 说明:操作数OPRD可以是寄存器或存储器操作数,指令可以完成字节或字的减1操作。 例如: DEC CX DEC CL DEC BYTE

43、PTR ARRAY+SI,71,(4)操作数求补指令NEG 指令格式:NEG OPRD 功能:(0-OPRD) OPRD,即对OPRD包括符号位在内逐位取反后加1,结果回送到OPRD。 说明:OPRD可以是寄存器或存储器操作数。如果操作数非0,指令的执行使CF=1,否则CF=0。对全部6个状态标志位产生影响。 【例题3-6】 MOV AL,31H NEG AL ;AL=CFH,标志位 ; CF=1,PF=1,AF=1,ZF=0,SF=1,OF=0,72,(5)比较指令CMP 指令格式: CMP OPRD1, OPRD2 功能:OPRD1减去OPRD2,结果并不回送给OPRD1。指令影响全部6个

44、状态标志位。 说明:指令的执行不影响两个操作数,操作数不变,但影响6个状态标志位。这条指令后面常跟有条件转移指令,利用CMP指令对Flags标志位的影响,设定程序的执行方向。OPRD1可以是寄存器或存储器操作数,OPRD2可以是立即数、寄存器或存储器操作数。 例如: CMP AL, AH CMP AX, BX CMP SI+DATA, AX CMP CL, 8 CMP POINTERBX, 100H 【例题3-7】从键盘输入数据并判断。 MOV AH, 1 INT 21H ;等待从键盘输入一个字符,并存于AL中。 CMP AL, 0 ;AL与0比较。 JZ ZERO ;是0转移到ZERO处继续

45、执行。 CMP AL, 1 ;如果不是0,是1吗? JZ GOON ;是1转移到GOON处执行。 .,73,3. 乘法指令MUL,IMUL,AAM 8088/8086CPU乘法指令能实现字节乘法和字的乘法。字节乘法的乘积为16位存放在AX中,字的乘法的乘积为32位存放在DX:AX。指令的目的操作数采用隐含寻址方式。 (1)无符号数乘法指令MUL 指令格式:MUL src 功能:如果src为字节类型,累加器AL与src相乘,结果存在AX中;如果src为字类型累加器AX与src相乘,结果存在DX:AX中。 说明:两个乘数的数据类型要相同,指令影响标志位CF,OF位。 例如: MUL AH ;ALA

46、H 结果保存在AX中。 MUL BX ;AXBX结果保存在DX:AX中。 MUL BYTE PTRSI ;ALSI结果保存在AX中。 MUL WORD PTRBX+DI ;AXBX+DI结果保存在DX:AX中。 字节相乘的乘积在AX中,如果标志位CF=OF=1,表明AH不为0;字相乘的乘积在DX:AX中,如果标志位CF=OF=1,表明乘积的高位DX不为0。,74,(2)有符号数乘法指令IMUL 指令格式: IMUL src 功能:指令的功能和用法与MUL指令相同,只是操作数为带符号数,结果也是带符号数。说明:指令影响标志位CF、OF位。如果标志位CF=OF=0,表明乘积的高位部分是低位的符号扩

47、展,可以忽略。如果标志位CF=OF=1,表明DX含有乘积的高位,不能忽略。 (3)乘法的十进制调正指令AAM AAM指令完成AL中数的调正。使用AAM的前提是两个非压缩BCD码相乘,乘积在AL中,AH=0。 指令格式:AAM 功能:把AL寄存器的内容除以0AH,商存在AH中,余数存在AL中。 例如: MOV AL, 8 MOV BL, 7 MUL BL AAM ;AH=5,AL=6,75,4. 除法指令DIV,IDIV,CBW,CWD,AAD 除法指令包括无符号数除法指令DIV,带符号数除法指令IDIV。这两条指令都隐含了被除数AX或DX:AX,除数可以是寄存器或存储器操作数,但不能是立即数。被除数的字长要求是除数字长的两倍,如果除数是字节类型,被除数必须是字类型而且要预置在AX中;如果除数为字类型,被除数必须是双字类型而且要预置在DX:AX中。 (1)无符号数除法指令DIV 指令格式:DIV OPRD 功能:如果OPRD是字节类型,被除数AX除OPRD,结果的商存到AL中,余数存到AH中;如果OPRD是字类型,被除数DX:AX除OPRD,结果的商存到AX中,余数存到DX中。,说明:在指令执行前,必须检查被除数的长度,如果不符合要求,要用位扩展指令来转换。 例如: DIV BL DIV BX DIV BYTE PTRS

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|