汇编语言程序设计
- 5 -
汇编语言程序设计
第三章 80x86的指令系统和寻址方式
教学目的和要求:
? 熟练掌握8086的寻址方式 ? 熟练掌握8086的指令系统 教学重点:
? 8086的指令系统和寻址方式 教学难点:
? 寻址方式的理解,各指令的用法 教学方式:课堂讲授与编程环境演示相结合 教学过程:
指令系统的一般格式:
操作码 操作数,操作数,……,操作数 一地址指令:只有一个操作数
二地址指令:有二个操作数,常见格式为:操作码 目的操作数,原操作数 三地址指令:有三个操作数
3.1 80x86的寻址方式
操作数可存放的位置: ? 立即数 ? 寄存器中 ? 存储器中 一、与数据有关的寻址方式 1、立即寻址方式
操作数直接存放在指令中。
如:MOV AX,10A7H ;源操作数的寻址方式为立即寻址 MOV AL,87H
注:常用来表示常数,只能用于源操作数,不能用于目的操作数。 2、寄存器寻址方式
操作数存放在CPU内部的寄存器中,指令指定寄存器号。 如:MOV AX,BX INC CX
ADD BL,7 ;目的操作数的寻址方式为寄存器寻址方式
注:16位操作数,可用AX,BX,CX,DX,SP,BP,SI,DI 8位操作数,可用AL,AH,BL,BH,CL,CH,DL,DH
(除了上述两种寻址方式外,其他的寻址方式中操作数均保存在存储器中,介绍之前先学习几个定义)
有效地址(EA:Effective Address):即偏移地址
- 6 -
汇编语言程序设计
可由以下四部分组成:
位移量:存放在指令中的一个8位,16位或32位的数或符号地址。 基址:存放在基址寄存器中的内容。(常用于指向数据段中数组或字符串的首地址) 变址:存放在变址寄存器中的内容。(常用于访问数据段中数组的某个元素或字
符串的某个字符)
比例因子:用于386及以后机型,可以是1,2,4,8,常用于访问数组。 8086~80286有效地址的组成部分:
位移量 基址寄存器 变址寄存器 比例因子 8,16位 BX,BP SI,DI 无
有效地址的计算公式:
EA=基址+变址+位移量
386以后:EA=基址+变址×比例因子+位移量
3、直接寻址方式
数据在存储器中,有效地址由指令直接给出。 EA=位移量
注:有效地址就是偏移地址。 如:MOV AX,[1008H]
则:执行完后: (AX)=1234H 注:
1. 可用符号地址代替数值地址。如
MOV AX,VALUE 或者 MOV AX,[VALUE] 2. 有效地址直接给出,段地址默认为数据段。若访问其他段的数据,需加段跨越前缀。 3. 字数据存放在存储器中时,高地址存放在高字节,低地址存放在低字节。
- 7 -
汇编语言程序设计
4、寄存器间接寻址 基址寄存器:BX,BP 变址寄存器:SI,DI
操作数在存储器中,有效地址为基址寄存器或变址寄存器的内容。即:EA=基址/变址
如:MOV AX,[BX] 设(DS)=3000H,(BX)=2000H,(32000H)=12H,(32001H)=34H 则:
EA=(BX)=2000H 物理地址=32000H 执行后:(AX)=3412H
注:当基址寄存器用BP时,默认段为SS,否则为DS。该规则在以后的几种寻址方式中同样适用。
如:MOV AX,[BP] (DS)=3000H,(SS)=2000H,(BP)=2000H 则:物理地址=22000H
5、寄存器相对寻址 EA=基址/变址+位移量 如:
MOV AX,[BP+1000H]
MOV AX,COUNT[BX]或MOV AX,[BX+COUNT] COUNT为位移量。 如果(DS)=3000H,(SS)=2000H,(BP)=2000H,(BX)=3120H,COUNT=0040H 则:(1)物理地址=23000H (2)物理地址=33160h
6、基址变址寻址方式 EA=基址+变址
如:MOV AX,[BX][SI] 或 MOV AX,[BX+SI]
7、相对基址变址寻址方式 EA=基址+变址+位移量
如:MOV AX,COUNT[BX][DI]或MOV AX,[BX+DI+COUNT] (注意:教材43-44,8-10的寻址方式为386以后机型增加的寻址方式,在此不再介绍。)
二、与转移地址有关的寻址方式(略)
3.2 程序占用的空间和执行的时间
- 8 -
汇编语言程序设计
补充:汇编语言的编写及调试运行过程
1、汇编语言源程序的基本格式
注:
1. 程序必须有代码段,而数据段、附加段、堆栈段只有必要时才有。 2. 用ASSUME将我们定义的各段与段寄存器相对应。
3. 在程序开始时,应将除代码段以外的其余各段的段地址赋给相应的段寄存器。 4. 程序结束时要有返回DOS的语句。
2、程序调试过程
1、编辑.ASM汇编语言源程序。(在DOS下可用EDIT编写) EDIT A.ASM
2、用MASM对源程序汇编,产生.OBJ的目标文件。 MASM A.ASM 或 MASM A;
注:如果提示有语法错误,则不产生.OBJ文件,此时我们要返回第1步修改源程序。 3、用LINK对.OBJ文件进行连接,产生.EXE的可执行文件。 LINK A.OBJ 或 LINK A;
4、执行.EXE可执行文件,或者用DEBUG对.EXE文件进行调试。 执行:A
调试:DEBUG A.EXE
3、DEBUG常用指令简介 1、U (反汇编)命令
- 9 -