第4章 汇编语言程序设计

  • 格式:pdf
  • 大小:2.41 MB
  • 文档页数:16

⑤合成运算符
可对变量、标号或存储器操作数的类型属性进 行修改。
★ 类型设置运算符PTR
类型设置运算符PTR
格式:类型 PTR 表达式 其中类型可以是BYTE、WORD、DWORD、
NEAR、FAR。该算符强制设置表达式类型为 算符前的规定类型。 例: MOV BYTE PTR [SI], 200
可以用不同的寻址方式对其存取。变量具有如下三 种属性: 段属性:指变量所在段的段基址。 偏移量属性:指变量单元地址与段的起始地址 之间的地址偏移量。 类型属性:是指变量所占存储单元的字节数大 小 。 类 型 有 字 节 (BYTE) 、 字 (WORD) 、 双 字 (DWORD)等。
伪指令
表达式
例4.4
例4.5
例4.8 例子
[变量名] 伪指令 表达式[,表达式]
1.DB(Define byte) 定义变量的类型为BYTE,给变量分配字节或字节
串。DB伪操作后面的操作数每个占有1个字节。 2.DW(Define word) 定义变量的类型为WORD。DW伪操作后面的操
(3)标号
标号有三种属性: 段属性:定义标号的程序段的段基址,当程序中引用一 个标号时,该标号的段基址应在CS寄存器中。 偏移量属性:标号所在段的起始地址与定义标号的地址 之间的字节数 。 标号的类型属性:NEAR和FAR。 NEAR标号可以在段内被引用,它所代表的地址指针 为两个字节; FAR标号可以跨段引用,它所代表的地址指针为四个 字节。
1 汇编语言的语句分类 2 汇编语言语句的格式
1. 汇编语言的语句分类
汇编语言常用的基本语句:
★ 指令语句 ★ 伪指令语句
指令语句
指令语句是指在汇编时产生目标代码对应着机 器某种操作的语句,每条指令语句都对应着 CPU的一条机器指令。
伪指令语句
伪指令语句不产生任何目标代码,它是一种指 示性语句,只是指示汇编程序如何进行汇编, 只有在汇编和连接时才起作用。
作数每个占有1个字,即2个字节。在内存中存放 时,低位字节在前,高位字节在后。 3.DD(Define double word) 定义变量的类型为DWORD。DD后面的操作数每 个占有2个字,即4个字节。在内存中存放时,低 位字在前,高位字在后。
[变量名] 伪指令 表达式[,表达式]
常量或常量表达式 值不能超过由伪操作所定义的数据类型限定的范围。例如, DB伪指令定义数据的类型为字节,则其范围为无符号数: 0~255;带符号数:-128~+127,等等。
存储器
例4.8
BUF1 DB ‘HELLO’ BUF1 SA_BUF DW BUF1 LA_BUF DD BUF1
SA_BUF
LA_BUF
48H ‘H’ 45H ‘E’ 4CH ‘L’ 4CH ‘L’ 4FH ‘O’
BUF1的偏移地址
BUF1的偏移地址
BUF1的段基址 存储器
例子
FILLER DB ?
ASCII码字符或字符串 字符串必须放在单引号中。另外,超过两个字符的字符串只 能用DB伪指令定义。
问号“?” 表示初值未确定,常用来预留存储空间。
重复子句DUP 格式为:N DUP (表达式) 其中N为重复次数,括号内的表达式为重复的内容。
地址表达式 即用变量名来表示的变量地址。
例4.4
数值常量 字符常量
数值常量允许使用二进制、十进制、十六进 制数,但要注意应以B、D、H字符结尾。
十六进制数如果以字母开头,则必须在该数 前面加0,以区别于标识符,如0F5H。
ASCII码常数可将字符放在单引号内,如‘A’。
(2)变量
变量:指存放在某些存储单元中的值,这些值是可 变的。
MOV CX,COUNT;(CX)=10 COUNT=COUNT-1 MOV BX,COUNT;(BX)=9
2.数据定义伪指令
数据定义伪指令用来定义一个变量,为变量 分配存储空间,赋初值等。
格式:[变量名] 伪指令 表达式[,表达式] 变量名字段为可选项,可有可无。
表达式可以不止一个,但相互之间应以逗号 分开。
★ SEGMENT/ENDS ★ ASSUME ★ ORG
1)伪指令SEGMENT/ENDS
格式:段名 SEGMENT … 段名 ENDS
2. 汇编语言语句的格式
指令语句的格式为: [标号:] 助记符号 [操作数] [;注释]
伪指令语句的格式为: [名称] 定义符号 [参数][,…参数][;注释]
★ 标号和名称 ★ 助记符和定义符 ★ 操作数 ★ 注释
1)标号和名称
标号和名称代表该语句的存储器地址。 标号后面要紧跟一个冒号“:” 。标号在一些指令中充当 操作数,用来表示转移地址。 名称可以是变量名、段名、过程名等。
运算结果为数字值。 当关系不成立,则结果为0;
当关系成立,则结果为全1。 例:MOV AL,5 NE 2;关系成立,故(AL)=0FFH
MOV AL,5 LT 2;关系不成立,故(AL)=00H
④分析运算符
★ 取地址偏移量运算符OFFSET ★ 取段基址运算符SEG ★ 取类型运算符TYPE ★ 取变量元数个数运算符LENGTH ★ 取变量字节数运算符 SIZE
第4章 汇编语言程序设计 (Assembly Language Programming)
4.1 汇编语言概述 4.2 汇编语言源程序格式 4.3 汇编语言程序设计 4.4 DOS功能调用
作业
4.1 汇编语言概述
机器指令:用二进制编码的指令
如:1000 1001 1101 1000
机器语言编写程序烦 琐,难记忆,易出错。
伪指令语句中的定义符对应于8086宏汇编中 提供的伪操作功能。
3)操作数
根据不同的指令,可能是单操作数或双操作数,也 可能不带操作数。
伪指令语句中的操作数可以是一个或多个,操作数 之间用逗号隔开。
操作数可以是: ★ 常量 ★ 变量 ★ 标号 ★ 寄存器 ★ 表达式
(1)常量
常量:指令中出现的固定不变的值。可分为:
说明其变量元数的个数,则利用LENGTH算 符可以得到这个变量的元数个数。 如果未用DUP说明,则得到结果总为1。
e)取变量字节数运算符 SIZE
格式:SIZE 变量 如果一个变量已用重复操作符DUP说明其变
量的个数,则利用SIZE算符可以得到这个变 量的字节总数。 如果未用DUP说明,则得到的结果和TYPE算 符所得结果相同。 SIZE值=LENGTH值× TYPE值
地址变量或标号,属性包括:段、偏移量和类型。
①算术运算符
包括:+(加)、-(减)、×(乘)、/(除)、 MOD(取模)等。
算术运算符可用于数值表达式,运算结果是 一个数值。
在地址表达式中,只能使用“+”、“-”运算符。
②逻辑运算符
包 括 : AND( 与 ) 、 OR( 或 ) 、 XOR( 异 或 ) 、 NOT(非)。
这些符号包括汇编语言中所用的变量名、标 号名、过程名、寄存器名以及指令的助记符 等。
符号定义伪指令有:
★ 等价伪指令
★ 等号伪指令
1)等价伪指令EQU(equate)
格式:符号名 EQU 表达式 EQU伪指令将表达式的值赋予一个名字。以后可用
这个名字来代替上述表达式。 例:LF EQU 0AH
符号指令:由助记符、符号组成,与机器指令一一对应
1000 1001 1101 1000
MOV AX,BX
汇编:机器只能识别机器指令,所以需要将符号指令 翻译成机器指令,翻译的过程称作汇编。 汇编程序:完成汇编任务的程序。
4.1 汇编语言概述(续)
汇编语言源程序:用符号指令书写的程序。
1E 2B C0 50 B8 34 12 8E D8
汇编语言中标识符的命名规则为: ①标识符的第一个字符必须是字母、问号?、@或下划线四
者之一; ②从第二个字符开始可以是字母、问号?、@、下划线或数
字; ③标识符不能是保留字(例如MOV、STACK)。 在给标识符命名时,应使标识符命名与它代表的内容相符。
2)助记符和定义符
指令语句中的助记符,规定了该指令语句的 操作。例如ADD、XOR等。
SUM DW ?
DB ?,?,?
BUFFER DB 5 DUP(?)
ZERO DW 6 DUP(0)
STR
DB 7 DUP(‘OK!’)
回顾一下LENGTH、SIZE的用法
3.段定义伪指令
一个汇编语言源程序由若干个逻辑段组成,所有的 指令、变量分别存放在各个逻辑段中。
段定义伪指令用来定义汇编语言源程序的逻辑段。 常用的段定义伪指令有:
c)取类型运算符TYPE
格式:TYPE 变量或标号 该算符返回的结果为一数值。
表4.1 TYPE返回值与变量、标号类型的对应关系
TYPE返回值 变量类型 TYPE返回值 标号类型
1
BYTE
-1
Hale Waihona Puke NEAR2WORD
-2
FAR
4
DWORD
d)取变量元数个数运算符LENGTH
格式:LENGTH 变量 如果一个变量已用重复操作符DUP(duplicate)
a)取地址偏移量运算符OFFSET
格式:OFFSET 变量或标号 例: MOV SI,OFFSET BUF
等价于 LEA SI,BUF 注意:OFFSET后面只能是变量或标号。
b)取段基址运算符SEG
格式:SEG 变量或标号 例:MOV AX,SEG BUF;将BUF所在段的
段基址送入寄存器AX。
X1 BUF