教学课件第11章80x86汇编语言程序设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

立即寻址示例
MOV AH, -40 ; -40AH MOV AX, 34D8H ; 34HAH, D8HAL MOV AX, -40 ; 0FFD8H(-40)AX MOV EAX, 12345678H ;12345678HEAX
2
2024/8/2
现代微机原理与接口技术
2、寄存器寻址 操作数存放在某个寄存器中,指令指定寄存器号
33250H
33250H 20H
43H
4320H AX
18
2024/8/2
现代微机原理与接口技术
8、比例变址寻址 操作数的有效地址是变址寄存器的内容乘以指令中
指定的比例因子及位移量之和


变址寄存器 比例因子位移量
段基地址
变址寄存器 变址值 EA
下标 *
++
存储器 操作数
19
2024/8/2
比例变址寻址示例
数据段
现代微机原理与接口技术
物理地址 10A00H + 1000H 11A00H
11A00H 30H 50H
50H 30H AX
(本章中图示存储器地址从上到下递增)
9
2024/8/2
直接寻址示例2 MOV BL, ES:[0100H]
设(ES)=3000H (DS)=2000H
30100H 4B 00
现代微机原理与接口技术
物理地址 30000H + 0100H 30100H
4B BL
在汇编语言指令中,可以用符号地址代替数值地址
如:MOV AX, BUFF 或 MOV AX, [BUFF] 其中BUFF为存放数据单元的符号地址。
10
2024/8/2
现代微机原理与接口技术
4、寄存器间接寻址 操作数在存储器中,操作数地址的偏移量在寄存器中
的内容加上指令中指定的位移量


基址或变址寄存器位移量
段基地址 存储器
寄存器
+ EA +
操作数
地址
可用于数组元素的访问
13
2024/8/2
现代微机原理与接口技术
寄存器相对寻址示例 MOV AX, 3000H[SI] (或[SI+3000H]) MOV AX, COUNT[SI] ; COUNT是符号地址
指定的比例因子加基址寄存器的内容、再加位移量之和


基址寄存器变址寄存器比例因子位移量
段基地址
变址寄存器 变址值 EA
存储器
下标 *
+
+ 操作数
基址寄存器
基址值
相对基址比例变址寻址示例 MOV EAX, TABLE[EBX+EDI*4]
22
2024/8/2
11.2 80x86的指令系统
数据传送指令 算术运算指令 逻辑运算与移位指令 串操作指令 控制转移指令 处理器控制指令
现代微机原理与接口技术
MOV EAX, COUNT[ESI*4]
EA=ESI*4+COUNT
存储器
设(ESI)=3,(DS)=1000H COUNT=2000H
12000H
+1 +2
+3
+4
EAX
元素0 元素1
元素2
+12
元素3
20
2024/8/2
9、基址比例变址寻址
现代微机原理与接口技术
操作数的有效地址是变址寄存器的内容乘以指令
2024/8/2
现代微机原理与接口技术
1、通用数据传送指令
MOV(move)
传送
MOVSX(move with sigh-extend) 带符号扩展传送
MOVZX(move with zero-extend) 带零扩展传送
PUSH(push onto the stack) POP(pop from the stack)
任何用ESP或EBP作为基址
寄存器的访存
目的串 附加数据段 ES 串处理指令的目的串
局部数据 数据段 DS 除相对于堆栈以及串处理的
目的串以外的所有数据访问
6
2024/8/2
现代微机原理与接口技术
访问非默认段数据的方法——段超越
数据的存放比较灵活,除了放在默认的DS段,还可以 存放在别的段,此时访问他们需要使用段超越前缀, 可用的段超越前缀有CS:, DS:, ES:, SS:, FS:, GS:。
即把源操作数的内容送入目的操作数
说明:1)可以进行8位、16位或32位数据的传送 2)SRC可为立即数、寄存器、存储器操作数 3)DST可为寄存器、存储器操作数 4)该指令不影响任何状态标志位
段寄存器 CS DS SS ES
立即数
通用寄存器 AX BX CX DX
存储器
BP SP SI DI
26
2024/8/2
7
2024/8/2
现代微机原理与接口技术
3、直接寻址 操作数地址的偏移量(有效地址)在指令中
段基地址
指令
存储器
EA
+
操作数
物理地址=指定段的段基址*16+偏移量 系统默认,操作数在数据段
MOV AX, 2000H ; 立即寻址 MOV AX, [2000H] ; 直接寻址
8
2024/8/2
直接寻址示例1 MOV AX, [1000H] 设(DS)=10A0H 代码段 低地址 OP 00H 10H
;立即数传送到存储单元
MOV [BX], CX
;寄存器内容传送到存储器
MOV [BP][DI]BUFF, AX
27
2024/8/2
MOV指令示例2
现代微机原理与接口技术
MOV AX, ARRAY[SI]
设(DS)=3000H, (SI)=2000H, ARRAY=8000H
物理地址 30000H
2000H + 8000H
基址寄存器 BX, BP 任何32位通用寄存器(包括ESP)
变址寄存器 SI, DI 除ESP以外的32位通用寄存器
比例因子 无
1, 2, 4, 8
5
2024/8/2
默认段选择规则
现代微机原理与接口技术
访存类型 所用段及寄存器 缺省选择规则
指令
代码段 CS
用于取指
堆栈
堆栈段 SS 所有的堆栈的进栈和出栈
指令 寄存器号
寄存器 操操作作数数
寄存器寻址示例 MOV AH, BL MOV DS, AX MOV SI, AX MOV ECX, EDX
;(BL)-->AH ;(AX)-->DS ;(AX)-->SI ;(EDX)ECX
说明:立即和寄存器寻址方式不需访问存储器即可 得到操作数,速度快
3
2024/8/2
进栈 出栈
PUSHA/PUSHAD (push all registers)
POPA/POPAD (pop all registers)
XCHG(exchange) XLAT(translate)
25
所有寄存器进栈
所有寄存器出栈 交换 换码
2024/8/2
现代微机原理与接口技术
MOV 传送指令
格式:MOV DST, SRC 操作:DST<--(SRC)
段超越举例: MOV AX, [10H] ;DS段10H处的一个字的数据赋给
AX寄存器 MOV AX, ES:[10H]; ES段10H处的一个字的数据赋给
AX寄存器
不允许使用段超越前缀的情况:
(1)串操作指令的目的串必须用ES段 (2)PUSH指令的目的和POP指令的源必须用SS段 (3)程序的指令必须存放在CS段
3A000H
3A000H 45H 0BH
28
0B45H AX
2024/8/2
MOV指令注意事项:
现代微机原理与接口技术
(1)两个操作数长度必须一致 MOV AL, BX ;不合法
例外:源是16进制立即数,小于目的操作数时, 高位按0扩展,源是10进制立即数,小于目的操作 数时,高位按符号位扩展
MOV AX, 0D8H 执行后,(AX)=00D8H
(或 MOV AX,[COUNT+SI]) 若(DS)=3000H, (SI)=2000H,COUNT=3000H
30000H
2000H
+ 3000H
35000H
35000H 34H 12H
1234H AX
14
2024/8/2
现代微机原理与接口技术
6、基址变址寻址 操作数的有效地址是一个基址寄存器和一个变址寄
现代微机原理与接口技术
80x86指令的一般汇编语言格式: [标号:]指令助记符[[目的操作数][,源操作数]][;注释]
其中,[ ]表示可选项;
23
2024/8/2
数据传送指令
✓ 通用数据传送指令 ✓ 地址传送指令 ✓ 标志寄存器传送指令 ✓ 输入输出指令 ✓ 类型转换指令
现代微机原理与接口技术
24
指令 基址或变址寄存器
段基地址
寄存器
存储器
EA
+
操作数
寄存器间接寻址示例 MOV AL, [BX] MOV AX, CS:[SI] MOV ECX, [EDX] MOV AH, [BP]
11
2024/8/2
MOV AH, [BP]
现代微机原理与接口技术
MOV BX, [SI]
MOV CX, SI
设 (SS)=1000H, (DS)=2000H , (BP)=0B10H, (SI)=032AH
物理地址
物理地址
10000H
20000H
+ 0B10H
+ 032AH
10B10H
2032AH
10B10H 40H 10B11H 00H
AH 40H
032AH SI

2032AH 3EH 2032BH 46H
12
463EH BX
2024/8/2
032AH CX
现代微机原理与接口技术
5、寄存器相对寻址(直接变址寻址) 操作数的有效地址是基址(或变址)寄存器
现代微机原理与接口技术
物理地址 21000H 0158H
+ 10A5H 221FDH
1234H AX
16
2024/8/2
现代微机原理与接口技术
7、基址变址相对寻址 操作数的有效地址是一个基址寄存器的内容、
一个变址寄存器的内容及位移量之和


基址寄存器变址寄存器位移量
变址寄存器 变址值
段基地址
存储器
中指定的比例因子加基址寄存器的内容之和


基址寄存器变址寄存器比例因子
变址寄存器 变址值
下标 *
段基地址
基址寄存器
存储器
基址值
+ EA +
操作数
基址比例变址寻址示例
MOV ECX, [EBX+ESI*8]
21
2024/8/2
10、相对基址比例变址寻址
现代微机原理与接口技术
操作数的有效地址是变址寄存器的内容乘以指令中
MOV指令示例1
现代微机原理与接口技术
MOV AL, BL MOV BP, SI
;寄存器之间传送
MOV EAX, [EBX+ECX*4] ;存储器操作数
MOV AX, ARRAY[SI]
Hale Waihona Puke ;传送到寄存器MOV AX, 0B00H
;立即数传送到寄存器
MOV CL, 10000000B
MOV VALUE, 100H MOV ES:[BX], 4BH
现代微机原理与接口技术
下面我们来讨论余下的几种与存储器有关的寻址方式, 先介绍几个概念:
有效地址(EA)的4种组成成分:
有效地址的计算: EA=基址 +(变址*比例因子)+ 位移量
➢ 位移量(displacement)
存放在指令中的8位、16位或32位的数,是一个地址
➢ 基址(base)
存放在基址寄存器中的内容,用于指向数组的首地址
3-10均是与存储器有关的寻址方式,其中,8—10 仅适用于80386及其后继机型,
1
2024/8/2
现代微机原理与接口技术
我们首先讨论两种与存储器无关的寻址方式:
1、立即寻址 操作数以常量形式直接放在指令中,紧跟在操作码之后
机器码存放形式如下:
代码段
代码段
OP 操作码
D8
操作数
OP 操作码 低位 D16 操作数 高位 D16
➢ 变址(index)
存放在变址寄存器中的内容,用于访问数组的某个元素
➢ 比例因子(scale factor)
其值可为1,2,4或8,386及其后继机型新增加的
4
2024/8/2
现代微机原理与接口技术
16/32位寻址时有效地址四种成分的组成
四种成分 16位寻址
32位寻址
位移量 0, 8, 16位
0, 8, 32位
+ EA +
操作数
基址值 基址寄存器
17
2024/8/2
相对基址变址寻址示例
现代微机原理与接口技术
MOV AX, MASK[BX+SI];MASK是符号地址 若 (DS)=3000H, (BX)=2000H, (SI)=1000H,
MASK=0250H
物理地址
30000H
2000H
1000H
+ 0250H
11.1 80x86的寻址方式
现代微机原理与接口技术
有效地址(effective address EA)
—— 操作数在段的偏移地址
寻址方式 —— 产生有效地址的方法
80x86的寻址方式有: 1、立即寻址 2、寄存器寻址 3、直接寻址 4、寄存器间接寻址 5、寄存器相对寻址
6、基址变址寻址 7、基址变址相对寻址 8、比例变址寻址 9、基址比例变址寻址 10、相对基址比例变址寻址
存器的内容之和


变址寄存器 段基地址
基址寄存器变址寄存器 变址值
存储器
基址寄存器
++ EA
基址值
操作数
15
2024/8/2
基址变址寻址示例 MOV AX, [BX+DI] MOV AX, [BX][DI]
若 (DS)=2100H, (BX)=0158H, (DI)=10A5H,
221FDH 34H 12H
相关文档
最新文档