




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1第二章第二章 80 x8680 x86寻址方式和指令系统寻址方式和指令系统本章要求本章要求: : 1.掌握掌握数据、程序地址、堆栈地址寻址的概念及其各种寻址方法各种寻址方法。 2.了解80 x86指令的二进制编码格式和源程序中的书写格式。 3.掌握掌握80 x8680 x86指令系统指令系统,注意从指令的功能功能、寻址方式寻址方式、对标志位标志位有无影响、效率效率等方面进行分析和掌握。 4.结合下一章内容,对寻址方式和常用指令熟练应用。2 2.1 80 x86 2.1 80 x86寻址方式寻址方式 通常指令分为操作码操作码和操作数操作数两部分。 数据寻址方式数据寻址方式-表示指令中操作数所在
2、的方法。 程序地址寻址方式程序地址寻址方式-表示指令转移地址所在的方法。 堆栈地址寻址堆栈地址寻址-堆栈段用于暂存数据,并且为程序保存返回地址。 堆栈的存取方式不同于一般数据段,堆栈采用先进后出先进后出的存取方式。 3 2 21 11 1 数据寻址方式数据寻址方式 一立即寻址一立即寻址 操作数操作数(又称立即数又称立即数)包含在指令中包含在指令中,作为指令的一部分,存放在代码段中。 操作数存放形式存放形式为:低字节在前、高字节在后。即: 数据低位存放在地址低位存储单元, 数据高位存放在地址高位存储单元。 例: MOV AX,1234H ;AX1234H 4 MODEL TINY ; 选择单个段
3、模式 586 ; 586实方式 CODE ; 代码段开始 STARTUP ; 程序开始 MOV AX,1234H ; AX1234H MOV EBX,0 ; EBX0 MOV CL,55H ; CL55H EXIT ; 返回DOS END ; 文件结束 例例 2.1 立即寻址示例立即寻址示例 CS :EA 机器码机器码 1D24 : 0100 B83412 1D24 : 0103 66BB00000000 1D24 : 0109 B155 5MOV AX, 1234M.立即寻址立即寻址:B 8AHALAX3 4代码段代码段1 2指令缓冲寄存器读取指令读取指令分析指令分析指令执行指令执行指令B8
4、3412B8341212340100CS :IP1D24:1D24: 01011D24: 0102代码段地址6 二寄存器寻址二寄存器寻址 操作数在寄存器中操作数在寄存器中,操作数可以是8位、16位或32位通用寄存器、16位段寄存器。 例2.2 MODEL TINY ; 选择单个段模式 586 ; 586实方式 CODE ; 代码段开始 地 址 机器码 STARTUP ; 程序开始 lD24:0100 8BC3 MOV AX,BX ; AXBX lD24:0102 8ACA MOV CL,DL ; CLDL lD24:0104 668BF7 MOV ESI,EDI ; ESIEDI EXIT E
5、ND7 三存储器寻址方式三存储器寻址方式 操作数在存储器中,指令以某种方式给出操操作数在存储器中,指令以某种方式给出操作数在存储器的地址作数在存储器的地址。 操作数地址可以在指令里面直接给出,也可以放在寄存器中间接给出。 存放地址的寄存器,可以是规定的16位或32位通用寄存器。8 116位指令模式下的存储器寻址方式位指令模式下的存储器寻址方式 80 x86实模式为16位指令模式。 当用寄存器间接给出操作数地址时,可使用的寄存器为BX,BP,SI,DI。 BX,SI或DI,默认DS之内容为段基址; BP,默认SS之内容为段基址。 段超越前缀段超越前缀(CS:ES:DS:SS:FS:GS:), 操
6、作数可以放在指定段。 如:ES:BX9 16位指令模式寻址结构由4 4部分组成部分组成: 段基址段基址10H10H基址基址变址变址位移量位移量 即:即: BXBX SISI 8 8位补码位补码 段基址段基址10H10H BPBP DIDI 1616位补码位补码 16位偏移地址 20位物理地址 使用存储器的第一个1MB空间。10 (1)直接寻址。)直接寻址。操作数在存储器中,指令直接指令直接包含操作数的有效地址包含操作数的有效地址。例2.3 MODEL SMALL ;选择small内存模式 地地 址址 操作数操作数 DATA ;数据段开始1D26:000C 12 BUF1 DB 12H ;变量B
7、UF1为字节类型1D26:000D 3355 BUF2 DW 5533H ;变量BUF2为字类型 CODE ;代码的开始 地地 址址 机器码机器码 STARTUP ;程序开始1D24:0010 8A1E0C00 MOV BL,BUF1 ;BL12H1D24:0014 Al 0D00 MOV AX,BUF2 ;AX5533H EXIT ;返回DOS END ;文件结束110 00 D直接寻址直接寻址: :M.MOV AX, BUF2代码段代码段代码段地址1 21D24: 00151D24: 0016A 1AHALAX1D26 :DS : EA数据段地址数据段数据段0D003 35 53 35 5
8、CSIP 0014 1D24: 1D24 0014000D读取指令读取指令分析指令分析指令执行指令执行指令0 D0 0指令缓冲寄存器A10D00A10D0012 (2)寄存器间接寻址)寄存器间接寻址。操作数在存储器中,地址寄存器地址寄存器BX,BP,SI,DI存放操作数的有效地址存放操作数的有效地址。 例2.4 MODEL SMALL 地地 址址 操作数操作数 DATA1D26:000E 1155 BUF1 DB 11H,55H1D26:0010 2233 BUF2 DW 3322H CODE 地地 址址 机器码机器码 STARTUP1D24:0010 BE0E00 MOV SI,OFFSET
9、 BUF1 ;变量BUF1的 有效地址送SI1D24:0013 8A04 MOV AL,SI ;AL11H1D24:0015 BF1000 MOV DI,OFFSET BUF2 ;变量BUF2的 有效地址送DI1D24:0018 8B1D MOV BX,DI ;BX3322H EXIT END13寄存器间接寻址寄存器间接寻址: :M.8 B1 D1 13 32 25 5数据段地址 MOV BX, DI代码段代码段数据段数据段1D24代码段地址: 0019 1D24 0018CSIP 1D26 0010DSDIBX1D26 : 0011BHBL 1D24 0018: 1D26 0010:2 23
10、 3读取指令读取指令分析指令分析指令执行指令执行指令指令缓冲寄存8B1D14 例2.5 MOV AX,ES: SI 段超越前缀 ES:, 操作数的有效地址在SI中,段基址在ES中, 在附加段附加段中取字操作数送AX中。 采用间接寻址时,寻址寄存器寻址寄存器放在方括号方括号中,表示寄存器中存放的是地址。 这种寻址方式寻址方式适用于表格的处理适用于表格的处理。15 (3)(3)寄存器相对寻址寄存器相对寻址。操作数在存储器中,操作数的有效地址为基址或变址值加上偏移量基址或变址值加上偏移量,即8位或16位偏移量采用补码形式表示。 在计算有效地址时,如果偏移量为8位,则按带符号数据扩展为16位,当计算出
11、的有效地址超过FFFFH时,按64KB取模。 16 例例2.6 寄存器相对寻址寄存器相对寻址 MODEL SMALL 地 址 操作数 DATA 1D26:0002 112233445566 BUF DB 11H,22H,33H, 44H,55H,66H CODE 地 址 机器码 STARTUP 1D24:0010 BF0200 MOV DI, 2 ;DI2 1D24:0013 8A850200 MOV AL,BUFDI ;AL33H 1D24:0017 BF0500 MOV DI,5 ;Dl5 1D24:001A 8A9D0200 MOV BL,BUFDI ;BL66H EXIT END17寄
12、存器相对寻址寄存器相对寻址: :代码段地址M.8 A9 D0 20 02 21 13 34 45 56 6 MOV BL, BUFDI代码段代码段数据段地址数据段数据段 1D24 001ACSIP 1D26DSBL 1D24 001A: 1D26:6 6DI 0005+读取指令读取指令分析指令分析指令执行指令执行指令指令缓冲寄存8A9D020002000007 00051D24 : 001B1D24 : 001C1D24 : 001D18 寻址寄存器为BX,BP,称相对基址寻址相对基址寻址; 寻址寄存器为SI,DI,称相对变址寻址相对变址寻址。 参与寻址的寄存器名要加方括号 ,偏移量可以不加方
13、括号,下列两条指令是等价的: MOV AX,BX十5 MOV AX,5BX 寄存器相对寻址适用于?适用于? 实现对结构或记录实现对结构或记录等数据类型进行的操作。 19 (4)基址变址寻址。)基址变址寻址。操作数在存储器中,操作数的有效地址为基址和变址之和,即有效操作数的有效地址为基址和变址之和,即有效地址所在的段基址由基址寄存器地址所在的段基址由基址寄存器BX,BP决定决定。 基址寄存器为BX时,缺省段寄存器为DS; 基址寄存器为BP时,缺省段寄存器为SS。 也可以使用段超越前缀,指定段寄存器。20例例2.7 基址变址寻址基址变址寻址 MODEL SMALL 地地 址址 操作数操作数 DAT
14、A1D25:000C 11002200 BUF DW 0011H,0022H,0033H, 33004400 0044H,0055H,0066H 55006600 CODE 地地 址址 机器码机器码 STARTUP1D24:0010 BB0C00 MOV BX,OFFSET BUF ;BX000CH1D24:0013 BE0600 MOV SI,6 ;SI61D24:0016 8B00 MOV AX,BX+SI ;AX0044H EXIT END21基址变址寻址基址变址寻址: :M.8 B0 03 30 04 40 0 MOV AX, BX+SI代码段代码段地址+ 00121D25: 0013
15、数据段数据段地址 1D24 0016CSIP 000C 0006BXSI 1D25DSAXAHAL 1D24 0016: 1D25 000C 0006:0 04 4读取指令读取指令分析指令分析指令执行指令执行指令指令缓冲寄存8B001D24 : 001722下列指令是等价的: MOV AX,BP十DI; MOV AX,BPDI; 基址变址寻址适用于数组或表格存取数组或表格存取,将数组或表格首地址,放在基址寄存器中,而将数组或表格中的数据的相对位移,放在变址寄存器中,灵活地实现数组或表格中数据的存取。23 (5)相对基址变址寻址)相对基址变址寻址。操作数在存储器中,操作数操作数的有效地址为基址、
16、变址和位移量之和的有效地址为基址、变址和位移量之和。 缺省段寄存器以基址寄存器为准。下列指令是等价的: MOV AX,BX十SI十1122H; MOV AX,1122HBX十SI; MOV AX,1122HBXSI;指令中给出8位或16位偏移量,采用补码表示。在计算有效地址时,对8位偏移量将带符号扩展为16位,当有效地址超过FFFFH时,按64KB取模。24例例2.8 2.8 相对基址变址寻址相对基址变址寻址 MODEL SMALL 地地 址址 操作数操作数 DATA1D25:000E 000000000000 BUF1 DB 10HDUP(?) 000000000000 000000001D
17、25:001E 112233445566 BUF2 DB 11H,22H,33H, 44H,55H,66H CODE 地地 址址 机器码机器码 STARTUP1D24:0010 BB0E00 MOV BX,OFFSET BUF1 ;BX000EH1D24:0013 BF1100 MOV DI,11H ;DI0011H1D24:0016 8A4104 MOV AL,BX+DI十十4 ;AL66H EXIT END25相对基址变址寻址相对基址变址寻址: : 1D24 0016CSIP 000E 0011BXDI 1D25DSM.8 A4 15 56 6AL+代码段地址 0023代码段代码段数据段数
18、据段 MOV AL, BX+DI+4 1D24 0016: 000E 00110 4 1D25:6 6读取指令读取指令分析指令分析指令执行指令执行指令指令缓冲寄存指令缓冲寄存8A410404268088的指令执行过程返回返回27 212 程序地址寻址方式程序地址寻址方式 表示指令转移地址所在的方式表示指令转移地址所在的方式称程序地址寻址方式。 用于转移类指令和过程调用类指令的程序地址寻址方式有3种: 相对寻址 直接寻址 间接寻址28 一、相对寻址(段内)一、相对寻址(段内) 为段内寻址,段内寻址, 指令中给出带符号的相对偏移量,指令中给出带符号的相对偏移量, 程序目标地址为当前程序目标地址为当
19、前IP值值(即转移或调用指令即转移或调用指令的下一条指令地址的下一条指令地址),加上相对偏移量作为偏移地,加上相对偏移量作为偏移地址址。 相对寻址类型如表2.1如示(P23)。29例2.9 相对寻址(段内) MODEL TINY CODE 地 址 机器码 STARTUP 1D24:0100 8BF7 MOV SI, DI 1D24:0102 EB02 JMP SHORT NEXT ;转移到标号NEXT处 1D24:0104 8ACA MOV CL, DL 1D24:0106 8AC3 NEXT: MOV AL, BL EXIT END3031二、直接寻址二、直接寻址 (段间)(段间) 直接寻址
20、是指指令中直接给出转移指令的目指令中直接给出转移指令的目标地址标地址。 在段间转移中,指令中给出目标代码段段地址或代码段选择符,以及16位或32位偏移地址。 32例2.10 直接寻址 (段间) MODEL MEDIUM CODE CODE1 地 址 机器码 STARTUP1D24:0010 8BF7 MOV SI,DI1D24:0012 EA0A00251D JMP FAR PTR NEXT ;转CODE2段标号NEXT处1D24:0017 B210 MOV DL,10H 地 址 机器码 CODE CODE21D25:000A 8ACA NEXT:MOV CL,DL1D25:000C 32D2
21、 XOR DL,DL EXIT END等价于JMP 1D25: 000A33三、间接寻址三、间接寻址(段内、段间段内、段间) 间接寻址分段内和段间间接寻址, 指令中以间接方式间接方式给出转移指令的目标地址, 转移指令的目标地址,通常存放在数据段。转移指令的目标地址,通常存放在数据段。若采用若采用 (E) BP寻址,指令目标地址放在堆栈段寻址,指令目标地址放在堆栈段。使用段超越前缀,也可以存放在其它段。 34例2.11 间接寻址(段内、段间) MODEL MEDIUM 地 址 操作数 DATA1D26:0000 0800251D BUF DD NEXT ;标号NEXT的地址 CODECODE1
22、地 址 机器码 STARTUP1D24:0010 BB0000 MOV BX,OFFSET BUF1D24:0013 FF2F JMP FAR PTRBX ;转移到CODE2段 标号NEXT处1D24:0015 B210 MOV DL,10 CODE CODE21D25:0008 8ACA NEXT: MOV CL,DL1D25:000A 32D2 XOR DL,DL EXIT END35362 21 13 3 堆栈地址寻址堆栈地址寻址 堆栈段堆栈段用于暂存数据,用于暂存数据,并且为程序并且为程序保存返回保存返回地址地址。堆栈的存取方式不同于一般数据段,堆栈。堆栈的存取方式不同于一般数据段,堆
23、栈采用采用先进后出先进后出的存取方式。的存取方式。 使用使用PUSHPUSH指令指令将操作数压入堆栈,使用将操作数压入堆栈,使用POPPOP指指令令从堆栈中弹出操作数。堆栈栈顶指针为从堆栈中弹出操作数。堆栈栈顶指针为(E)SP(E)SP。 在在1616位指令模式下,堆栈地址由位指令模式下,堆栈地址由SSSS10H10HSPSP形式。形式。 在在3232位指令模式下,段寄存器位指令模式下,段寄存器SSSS存放段选择存放段选择符,通过段选择符访问段描述符,获取符,通过段选择符访问段描述符,获取3232位段址,位段址,ESPESP存放偏移地址。存放偏移地址。 37 使用PUSH 源操作数 指令,向堆
24、栈压入一个字的具体操作为: SPSP1 ;源操作数高8位存入栈顶 SPSP1 ;源操作数低8位存入栈顶 使用POP目的操作数 指令,从堆栈弹出一个字的具体操作为: SP SP1;栈顶内容传送到目的操作数低8位 SPSP1;栈顶内容传送到目的操作数高8位; 堆栈操作数据类型允许为字或双字,操作数为字类型时,SP值加/减2,操作数为双字类型时,ESP值加/减4。38图2.10 进栈出栈操作示意图 堆栈操作主要用途为:寄存器内容保护,现场和返回地址的保存,参数传递、存储局部变量。3922 80 x86指令格式指令格式 221 80 x86指令编码格式指令编码格式 是指指令的机器码表示格式指令的机器码
25、表示格式,其最多可以由以下5部分组合构成: 前 缀 操作码 寻址方式 偏移量 立即数 02字节 12字节 02字节 04字节 04字节 一前缀一前缀(使使16位位32位位) 指令前缀有两种:地址长度前缀 操作数长度前缀40 汇编程序在汇编时,根据当前代码段的USE属性、地址长度属性、操作数长度属性决定是否产生前缀。可以将指令操作数或地址长度,由16位转换到32位,或由32位转换到16位。 (1)操作数长度前缀 (66H) 用于改变当前指令模式操作数长度缺省值。 当16位指令模式下,操作数用32位寄存器,则在指令前加前缀66H; 当在32位指令模式下,操作数用16位寄存器,则在指令前加前缀66H
26、,允许用16位寄存器。 41 (2)地址长度前缀 (67H) 用于改变当前指令模式地址长度缺省值。其用法与操作数指令长度类似。 例如在16位指令模式下,指令汇编后机器码如下: 67668B03 MOV AX,WORD PTREBX 在指令机器码前加前缀67H和66H,表示允许使用32位寄存器,但地址长度为16位,允许地址范围为64KB内。42二操作码及寻址方式二操作码及寻址方式 操作码及寻址方式属于指令中最基本组成部分,大多数指令编码格式为: 操作码操作码规定处理器执行的操作,如传送,加、减等,具体操作采用编码表示。 其中: D位规定数据流的方向,为第2字节指定的R/M域和REG域之间数据流动
27、方向。 W位规定操作数长度是字节,字或双字。43 寻址方式寻址方式寻找操作数的方式。 7 6 5 3 2 0 MOD域选择寻址类型,指定R/M域为寄存器还是存储器,如为存储器,还要指定是否有偏移量。 REG域采用三位编码表示8个寄存器。 R/M域表示寄存器或存储器,由MOD域指定,如为寄存器,则与REG域相同;如为存储器,则表示8种寻址方式。 modregr/m44三偏移量及立即数三偏移量及立即数 偏移量允许指令中直接给出寻址方式所需的偏移量。 立即数允许指令中直接给出操作数。45222 80 x86指令格式指令格式 指令格式是指指令在源程序中的书写格式指令在源程序中的书写格式,指令基本格式为: 标号标号:助记
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 商业投资计划书(汇编15篇)
- 机械设计 第11章 蜗杆传动学习课件
- 2025年甘肃省白银市单招职业适应性测试题库及答案1套
- 二零二五年度手电动车进出口代理与售后服务合同
- 2025年度车辆安全性能检测与责任认定协议
- 二零二五年度家教保密协议及家长满意度提升
- 互换性第4.1章 学习教材
- 二零二五年度实习生转正聘用合同模板
- 第18课《 我的白鸽》教学设计 2024-2025学年统编版语文七年级上册
- 南京市2025年度政府机关劳务派遣服务协议书
- 病毒性脑炎患者的护理查房ppt课件
- TPU材料项目可行性研究报告写作参考范文
- 第二编 债权总论
- 试用期考核合格证明表
- 常见八种疾病
- 胶粘剂基础知识及产品详解(课堂PPT)
- 铁路总公司近期处理的七起突出质量问题的通报
- 常用洪水预报模型介绍
- 援外项目钢结构运输包装作业指导书(共13页)
- 髋关节置换术男性患者留置尿管最佳时机探析和对策
- [爆笑小品校园剧本7人]爆笑小品校园剧本
评论
0/150
提交评论