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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(8086指令系统精析.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

8086指令系统精析.docx

1、8086指令系统精析8086指令系统精析3.1 基本数据类型1. IA-32结构的基本数据类型是字节(8位)、字(16位)、双字(32位)、四字(64位,486中引入的)和双四字(128位,Pentium3中引入的)。2. 低字节占用内存中的最低地址,该地址也是此操作数的地址。图:P44 图3-13. 字、双字、四字的自然边界是偶数编号的地址,字的自然边界是偶数编号的地址,双字和四字的自然边界地址要分别能被4和8除尽。4. 数据结构要尽可能在自然边界上对齐5. 对于不对齐的存储访问,处理器要求做两次存储访问操作;而对于对齐的访问,只要进行一次存储访问操作。6. 数字数据类型(学生自学)PPT3

2、.2 8086的指令格式一、 指令格式Label(标号):mnemonic(助记符)argument1(参数1), argument2(参数2), argument3(参数3)其中:1. 标号是一个标识符,后面跟有冒号2. 助记符是一类具有相同功能的指令操作码的保留名3. 操作数的三个参数是任选的,可以有零到三个操作数,操作数参数的数量取决于操作码4. 操作数参数可能是文字或数据项的标识符,也可能是寄存器的保留名或在程序的另一部分声明的赋予数据项的标识符。5. 在算术和逻辑指令中存在两个操作数时,右边的操作数是源,左边的操作数是目的。例如:LOADREG: MOV AX, SUBTOTAL 功

3、能是把由SUBTOTAL表示的源操作数传送至AX寄存器。3.3 8086/8088指令的操作数寻址方式寻找操作数,操作数能定位在指令中、寄存器中、存储单元中以及I/O端口中。1. 立即数用包含在指令中的操作数作为源操作数,这些操作数即为立即操作数。立即数可以是8位或16位,立即数常用来给寄存器或内存单元赋初值。例1 MOV AX , 2056H 结果 ( AH ) = 20H ( AL ) = 56H 例2 MOV AL , 78 H 结果 ( AL ) = 78H2. 寄存器操作数操作数在寄存器中,指令中指定寄存器名8 位操作数, 用 8 位寄存器: AH、AL、BH、BL、CH、CL、DH

4、、DL16 位操作数,用 16 位寄存器: AX、BX、CX、DX、SP、BP、SI、DI CS、DS、SS、ES例1 MOV AX , 2056H 执行后:(AX)=2056H例2 MOV BL , AH 执行前:(BL) = 12H, (AH) = 78H 执行后:(BL) = 78H (AH) = 78H 立即数寻址、寄存器寻址的操作数, 不用在取完指令后再到内存中取数。 以下的 5 中寻址方式,操作数存放在内存中,取完指令后,还需到内存取数。 指令中给出的是该操作数的地址,包括段地址和偏移地址。3. 内存操作数 指令 MOV DS: DI , CL 完成将CL寄存器中的内容传送到以DS

5、为段值,DI为偏移值的内存单元中。例 编程将CL寄存器的内容传送到21000H单元中。PPT地址 21000H2000:1000H ,编程时, DS 存放段地址2000H,DI 存放偏移地址1000HMOV AX, 2000HMOV DS, AX ; (DS) = 2000HMOV DI, 1000H ; (DI) = 1000H MOV DS: DI , CL ;(21000H) = (CL)结果如图所示:PPT(第一页)内存单元的地址由段地址和偏移地址构成 为减短指令长度 指令中只给出偏移地址的来源,段地址由默认关系给出。 MOV AL, 2000H PA= ( DS ) 10H + 20

6、00H 即选择DS寄存器的内容为段地址。 CPU根据偏移地址给出的方式,按默认关系自动选择段寄存器,获取段值,由段值、偏移值构成操作数所在内存单元的物理地址。指令中用 给出偏移地址。操作数的偏移地址又称有效地址EA ( Efficient Address) 按给出偏移地址方式的不同,分为以下5种:直接寻址 MOV AL, 1000H 寄存器间接寻址 MOV AL, BX 寄存器相对寻址 MOV AL, BX + 10H 基址加变址寄存器 MOV AL, BX + SI 相对基址加变址寄存器 MOV AL, BX + SI + 10H (1)直接寻址方式位移量 存储器操作数的有效地址EA在指令中

7、直接给出。 例 MOV AL, 1000H 默认段寄存器为DS。操作数所在内存单元的物理地址为: PA = ( DS )10H + EA 例:MOV AX , 1000 H 若 ( DS ) = 2000H 内存操作数的物理地址为: PA = ( DS )10H +EA = 2000H 10H + 1000H = 21000H 执行后 (AX)= 3040H 在汇编语言程序中,不直接用数值表示偏移地址,用符号代替数值表示地址,称符号地址(变量名)。例 符号buffer表示一个地址。 MOV AX , buffer或写成 MOV AX , buffer源操作数为buffer指向的内存单元的内容符

8、号地址( 变量名)经汇编连接后,与一个确定的数值地址相对应,可用操作符Offset 获取变量的偏移地址。故 PA = ( DS )10H + Offset buffer指令执行结果 ( AX ) = 0B0A H(2) 寄存器间接寻址基地址存储器操作数的有效地址EA由寄存器给出,寄存器的内容为操作数的有效地址。 可用的寄存器有 BX、SI、DI、BP如: MOV AL, BX MOV AH, SI MOV DL, DI MOV DH, BP 默认段寄存器的关系:使用BX、SI、DI,默认段寄存器为DS PA = ( DS )10H + (SI)或(BX)或(DI)使用BP,默认段寄存器为SSP

9、A = ( SS )10H + ( BP ) 例1: MOV AX , DI 若 ( DS ) = 3000H,( DI ) = 2000H 则内存操作数的物理地址为:PA = ( DS )10H + ( DI ) = 32000H 执行后 (AX) = (32000H) = 400BH 例2: MOV AX , BP 若 ( SS ) = 4000H, ( BP ) = 3000H 则内存操作数的物理地址为: PA = ( SS )10H + ( BP ) = 43000H 指令执行后 (AX) = (43000H) = 0102H(3)寄存器相对寻址基地址位移量操作数的有效地址由一个寄存器

10、与一个偏移量相加得到,偏移量(相对量)在指令中给出,范围在0000 FFFFH可用的寄存器有 BX、DI、SI、BP , 与寄存器间接寻址相同。如:: MOV AL, BX +10HMOV AH, DI+20H MOV DL, 30H SI MOV DH, 40H BP PA = ( DS )10H + (SI)或(BX)或(DI)偏移量PA = ( SS )10H + ( BP )偏移量例1: MOV AX , BX+30H 若 ( DS ) = 2000H, ( BX ) = 1000H 则内存操作数的物理地址为:PA = ( DS )10H + ( BX ) + 30H = 21030H

11、指令执行后:(AX) = (21030H) = 8976H (4)基址加变址寻址 Index+Dsplacement 操作数的有效地址由一个基址寄存器与一个变址寄存器之和给出。可用的基址寄存器为BX、BP,变址寄存器为 SI 、DI如 MOV AL, BX+SI MOV AX, BXDI MOV DL, BP+SI MOV DX, BPDI 默认段寄存器由基址寄存器决定。 基址寄存器为BX,默认段寄存器为DS PA = ( DS )10H + ( BX ) +(SI)或(DI) 基址寄存器为BP,默认段寄存器为SS PA = ( SS )10H + ( BP ) +(SI)或(DI) 例1:

12、MOV AX , BX + SI 若 ( DS ) = 4000H,( BX ) = 2000H,( SI ) = 100H 则内存操作数的物理地址为: PA = ( DS )10H + ( BX ) + ( SI ) = 42100H 指令执行后: (AX) = (42100H) = 2345H (5)相对基址加变址寻址 Base+ Index+Dsplacement 操作数的有效地址由:基址寄存器、变址寄存器、偏移量三者之和给出。 基址寄存器有 BX、BP,变址寄存器有 SI、DI如 MOV AL, BX+SI +10H MOV AX,20H BXDI MOV DL, BP+SI+30H

13、MOV DX,40H BPDI 例: MOV AX , BX + SI + 10H 若 ( DS ) = 4000H,( BX ) = 3000H ,( SI ) = 200H 则内存操作数的物理地址为: PA = ( DS )10H + ( BX ) + ( SI ) + 10H = 43210H 指令执行后:(AX) = (43210H) = 8877H 除此之外,其他方式均错误。如下: MOV CL, AX MOV AX, DX MOV AL, CX MOV CX, BP+BX MOV AH, SI+DI MOV BL, AX+CX3.4 8086的通用指令指令系统可分为六个功能组:数据

14、传送、算术运算、逻辑运算、串操作、控制传送、处理器控制。3.4.1 数据传送指令数据传送是最基本、最重要的一种操作,实际程序中,使用的比例最高。寄存器寄存器寄存器内存单元寄存器I/O端口按传送内容,可分为四类:(1). 通用数据传送 MOV, PUSH, POP, XCHG, XLAT(2). 地址传送 LEA, LDS, LES(3) 标志传送 PUSHF, POPF, LAHF, SAHF (4) 输入输出传送(累加器专用传送指令) IN, OUT 特点:(1). 除POPF、SAHF外,其他传送指令对标志位均无影响;(2). 唯一允许以段寄存器做操作数的指令,且只有MOV、PUSH、PO

15、P这三条允许。1. MOV指令格式 MOV dst,src执行 ( dst ) ( src )MOV传送指令的使用: reg/mem/segreg reg 通用寄存器/存储器/段寄存器通用寄存器(8个) MOV AL , BL MOV BX , AL MOV DS , AX reg/segreg mem 通用寄存器/段寄存器 存储器 MOV AL , BX MOV DS , BX+SI reg/mem segreg 通用寄存器/存储器 段寄存器 MOV BX , CS MOV BX , DS reg/mem data 通用寄存器/存储器 立即数 MOV Al , 9 MOV BX , OFFS

16、ET buffer MOV value , 0 MOV WORD PTR BX , 1MOV指令特点及注意事项:1)双操作数指令 (注意双操作指令的特点) 2)可进行字节或字传送 3)不允许存储器传送到存储器MOV BX , value 错 存储器不能传给存储器!MOV DI, SI 错MOV AX ,value 对MOV BX ,AX 对 MOV AL ,SI 对MOV DI ,AL 对4)可对 DS、ES、SS 赋值,但不允许立即数直接传送给段寄存器MOV DS,AX MOV ES ,BX MOV DS,1000H 错MOV AX ,1000H5)CS不能做目的操作数, 不能通过传送指令改

17、变CS的值MOV CS , AX 错6)不允许段寄存器传送到段寄存器 MOV ES ,DS 错 MOV AX , DS MOV ES , AX2 交换指令格式 XCHG DOPD,SOPD 执行 (DOPD) (SOPD)reg reg regmem mem reg例1 XCHG AX, BX 字操作 执行前(AX)= 1122H (BX)= 3344H 执行后(AX)= 3344H (BX)= 1122H例2 XCHG AH, BL 字节操作 执行前(AX)= 1122H (BX)= 3344H 执行后(AX)= 4422H (BX)= 3311H注意事项: 双操作数指令 可进行字或字节操作

18、 不允许对立即数、段寄存器做操作数XCHG AX, 4 错XCHG BX, DS 错3 堆栈操作指令(1)入栈操作格式 PUSH DOPD 执行分两步:P54执行 ( SP) (SP)- 2 (SS:SP) (DOPD) 特点:1 单操作数指令2 操作数为16位,可以是reg/segreg/mem,(CS除外) 不可以是datareg : AX, BX, CX, DX, SI, DI, BP, BXsegreg : DS, ES, SSmem 字类型(或双字)例: PUSH AX跳上去(低位)再把AX的货放进去若执行前: (SS)= 2000H(SP)= 1002H(SS:SP)= 21002

19、H (AX)= 1234H则执行后: (SS)= 2000H(SP)= 1000H(SS:SP)= 1234H(AX)= 1234H(2) 出栈操作格式 POP DOPD 执行 (DOPD) (SS:SP) (SP) (SP)+ 2 特点:3 单操作数指令4 操作数为16位,可以是reg/segreg/mem, 不可以是data例: POP BX把货先复制给BX再跳下来(高位)若执行前:(SS)= 2000H(SP)= 1000H(SS:SP)= 1234H(BX)= 5678H则执行后: (SS)= 2000H(SP)= 1002H (SS:SP)= 2010H (BX)= 1234H PU

20、SH和POP 指令只能对字操作。 PUSH AL 错 POP BYTE PTR BX 错 可以对段寄存器操作,POP CS非法,PUSH CS合法 PUSH DS PUSH CS POP ES POP CS 错4 输入输出指令 IN、OUT、1)IN 输入指令把一个字节或一个字由一个输入端口(port),传送至AL或AX。IN AL(AX) , n ;端口地址0255IN AL(AX) , DX ;浮动地址 64k2)OUT 输出指令把AL中的一个字节或AX中的一个字,传送至一个输出端口。OUT n , AL(AX)OUT DX , AL(AX)4 地址传送指令LEA、LDS、LES LEA有

21、效地址传送格式 LEA reg, mem执行 (reg) mem的EA 即 寄存器 存储器操作数的偏移地址 例1: buffer是一个符号地址表示的内存操作数(变量)。LEA BX,buffer若变量buffer的偏移地址= 1000H,执行后 ( BX ) = 1000H等价于 MOV BX ,OFFSET buffer注意: OFFSET是汇编程序提供的一个操作符,不是CPU的指令。例2: 将buffer为首的4个字节内存内容相加,存放在AL中。 MOV AX, SEG buffer 取段地址 MOV DS, AX LEA BX, buffer MOV CX, 4 MOV AL, 0 Ex

22、it: ADD AL, BX INC BX DEC CX ; (cx) =(cx) -1 JNZ exit ;ZF 0, 即CX 0, 转至exit说明:1 操作符SEG 的作用是取变量的段地址。执行完前两条指令后,(DS)=buffer的段值;2 操作符OFFSET的作用是取变量的偏移地址,执行完LEABX, buffer, (BX)为buffer的偏移地址;3 操作数 BX是以DS为段值,BX为偏移值的内存单元。LEA reg, mem的特点及注意事项: 目的操作数reg应是16位通用寄存器 LEA ES, BX 错 LEA AL, buffer 错 LEA 6, BX+SI 错 LEA

23、DI, buffer 错 源操作数应是存储器操作数 LEA BX, AX 错 传送的是内存单元的有效地址,与其内容无关。1) LDS r, src执行:(EA)给r,(EA+2)给DS2) LES r, src执行:(EA)给r,(EA+2)给ES二、算术运算指令 PPT特点:1 带符号数用补码表示 如: MOV AX, -1 等价于 MOV AX, 0FFFFh 负数补码为零2 对加、减运算,不区分无符号数、带符号数;对乘、除运算,区分无符号数、带符号数3 可进行字节或字操作4 影响状态标志 5 十进制运算方法1. 加法运算指令 PPT指令格式执行操作ADD dst , src(dst)-(

24、dst) + (src)ADC dst , src(dst)-(dst) + (src) + CFINC oprd(oprd)-(oprd)+11 ADD、ADC为双操作数指令,适用于所有的寻址方式。2 INC为单操作数指令3 INC指令除不影响CF外,6个状态标志AF CF OF PF SF ZF均据结果设置,主要用于循环程序中修改地址指针和循环次数,指令的操作数可以在通用寄存器中,也可以在内存中。4 ADC带进位加法,实现多字节运算例1:字节运算MOV AL, 64HADD AL, 64H即 01100100 01100100 11001000分析运算后,各标志位的状态。C=0; A=0;

25、 Z=0; P=0; S=1; O=1例2 INC AL 执行前 (AL)= FFH FFH + 01H 11 00H执行后: (AL)=00H, CF=不变,OF=0,ZF=1, PF=1, SF=0, AF=1。例3 value 是一个字变量, OFFSET value = 1000H, (DS)=2000H,(21000H)=01FFH。INC value 或写成: INC value01FFH+ 0001H 11 0200H 执行后:(21000H)=0200H, CF=不变,OF=0,ZF=0,SF=0, AF=1,PF=0注意是内存单元内容加1,而非地址加1。例4 将buffer为

26、首的4个字节内存内容相加,存放在AL中。 MOV CX, 4 LEA BX, buffer MOV AL, 0exit: ADD AL, BX INC BX DEC CX JNZ exit若编程如下,不能实现,为什么?MOV CX, 4MOV AL, 0 exit: ADD AL, buffer INC buffer DEC CXJNZ exit实现的是1A+1B+1C+1D,指令INC buffer,将buffer指向的内容加1,而不是地址buffer加1例5 两双字相加 0002F365H + 0005 E024 H = ?分析: 8086/8088只能按字节或字相加,位数在字以上的操作数

27、,先加低位,再加高位,加高位时加入从低位产生的进位。MOV AX,F365H ADD AX,E024H MOV BX,0002H ADC BX,0005H 执行完、:(AX)= D389H CF=1, OF=0, SF=1, ZF=0 执行完、:(BX)= 0008H CF=0, OF=0, SF=0, ZF=0结果存放在: 0008(BX) D389(AX)BCD码( Binary Coded Decimal )1 用二进制编码表示十进制数。2 常用8421 BCD码,与十进制数码对应关系:例:48的BCD码为 ( 0100 1000)BCD 根据在内存的存放形式,分压缩BCD码和非压缩 B

28、CD码: 压缩BCD码(一字节存放2个BCD码。)即组合十进制数 如 2148 的压缩BCD码为:( 0010 0001 0100 1000 )压缩BCD 在内存中占2字节 非压缩 BCD码(一字节存放1个BCD码。)即未组合十进制数 如 2148 的非压缩BCD码为:( 00000010 00000001 00000100 00001000 ) 非压缩BCD 在内存中占4字节当数据用压缩或非压缩BCD码表示时,为使运算的结果仍为BCD码表示,需对结果进行调整: 十进制运算 = 二进制运算 + 十进制调整。例:(0000 1000 ) 压缩BCD + (0000 1001) 压缩BCD = (

29、0001 0111 )压缩BCD计算过程:二进制运算和十进制调整(加6)具体调整过程P65-66,学生自己看。3) AAA分离BCD码调整指令将AL中的结果调整为分离BCD码两个未组合的十进制数可以直接用ADD指令相加,但要得到正确的未组合的十进制数,必须在加法指令以后,紧接着用一条AAA指令加以校正,于是在累加器中就可以得到正确的结果。例:MOV AH , 0ADD BL , CLAAAMOV AL , BL4) DAA组合BCD码调整指令 第五版书P65 举例例:若有两个多字节数NA和NB,每一个是16位十进制数,NA放在以FIRST开始的存储区中,NB放在以SECOND开始的存储区中,都是低字节在前。编程将相加以后的和放在自THIRD开始的存储区中。分析:每个是16位十进制数,十进制数在机器中用(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1