第四章宏汇编语言程序设计
一个例子程序
Page 124,例4-1 程序由段的描述组成 指令语句/伪指令语句构成
§4-1 汇编语言程序格式
指令性语句 伪指令语句 数据项
汇编语言程序格式——指令语句
对象
CPU 与机器码相对应,要求CPU执行的操作
格式
[标号:] 指令助记符 [[操作数],操作数][ ;注释]
EQ、NE、LT、GT、LE、GE 对象
数据 同段内的偏移地址
结果
真:全1 假:全0
表达式——关系运算
例:
abc
equ 10h
mov ax,abc eq 10 mov ax,abc lt 10 mov ax,abc gt 10
表达式——数值返回运算
Offset、seg、type、length、size 对象
汇编语言程序格式——伪指令语句
对象
汇编程序 通知编译器,如何生成目标码。本身不产生
机器目标吗
格式
[名字] 伪指令助记符 [[操作数],操作数...][ ;注释]
汇编语言程序格式——数据项
常数
确定的数据,有固定值,没有属性
变量
存放在存储单元中的值 在程序中以变量名的形式出现,代表存放数
据的存储单元的符号地址 三属性
段属性/段内偏移量属性/类型属性
汇编语言程序格式——数据项
标号
可执行指令语句的首字节地址的符号表示 被JMP/CALL/LOOP等所使用 三属性
段属性/段内偏移量属性/类型(距离)属性
§4-2 MASM中的表达式
指令操作数形式
常数、变量、标号、表达式、关键字
…… 段名 ends
定义组合类型 NONE PUBLIC COMMON AT STACK
伪指令语句——段定义
段名 segment 定位类型 组合类型 ‘分类名’ ……
段名 ends
定义该段的分类名,分 类名相同,被组合成同 一个段
伪指令语句——数据定义
dseg segment at 0055h one db 0 two dw two three dd two four equ 10h five dw four six db 5 - four
§4-3 伪指令语句
不生成机器码,帮助解释、生成指令的 机器码
变量定义、存储器分配、段定义……
伪指令语句——数据定义
定义/分配变量的存储器单元,并初始化 存储器单元
格式
变量名 助记符 操作数,操作数… ;注释
DB
符号地址
DW
DD
伪指令语句——数据定义
DUP的使用
定义重复数据 例 abc db 10 dup(0)ቤተ መጻሕፍቲ ባይዱab db 100 dup(1,2,34 dup(0))
变量、标号
结果
值
表达式——数值返回运算
Offset
变量、标号的段内偏移地址 与 LEA 的差异???
Seg
变量、标号的段地址
表达式——数值返回运算
Type
变量、标号的类型属性
Length
外层DUP的单元个数 无DUP则返回1
表达式——数值返回运算
Size
size = length * type
dseg ends
伪指令语句——段分配语句
ASSUME
说明当前段是哪些段,帮助汇编程序产生段前缀 必须放在第一句指令之前 不得短缺
Assume cs:cseg,ds:dseg,ss:sseg,es:eseg
Assume nothing
伪指令语句——过程定义
子程序 格式
过程名 PROC …… Ret
表达式——属性修改运算
Ptr
临时改变变量、标号的类型属性 mov word ptr [bx],0 jmp far ptr sub1
This
给变量、标号赋予类型 first equ this byte table dw 2000h
表达式——属性修改运算
High/Low
字节分离 常数、常数表达式 mov al,low (offset da1)
段名 segment 定位类型 组合类型 ‘分类名’ ……
段名 ends
伪指令语句——段定义
段名 segment 定位类型 组合类型 ‘分类名’
…… 段名 ends
定义该段起始地址定 位 Para Byte Word Page
伪指令语句——段定义
段名 segment 定位类型 组合类型 ‘分类名’
表达式——逻辑运算
与、或、非、异或——按位运算 运算对象、结果
常数
禁忌
变量名
表达式——逻辑运算
例:
abc abc1 v1 mov mov mov
= 10h equ 2ah db 3ah ax,abc and 0fh ax,abc or abc1 ax,v1 and abc
表达式——关系运算
第四章 宏汇编语言程序设计
本章内容
汇编语言程序格式 MASM中的表达式 伪指令语句 DOS系统功能调用 BIOS中断调用
概述
汇编语言
利用指令的助记符、符号地址、标号来编 写的语句
汇编语言源原程序
用汇编语言编写的程序
可
源 程 序
汇 编 语 言
目
汇编程序
标
程
序
连接程序
执 行 程 序
过程名 ENDP
属性
伪指令语句——END
结束语句 标识程序的首指令 格式
END 标号
伪指令语句——段寄存器的初始化
DS/ES
指令装入 mov ax,dseg mov ds,ax mov ax,eseg mov es,ax
伪指令语句——段寄存器的初始化
表达式的构成
运算符 运算对象:常数、变量、标号 结果为常数、地址
在汇编时求值 六大类运算
表达式——算术运算
加、减、乘、除、模、左移、右移 运算对象、结果
整数
禁忌
地址相加 无法求值
表达式——算术运算
例:
abc var1 var2 mov mov mov mov
equ 35h db 10h db 0ah ax,abc shr 4 ax,abc shl 4 cx,var2 - var1 bx,abc - 5
伪指令语句——数据定义
字符串的定义 DB/DW/DD?
DB按正常的顺序排列 DW/DD只能以两个一组作定义,顺序不同
伪指令语句——数据定义
符号地址的使用 DW? DD? DB??
伪指令语句——赋值
不分配存储器空间 常数 EQU
不可重复赋值
=
可重复赋值
伪指令语句——段定义