文档介绍:
第4章汇编语言程序格式
汇编程序
编辑程序
连接程序
汇编程序功能
目前常用的汇编程序
Microsoft: MASM
Borland: TASM
注:
汇编程序的主要功能:
(1)、检查源程序
(2)、测出源程序的语法错误,并给出出错信息
(3)、产生源程序的目标文件,并给出列表文件
(4)、展开宏指令
伪操作是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、定义程序模式、数据定义、分配存储区、指示程序开始结束等功能。
汇编语言程序的语句:
一、指令
二、伪操作
三、宏指令
data SEGMENT ; 数据段
var DB ?
data ENDS
code SEGMENT ;代码段
ASSUME CS:code,DS:data
start: MOV AX, data
MOV DS , AX
MOV var, CL
MOV AH , 4CH
INT 21H ;返回DOS
code ENDS
END start
功能:告诉汇编语言应该选择那一种指令
主要有:
.8086 选择8086指令系统
.286 选择80286指令系统
.286P 选择保护方式下的80286指令系统
.386 选择80386指令系统
.836P 选择保护方式下的80386指令系统
.486 选择80486指令系统
.486P 选择保护方式下的80486指令系统
.586 选择Pentium指令系统
.586P 选择保护方式下的Pentium指令系统
注:
段定义伪操作
1、完整的段定义伪操作
格式: 段名 SEGMENT [定位类型, 组合类型, 使用类型,类别]
……
段名 ENDS
段定义由伪操作SEGMENT开始、ENDS结束。
其中: SEGMENT 和ENDS 必须成对出现,
且语句前必须有段名,段名必须相同。
SEGMENT和ENDS语句之间可以有指令和其他伪操作,
表示存放在该段内存的变量、指令或其他伪操作对该段内存
的处理
程序中可以定义多个段。
程序经汇编、连接及装入内存后,段名为一具体的段值。
例:定义用户堆栈
stack_seg segment
dw 40H dup (?)
tos label word
stack_seg ends
code_seg segment
……
mov ax, stack_seg
mov ss, ax
mov sp, offset tos
……
code_seg ends
STACK
40H
(SP)
(SS)
ASSUME伪操作
格式 ASSUME 段寄存器:段名[, 段寄存器:段名, …]
其中: 段寄存器为CS、DS、ES、SS中的一个
段名为用伪操作SEGMENT定义过的段名
例 ASSUME CS: cc , DS:aa
ASSUME 伪操作的作用
明确段和段寄存器的关系,指示汇编程序指令中用到的标号、
过程及变量所在的段。
其中对标号、过程必须用 CS 段寄存器指示
对变量可用 CS、DS、ES、SS 段寄存器指示
若未用ASSUME语句指示指令中用到的标号、过程和变量所在
的段, 汇编程序将给出错误信息。
ASSUME语句只起指示作用,并无实际的操作。
在程序中引用定义的变量做内存操作数时,
需按寻址方式用传送指令(如MOV)给相应的段寄存器赋值。
data_seg1 segment
…
data_seg1 ends ; 定义数据段
data_seg2 segment
…
data_seg2 ends ; 定义附加段
code_seg segment
assume cs:code_seg, ds:data_seg1, es:data_seg2
start:
mov ax, data_seg1
mov ds, ax
mov ax, data_seg2
mov es, ax ; 段地址段寄存器
…
code_seg ends
end start
例:
第1
第3
第2