ImageVerifierCode 换一换
格式:PPT , 页数:143 ,大小:2.34MB ,
资源ID:4377452      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-4377452.html】到电脑端继续下载(重复下载不扣费)。

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

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微型计算机系统原理及应用 第2章 指令系统.ppt)为本站会员(tkhy51908)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

微型计算机系统原理及应用 第2章 指令系统.ppt

1、1,第2章 微型计算机指令系统,2.1 寻址方式 2.2 8086指令系统,2,一、概述,指令:指令是指示计算机完成特定操作的命令 指令系统:指令系统是计算机能够执行全部命令的集合,它取决于计算机的硬件设计。指令系统因机而异,没有通用性。,3,指令格式:,操作码 操作数,操作数,源操作数: 指令加工之前的数据 目的操作数:指令加工之后形成的数据,4,指令中的操作数表征方法:,表征参加操作的数据本身 立即数表征数据存放的地址,寄存器存储器,5,指令中的操作数表征方法:,表征参加操作的数据本身 立即数表征数据存放的地址,寄存器存储器,6,1、立即数操作数: 表示参加操作的数据本身,可以是8位或16

2、位例: MOV AX,1234H ; AX 1234HMOV BL,22H 注意: 1)立即数只能用作源操作数,如MOV AL,86H MOV 86H,AL 2)立即数必须和其他操作数位数相等MOV AL,3456H MOV AX,34H 3)立即数不能直接送段寄存器,7,2、寄存器操作数:表示参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOV AX,BX MOV DL,CH,8,3、存储器操作数 表示当前参加运算的操作数存放在内存数据区中,指令中直接或间接的给出此操作数的地址。 操作数的物理地址=段地址+偏移地址=段基址16+偏移地址 段基址一般由数据段寄存器DS的内容来确

3、定; 段内偏移地址(有效地址EA)由指令的操作数部分指明。EA是不带符号的16位数,表示操作数所在地址与所在段的首址之间的字节距离。,9,例:MOV AX,1200HMOV AL, 1200HMOV AL, BX,10,2.1寻址方式:寻找指令中操作数所在地址的方法 1. 立即寻址 指令操作数部分直接给出指令的操作数,它与指令操作码相接,顺序存放在代码段中。,11,注意: (1) 立即数寻址方式只能用于源操作数,主要用于给寄存器或存储单元赋值。 (2) 立即数寻址方式不执行总线周期,执行速度快。,2. 寄存器寻址方式 操作数放在寄存器内,由指令直接给出某个寄存器的名字,以寄存器的内容作为操作数

4、。 寄存器可以是16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器,也可以是8位的AH、AL、BH、BL、CH、CL、DH、DL寄存器。,12,例2: MOV AX,CX DEC AL 注意: (1) 寄存器寻址方式的指令操作在CPU内部执行,不需要执行总线周期,执行速度快。 (2) 寄存器寻址方式既适用于指令的源操作数,也适用于目的操作数,并且可同时用于源操作数和目的操作数。,13,3. 直接寻址方式 操作数在存储器中,指令中直接给出操作数所在存储单元的有效地址EA,即段内偏移地址,表示操作数所在存储单元距离段首址的字节数。有效地址是一个无符号的16位二进制数。 例3:MOV AH

5、,2100H ;将DS段中2100H单元的内容送给AHMOV AX,2100H ;将DS段中2100H单元的内容送给AL ;2101H单元的 内容送给AH。MOV 1000H,AH ; DS:1000H(AH),14,DS=3000H MOV AX,2000H,15,注意: (1) 直接寻址方式的操作数所在存储单元的段地址一般在数据段寄存器DS中。 (2) 如果操作数在其他段,则需要在指令中用段超越前缀指出相应的段寄存器名。,例4:MOV AH, ES 2000H 将附加段寄存器ES的内容乘16,再加上2000H作为操作数所在存储单元的地址,取出该存储单元的内容送到寄存器AH中。,16,4.

6、寄存器间接寻址方式操作数在存储器中,指令中寄存器的内容作为操作数所在存储单元的有效地址EA(偏移地址)。寄存器仅限于BX、BP,SI、DI。当使用BX、SI、DI作为间址寄存器时,操作数所在存储单元的段地址存在数据段寄存器DS中,当使用BP时,操作数所在存储单元的段地址存在堆栈段寄存器SS中。,17,MOV BX,SI,18,例5:已知: DS=2100H,DI=2000H指令: MOV AX,DI解: 物理地址=16DS+DI=162100H+2000H=23000H指令执行结果是将23000H和23001H单元的内容送入寄存器AX中。 注意: 1. 只有SI,DI,BX,BP 可作为间址寄

7、存器,如 MOV AX,CX 2. 若操作数所在存储单元不在数据段DS中,需要在指令中用段超越前缀表明其所在段的段名。,19,5. 变址寻址方式 操作数在存储器内,指令将变址寄存器SI、DI内容与指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)。段地址规定为DS的内容。,例7:DS=3000H,SI=1000H,COUNT=2000H指令: MOV AX,COUNTSI 解:物理地址=16DS+SI+16位偏移量=30000H+1000H+2000H=33000H指令执行结果是将33000H和33001H单元的内容送入寄存器AX中。,20,MOV AX,2DI;AX (DS

8、:(DI)+2) MOV AX,DI+2;AX (DS:(DI)+2) MOV BX,COUNT SI,21,6. 基址寻址方式 操作数在存储器内,指令中寄存器(BX或BP)的内容与指令指定的位移量之和作为操作数所在存储单元的有效地址EA(偏移地址)。使用BX时,段地址为DS的内容;使用BP时,段地址为SS的内容。,22,例6:SS=2000H,BP=1000H,COUNT=2000H (16位偏移量) 指令: MOV AX,COUNTBP 解:物理地址=16SS+BP+16位偏移量=20000H+1000H+2000H=23000H指令执行结果是将23000H和23001H单元的内容送入寄存

9、器AX中。MOV BL,2BX 或 MOV BL,BX+2 ;(DS:BX+2)BL,23,7. 基址加变址寻址方式 操作数在存储器内。指令将基址寄存器BX、BP与变址寄存器SI、DI的内容之和再加上偏移量(8位或16位),得到操作数所在存储单元的有效地址EA。当使用BX时,段寄存器为DS。当使用BP时,段寄存器为SS。,24,例8:已知: DS=2000H,BX=1000H,SI=0500H,MK=1120H指令: MOV AX, MKBXSI解: 物理地址=20000H1000H0500H 1120H =22620H指令执行结果是 将22620H、22621H单元 的内容送入寄存器AX中。

10、,25,MOV AX,BXSI,26,例:设BX=0 158H, DI=10A5H, 位移量=1B57H,DS=2100H,求各寻址方式下,有效地址和物理地址。 MOV AX,1B57H 直接寻址: MOV AX,BX 寄存器间接寻址(寄存器为BX):MOV AX,BX+1B57H 基址寻址:,有效地址=1B57H物理地址=21000H+1B57H=22B57H 有效地址=0158H物理地址=21000H+0158H=21158H有效地址=0158H+1B57H=1CAFH物理地址=21000H+1CAFH=22CAFH,27, MOV AX,DI 变址寻址(寄存器为DI): MOV AX,D

11、I+1B57H 变址寻址: MOV AX,BX+DI+1B57H 基址加变址的寻址(BX为基址寄存器,DI为变址寄存器):,EA=10A5H物理地址=21000H+10A5H=220A5HEA=10A5H+1B57H=2BFCH物理地址=21000H+2BFCH=23BFCHEA= 0158H+10A5H+1B57H=2D54H物理地址=21000H+2D54H=23D54H,28,寻址方式举例,例:MOV AX,1000H ;AX=1000H MOV DS,AX ;DS=1000H MOV AX,3000H ;AX=3000H MOV SS,AX ;SS=3000H MOV AX,22A0H

12、 ;AX=22A0H MOV BX,AX ;BX=22A0H MOV BP,AX ;BP=22A0H MOV SI,AX ;SI=22A0H MOV DI,AX ;DI=22A0H MOV AX,22A0H ;AX=2010H MOV AX,SS22A0H ;AX=6050H MOV AX,BX+100H ;AX=4030H MOV AX,BP+100H ;AX=8070H MOV AX,DI+100H ;AX=4030H MOV AX,BP+DI+100H ;AX=90H,29,2.2 8086的指令系统,指令系统包括九大类、133种基本指令,通过寻址方式的变化与数据形式(字节、字型)的组合

13、,可构成上千条指令。指令系统按功能分为数据传送类、算术运算类、逻辑运算与移位类、串操作类、控制转移类、处理机控制类,本节将分别说明。 目标:熟练掌握8086系统常用指令及各类寻址方式读懂简单的程序,30,2.2.1数据传送指令 数据传送类指令实现CPU内部寄存器之间、CPU与存储器之间、CPU与I/O端口之间的数据传送。 1. 通用数据传送指令 包括 MOV、进栈、出栈指令、交换指令和换码指令。 (1)一般数据传送指令 MOV(8位/16位)格式:MOV OP目,OP源功能: OP源 OP目 要求:OP目 可以是寄存器(除CS外)、存储器OP源可以是寄存器、存储器和立即数,31,32,例: M

14、OV AL,BL ; BL寄存器的内容送ALMOV SP,2AC0H ; 立即数2AC0H送SPMOV DI,AX ; AX中的16位数送DI和DI+1单元MOV SI,ES:BP ; 附加段中BP所指向的两个单 元的内容送SI寄存器,33,注意: MOV指令的两个操作数(源、目的)均可采用不同的寻址方式。 源操作数和目的操作数的类型必须一致 不允许把立即数作目的操作数,也不允许向段寄存器直接送立即数。 不允许在段寄存器之间、存储器单元之间直接传送数据。 CS、IP寄存器不能用作目的操作数。MOV CS,AX 一般传送指令不影响标志位。,例:判断下列指令正确与否:MOV AL, BLMOV C

15、X, BXMOV DX, 34HMOV ES, AXMOV SI, CXMOV DI, SI MOV 2000H, AX MOV DS, 1234H MOV BX, DLMOV CS, BX,35,(2) 堆栈操作指令 堆栈:是按“先进后出”原则工作的一段存储器区域。堆栈寄存器SS段地址 堆栈指针SP始终指向当前栈顶所在的存储单元地址,即最新入栈数据所在的存储单元的地址。压栈操作:PUSH OP功能:把OP字数据压入栈中,结果SP-2SP原则:高字节压在高地址,低字节压在低地址 执行过程: SPSP-1; SP OPHSPSP-1 ; SP OPL,36,例:MOV AX,3456HPUSH

16、AX SP-1 SP,压AH (2) SP-1 SP,压AL,SP, SP SP-1,SP,34,56, SP SP-1,37,出栈操作: POP OP功能:从栈中弹出数据 OP,结果SP+2SP执行过程: OPL SP; SPSP+1 OPHSP ; SPSP+1,例:POP DX弹出AL DL, SP+1 SP (2) 弹出AH DH, SP+1 SP,SP, SP SP+1, SP SP+1,38,例:将CX的内容压入堆栈,然后,弹出栈顶至CX中, 已知 (SS)0200H,(SP)0008H,(CX)12FAH。,39,40,例:已知: AX=1122H,BX=3344H,SP=101

17、0H执行指令: PUSH AXPUSH BXPOP AXPOP BX执行后AX,BX,SP的结果?,解:执行结果为 AX=3344HBX=1122HSP=1010H,41,注意: 堆栈操作总是按字(16位)进行的。 操作数可以是存储器、寄存器或段寄存器操作数( CS不能用于POP ),不能是立即数。PUSH CS POP CS PUSH 1200H POP 2300H 这两条指令主要用来进行现场保护和恢复,以保证子程序调用或中断程序的正常返回。,42,(3) 数据交换指令(8/16位)格式: XCHG OP1,OP2功能:实现OP1和OP2内容的相互交换。操作数:通用寄存器或存储器,但不能均为

18、内存单元。 注意: 段寄存器和IP不能作为交换指令的操作数。,例:XCHG AX, BX XCHG BH, BL XCHG AX, 1122H XCHG DS, AX XCHG SI, BP XCHG SI, DI ,43,46,(4) 换码指令(查表指令、翻译指令),44,例:数据段中存放有一张16进制数的ASCII码转换表,设首地址为2000H,查表查出第10个元素A的ASCII码(设DS=4000H)。,可用如下指令实现: MOV BX,2000H ;BX表首地址 MOV AL,0AH ;AL序号 XLAT ; 查表转换执行后得到:AL=41H,45,2. 输入输出指令CPU对外设端口有

19、两种寻址方式,即直接寻址和间接寻址。直接寻址范围为00HFFH个端口;间接寻址范围为0000H0FFFFH共64K个端口。间接寻址时,只能用DX作间址寄存器。 1. 输入指令格式: :IN 累加器,端口功能: 把一个字节/字由输入端口传送到AL/AX中.例: IN AL,21H ;将端口21H的8位数读到AL中IN AX,21H MOV DX,201H IN AL,DX IN AX,DX,46,2. 输出指令格式:OUT 端口,累加器功能:把AX中的16位数或AL中的8位数输出到指定端口。 例:OUT 22H ,AL ;将AL中的数传到22H端口MOV DX,511H OUT DX ,AX,4

20、7,3. 目标地址传送指令 此类指令的功能是将操作数所在存储器的地址送入目标寄存器。 注意: 1. OP源必须是存储器操作数,OP目必须是16位的通用寄存器 。2. 地址传送指令不影响状态标志位。,(1)取有效地址EA指令: 格式:LEA OP目, OP源 功能:将源操作数的有效地址EA送到目的操作数。 例: LEA AX,5678H; AX 5678H LEA BX,BP+SI;BX BP+SI,48,符号地址,49,(2)指针送寄存器和DS指令格式: LDS OP目,OP源功能:把OP源指定的4个字节内容取出,低地址的两字节OP目,高地址的两字节DS。 例:LDS DI,2130H;213

21、0H和2131H单元中的内容DI;2132H和2133H单元中的内容DS,50,(3)指针送寄存器和ES指令,格式:LES OP目,OP源 功能:本指令与LDS指令的操作基本相同,所不同的是将OP源4个字节中高地址的两字节ES。 例:LES DI,2130H;2130H和2131H单元中的内容DI; 2132H和2133H单元中的内容ES,51,4. 标志传送指令读取标志指令格式:LAHF ;AH标志寄存器低8位特点: 此指令操作结果不影响标志寄存器。(2) 设置标志指令格式:SAHF ;标志寄存器低8位AH特点: 此指令直接为标志寄存器的低8位赋值。,52,(3) 对标志寄存器的堆栈操作指令

22、格式:PUSHF;将标志寄存器的值压栈。POPF; 从栈顶弹出一个字送标志寄存器。特点: 1.PUSHF不影响标志寄存器,而POPF直接为标志寄存器赋值。2.通常两指令成对出现,用来保护和恢复标志寄存器的内容。,53,2.2.2 算术运算指令8086的算术运算类指令能够对二进制或十进制(BCD码)数进行加、减、乘、除运算,操作数的数据形式可以是8位或16位的无符号数或带符号数。 1. 加法指令 加法指令对操作数的要求与MOV指令相同 (1) 不带进位的加法指令:格式:ADD OP目, OP源 ; 功能:OP目 OP源 + OP目,根据结果设置标志位例:ADD AL,50H ; AL+50HAL

23、ADD DI,SI ; DI+SI DI ADD AX,DI ; (DI)+1:(DI)+AX AXADD AX,DATABX,54,ADD BX+DI,AX ;(BX+DI)和(BX+DI+1)2个单元的内容+AX,结果放在BX+DI和BX+DI+1所指单元 ADD AX,BX+2000H ;BX+2000H 和BX+2001H所指单元内容和AX的内容相加,结果在AX中,注意:两操作数的类型相同,类型明确,不能同为存储器,55,例:判断下列指令正确与否ADD AL, BX ADD CL, CH ADD AX, BX ADD BX, 28 ADD BX, SI ADD 1000H, AX AD

24、D SI, BX ADD DS, BX ,56,(2) 进位的加法指令:格式:ADC OP目, OP源 ; 功能:OP目 OP源 + OP目+CF,置标志位,CF为前面指令产生的CF,说明:主要用于多字节运算,多字节运算时低位字节产生的进位应加到高位。 例:ADC AX,SI ; AX+SI+CFAX 例: 两个双字(32位)相加。123FAB5H+0ABC212AH,MOV DX,0123HMOV AX,0FAB5HADD AX,212AH ; 先加低字,CF=1 AX=1BDFHADC DX,0ABCH ; 高字带进位加 CF=0 DX=0BE0H,57,(3)加1指令格式:INC OP

25、功能:OPOP+1说明:常用于修改偏移地址和计数次数。操作数可以是8/16位通用寄存器或存储器,不能为立即数。 例:INC AL ;ALAL+1INC BYTE PTR BX+DI;BX+DIBX+DI+1INC WORD PTR BX+DI,例:判断对错 INC CL INC DI INC BYTE PTRDI INC 2000H ,58,注意: INC指令不影响CF 位,影响标志位AF、OF、PF、SF和ZF。 操作数视为无符号数。,总结:以上三条指令(ADD、ADC、INC)运算结果将影响状态标志位,但 INC不影响标志CF。,59,例 : 0000 0001+ 0111 1111=10

26、00 0000 以上运算可用两条指令实现:MOV AH,01HADD AH,7FH,由结果可知:CF=0 OF=1 ZF=0 SF=1 AF=1 PF=0,60,BCD码:二进制编码的十进制数,又称为二十进制数。 非组合(非压缩)BCD码:用一个字节表示一位十进制数。 组合(压缩)BCD码:用一个字节表示二位十进制数。,61,调整原则:运算结果9 或 D3(D7)向高位有进位(借位),进行加6(或减6)调整。,62,(4)加法的ASCII调整指令(非组合BCD码的加法调整指令) 格式:AAA 功能:对AL中的由两个非压缩BCD码相加的和进行调整,结果(非压缩BCD码)存于AX中。 调整过程:若

27、AL的低4位大于9或AF=1,则ALAL+6, AF1,CF1,AHAH+1,ALAL&0FH (清除AL的高四位);否则清除AL的高4位以及AF和CF标志;,63,(5) 组合BCD码的加法调整指令格式: DAA功能:对AL中的由两个组合BCD码相加的和进行调整,将结果(组合BCD码)存于 AL中。调整过程: 调整方法与AAA类似,只是此指令要分别考虑AL的高4位和低4位。若AL低4位大于9或AF=1,则AL+6AL,置AF=1;若AL高4位大于9或CF=1,则AL+60HAL,置AF=1 注意:AAA,DAA使用时必须紧跟在ADD或ADC之后 。,64,2. 减法指令 (1)不带借位的减法

28、指令 格式:SUB OP目,OP源功能: OP目 OP目-OP源 ,并根据结果设置标志例:SUB BX,CX ; BX-CXBXSUB AL,SI+2; AL-(SI+2)单元中的数 ALSUB BP+2,CL ;将(BP+2)单元中值-CLBP+2所指的堆栈单元中SUB AL,20 ; AL-20 AL,65,(2)带借位的减法指令格式:SBB OP目,OP源功能:OP目 OP目-OP源 -CF,根据结果设置标志说明:主要用于多字节数据相减的运算例: SBB AX,2030H ; AX- 2030H-CF AX SBB WORD PTR DI+2,1000H ;将DI+2和DI+3所指两单元

29、的内容-1000H-CF, 结果存在DI+2和DI+3所指的单元,66,(3)减1指令格式:DEC OP 功能:OPOP-1;根据结果置标志位,不影响CF。说明:在循环程序中常用来修改循环次数。例:DEC AX ; AX-1AXDEC BL ; BL-1 BLDEC BYTE PTR DI+2 ;将DI+2所指单元的内 容减1,结果送回此单元,67,(4)取补指令格式: NEG OP 功能: 0- OP OP, 将操作数取补后送回源操作数 OP可以是8/16位通用寄存器和存储器操作数, 不能为立即数。说明:利用NEG指令可以得到负数的绝对值 例:NEG AL ; 0- AL ALMOV AX,

30、1 ; AX=0001H NEG AX ; AX=0FFFFH,68,(5)比较指令 :格式:CMP OP目,OP源 功能:OP目-OP源,不回送结果,只根据结果置标志位。 例:CMP AX,BX ;AX-BX,根据结果置标志位CMP AL,20H ; AL-20H,根据结果置标志位 说明:本指令主要通过比较(相减)结果置标志位,表示两个操作数的关系,指令执行的结果不影响目标操作数。 用途:用于比较两个数的大小,可作为条件转移指令转移的条件,69,比较有以下几种情况(以CMP A,B示例说明) 1. 判断两个操作数是否相等:根据ZF判断 2. 判断两个操作数的大小,可分两种情况: (1) 判断

31、两个无符号操作数的大小:根据CF判断,70,71,P82例2.9在内存数据段从DATA开始的存储单元中分别存放了两个8位无符号数,比较大小,将大数传送到MAX单元。LEA BX,DATAMOV AL,BXINC BXCMP AL,BXJNC DONE MOV AL,BX DONE: MOV MAX,AL,72,(6) 非组合BCD码的减法调整指令格式: AAS 功能:对AL中由两个非组合BCD码相减的差进行调整,将结果(非组合BCD码)存于AL中。 调整过程:调整方法与AAA类似,不同的是当AL的低4位9或AF=1时,将AL-6AL,AH-AH,并将AF和CF置1,清除AL的高四位。 (7)

32、组合BCD码的减法调整指令格式: DAS功能:对AL中由两个组合BCD码相减所得的结果进行调整,并将结果(组合BCD码)存于AL中。 调整过程:调整方法与DAA类似,不同的是当AL的低4位9或者 AF=1,则AL-6AL,并置AF=1;而当 AL的高4位大于9或者 CF=1时,则AL-60H AL,并置AF=1。 注意:使用AAS、DAS指令必须紧跟在减法指令之后。,73,例2.7计算4609+3875,假设被加数和加数的每一位数都以ASCII码形式存放在内存中,低位在前。另留出4个存储单元,以存放结果。,74,例2.7计算4609+3875,假设被加数和加数的每一位数都以ASCII码形式存放

33、在内存中,低位在前。另留出4个存储单元,以存放结果。(流程图见P77图2.18),LEA SI,STR1LEA BX,STR2LEA DI,SUMMOV CX,4CLC NEXT:MOV AL,SIADC AL,BXAAAMOV DI,ALINC SIINC DIINC BXDEC CXJNZ NEXT,75,例2.8内存数据段存放了100个带符号数,首地址为AREA1,要求将各数取绝对值后存入以AREA2为首址的内存区。LEA SI,AREA1LEA DI,AREA2MOV CX,100 CHECK:MOV AL,SIOR AL,ALJNS NEXTNEG AL NEXT:MOV DI,AL

34、INC SIINC DIDEC CXJNZ CHECK,76,例2.6:有两个5字节数3B74AC60F8H、20D59E36C1H分别放在自DATA1和DATA2开始的存储区中,低字节在低地址处,编一程序段将两数相加,结果存放于从DATA1开始的单元中。,MOV CX,5 ;循环次数MOV SI,0 ;偏移值CLC ;CF=0 LPER:MOV AL,DATA2SIADC DATA1SI,ALINC SIDEC CXJNZ LPER.,77,例2.8内存数据段存放了100个带符号数,首地址为AREA1,要求将各数取绝对值后存入以AREA2为首址的内存区。LEA SI,AREA1LEA DI,

35、AREA2MOV CX,100 CHECK:MOV AL,SIOR AL,ALJNS NEXTNEG AL NEXT:MOV DI,ALINC SIINC DIDEC CXJNZ CHECK,复习,78,3. 乘法指令 (1) 无符号数乘法 格式:MUL OP 功能:AXALOP 8位数乘法(DX、AX)AXOP 16位数乘法 (2) 带符号数乘法 格式: IMUL OP 功能: 操作同上,但是操作数为带符号数 注意:MUL和IMUL操作数必须在寄存器或存储单元中,79,例:MUL BYTE PTRBX,80,运算结果只影响CF、OF,其他的无定义。 例:已知 AL=0FEH,视为无符号数为2

36、54,视为带符号数,数值为-2。 BH=0AH,视为无符号数为10,视为带符号数,数值为+10。 执行指令MUL BH 后 AX=09ECH,CF=OF=1 执行指令IMUL BH 后 AX=FFECH,CF=OF=0,MUL BL ;ALBLAX中 MUL CX ;AXCX DX AX MUL BYTE PTRDI;AL (DI)AX IMUL BX ;AX和BX中的两个有符号数相乘,结果在DX和AX中,81,(3) 非组合BCD码的乘法调整指令 格式: AAM 功能:对AX中的由两个非组合BCD码相乘所得的结果进行调整,并将调整后的结果存于AX中。 调整过程:AHAL/0AH(商),ALA

37、L%0AH(余数) 注意:本指令必须紧跟在MUL指令之后使用 。,82,4. 除法指令指令要求被除数是除数的双倍字长,即当除数是8/16位时,要求被除数是16/32位的二进制数。 (1)无符号数除法 格式:DIV OP功能:(2) 带符号数除法格式:IDIV OP功能:操作同DIV,但是操作数为带符号数,83,注意: (1) 当除数是字节时,被除数必须放在AX中,当除数是字时,被除数必须放在DX,AX中。(2) 商超出规定的范围时,将产生0号中断。(3) IDIV运算结果余数的符号与被除数相同。(4) 带符号数除法运算中,当被除数位数不够时,则需将被除数扩展到所需的位数。( 8086/8088

38、设有带符号数扩展指令),84,例: DIV CL ;AX/CL,商AL,余数AH DIV WORD PTR DI;DX和AX中32位数除以DI、DI+1所指的16位数,商AX,余数DXIDIV BX ;DX、AX/ BX,商AX,余数DX IDIV BYTE PTR DI ;AX中16位数除以DI所指单元中的8位数,商AL,余数AH,85,(3) 非组合BCD码的除法调整指令 格式: AAD 功能:把AX中的两个非组合BCD码进行调整,然后可按DIV指令实现两个非组合BCD码的除法运算 调整过程: AL10AHAL,AH0 注意:本指令必须在DIV运算前使用 。 例:求73/2=?MOV AX

39、,0703H MOV BL,02H AAD ;(AX)=49H=73 DIV BL ;(AL)=24H,(AH)=01H AAM ;(AH)=03H,(AL)=06H,86,5.转换指令( 符号扩展指令) 字节扩展指令(8位16位)格式:CBW 功能:将AL中的符号位扩展到AH规则:若最高位=1,则执行后AH=FFH 若最高位=0,则 执行后AH=00H 字扩展指令(16位32位)格式: CWD ;功能:将AX中的符号位扩展到DX,规则:若最高位=1,则执行后DX=FFFFH若最高位=0,则执行后DX=0000H这两条指令不影响标志位。,87,例:分析指令执行后的结果 MOV AL,44HCB

40、WMOV AX,0AFDEHCWDMOV AL,86HCBW,结果:AX=0044H结果DX=FFFFH, AX=0AFDEH结果:AX=FF86H,88,例:在内存中,有一个从DATA1开始的存储区。此存储区的前两个字节是一个16位带符号的被除数,第二、三字节是一个16位带符号的除数,其后的四个单元依次存放商和余数。 LEA BX,DATA1 MOV AX,BX CWD IDIV WORD PTR BX+2 MOV BX+4,AX MOV BX+6,DX,89,2.2.3 逻辑运算和移位指令1.逻辑运算指令OP源: 8/16位通用寄存器、存储器操作数或立即数 OP目: 通用寄存器和存储器操作

41、数。除“非”运算外,其余指令都会使OF=CF=0,(1) 逻辑与运算指令格式:AND OP目,OP源功能:对两个操作数按位进行与操作,结果回送OP目。 说明:该指令常用于保留(或屏蔽)若干位二进制数 例:已知AL6,将AL中数的ASCII码转换成非压缩BCD码 AND AL,0FH;AL=06H ,屏蔽高4位(高位清0) ,保留低4位;即对应位为0则清0, 对应位为1则不变,90,例:把AL中的小写字母转换成大写字母AND AL,11011111B 例:判断AL中字符是否为y,不区分大小写。AND AL,11011111BCMP AL,YJZ YES,91,(2) 测试指令格式:TEST OP

42、目,OP源功能:将OP目与OP源进行与运算,不回送结果,只根据结果置标志位。说明:主要用来检测目的操作数的某些位是1或0,根据测试结果,决定转向 例:测试AX中的D15位是1还是0TEST AX,8000H;若D15为1,ZF=0,否则ZF=1 例如,与的结果最高位是1还是0,结果是否为全0,结果中1的个数是奇数还是偶数等,分别由SF、ZF、PF标志位体现。,92,(3) 逻辑或运算指令格式:OR OP目,OP源 功能:对两个操作数进行或运算,结果回送到OP目。 说明:可用于组合某个字,或将某位置1。例:MOV AX,8888H;OR AX,00FFH ;AX=88FFH,将AX的低8位置1,

43、其他位不变。 例:将AL中的非组合BCD码转换成ASC码。OR AL,30H,93,(4) 逻辑异或运算指令 格式:XOR OP目,OP源 功能:对两个操作数进行异或运算,结果回送到OP目。 说明:用于对某个二进制数按位取反或对某寄存器清0。 例: XOR AL,0FFH ; AL数据按位求反 例: MOV AX, 3333H XOR AX, 00FFH ; 结果:AX=33CCH, AH数据保持不变,对AL数据求反。即对应0不变,对应1求反 。,例:寄存器清0(有4条指令可达到AX清0目的):XOR AL,AL ; AL清0MOV AX,0SUB AX,AXAND AX,0,94,(5) 逻

44、辑非运算指令格式:NOT OP功能:对操作数逐位取反后回送到原处。例: MOV AX,1NOT AX ;AX=0FFFEH 注意:(1)该指令只是执行求反操作,而不是求反码指令,对符号位也求反。 (2)不影响标志位。,总结: (1)AND OR XOR TEST均影响标志,CF=0,OF=0,而PF,SF,ZF由结果而定,AF无意义。此类指令可用来清CF,常用于拆字,拼字。 (2)NOT 不影响标志。,95,例:读取端口地址为PORT的外设输入的数据,若输入的数据的第1,2,5位中的任一位不等于零,则转移到NEXT。IN AL,PORTTEST AL,00100110BJNZ NEXT. NE

45、XT: ,96,2. 移位指令,规定:移动一位时由指令中的计数值直接给出;移动两位及以上,则移位次数由CL指定,即必须将移位位数N事先装入CL中。,97,将操作数的内容左移,每移一次,最低位补0,最高位CF。,将操作数的内容右移,每移一次,最高位补0,最低位CF。,将操作数的内容右移,每移一次,最高位不变,最低位CF。,2. 移位指令,算术左移与逻辑左移相同,可用于无符号数乘2操作; 逻辑右移可用于无符号数除2操作; 算术右移可以用于有符号数除2操作。,98,算术逻辑移位指令是双操作数指令,操作数可以是除立即数之外的任何寻址方式;当计数值大于1时,必须使用CL作计数器。例:MOV BX, FF

46、FCHSAR BX,1结果: BX=FFFEH,BX由-4变为-2。例: MOV BL,0CH ;BL=12SHL BL, 1 ; BL=24,99,例: 对AX中无符号数进行乘10运算(设无溢出,乘10后仍为一个字) 分析: AX 10=AX (23+2)=AX 2+AX 23,程序:MOV BX, AXSAL BX, 1 ; 原数2BXMOV CL, 3SAL AX, CL ; 原数23AXADD AX, BX ; 原数10AX,100,3. 循环移位指令,前面指令产生的CF移至最低位,前面指令产生的CF移至最高位,101,循环移位之后,操作数中原来各数位的信息不会丢失,而只是移到了操作数

47、中的其他位或进位标志CF上,必要时还可以恢复。 利用循环移位指令可以对寄存器或存储器中的任一位进行位测试。 例如要求测试AL寄存器中第5位是1还是0。MOV CL,3ROL AL,CL JNC ZERO,102,2.2.4 串操作指令串操作指令实现对内存中地址连续的字节串或字串进行操作,在每次操作后,能自动修改地址,为下一次操作做好准备。串操作分为基本串操作指令和重复前缀指令。基本串操作指令每执行一次只能处理一个数据,与重复前缀指令结合可以处理一串数据。,103,串操作有如下共同点: (1)源串一般存放在数据段(DS,允许段超越),偏移地址由SI指定, 目标串在附加段(ES,不允许段超越),偏移地址由DI指定。 (2) 每执行一次串操作后自动修改指针SI、DI。若方向标志DF=0,则每次操作后SI和DI自动加1(或加2);若DF=1,则每次操作后SI和DI自动减1(或减2)修改。 (3) 串长(字或字节个数)存放在CX中。 注意:在执行指令前必须DS、ES、SI、DI、DF、CX置好需要的值,它们是串操作指令的隐含操作数。源串段地址 DS,目的串段地址ES建立方向标志(CLD使DF=0,STD使DF=1)源串首地址或末地址 SI目的串首地址或末地址 DI串长度 CX,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报