当前位置:文档之家› 第6章 汇编语言程序设计

第6章 汇编语言程序设计


6.2.1 数据定义伪指令
为源程序中的数据和堆栈区分配数据存储单元 数据定义伪指令格式如下: [<变量名>] <类型> <初值表> 常用的数据定义伪指令类型有: DB(定义字节,常用) DW(定义字,常用) DD(定义双字) DQ(定义四字) DT(定义十字节,用于BCD码)
30
数据定义伪指令后面的初值表可以是常数、 表达式、字符串。 例如:D2 DW 110*230 ;为D2分配1个 字,存放表达式的值 D3 DB ‘GOOD!’ ;为D3分配5字 节,用来存放字符串‘GOOD!’ D4 DD 2.4E+3 ;为D4分配2个 字 ,存放一个浮点数 D5 DB ‘AB’ ;为D5分配2字 节,字符A在低字节,B在高字节
21
TYPE运算符(获取变量的类型属性或地址标号的类 型属性) TYPE运算符加在变量或标号前,返回的数值是反 映该变量或标号类型的一个数值。 如果是变量,则返回数值为字节数:DB为1,DW为2, DD为4,DQ为8,DT为10;如果是标号,则返回 数值为代表该标号类型的数值:NEAR为-1,FAR 为-2。
例如:MOV AX,SEG DATA
20

OFFSET运算符(获取变量或地址标号所在段的段内
偏移地址。)
OFFSET运算符加在变量或标号前,返回的数值 是位于其后的变量或标号的偏移量。

例如:MOV BX, OFFSET BUFF ; 获取
BUFF标号的段内偏移地址,传送给BX LEA BX , BUFF 区别:获取地址的时刻不同.
例6-2 当AL中为正数,将BX内容送AX,使用标号 POSITIVE作为转移指令的目标地址。 OR AL, AL JNS POSITIVE …… POSITIVE: MOV AX , BX

2. 表达式
无论是指令还是伪指令,凡是以常量(立即数) 或符号地址(变量,标号)为操作数的地方,均 可以使用表达式,表达式最终代表一个值,在汇 编过程中完成计算。


(6)分离字节运算符
分离字节运算符包括HIGH和LOW,它们 用于从变量和标号中分离出高字节和低字 节。 例如:DATA DW 2040H MOV AL , HIGH DATA ;分离出高 字节,(AL) = 20H MOV AH , LOW DATA ;分离出低 字节,(AH) = 40H
27
33

EQU(等值伪指令)
等值伪指令EQU用来给数值、字符串或表达式定 义一个等价的符号,其格式如下: <符号名> EQU <表达式> 例如:为常量定义一个符号: ONE EQU 1 TWO EQU 2 SUM EQU ONE+TWO GREETING EQU 'How are you!' ;符号名代表字符串“How are you!”
数据项可以是常量、变量和标号。
表达式则是通过操作符、运算符及括号把常量、
变量和标号连接起来的有意义的式子。
10


1. 数据项
常量
和高级语言规定一样。数值常数如:100H,25D,
110B。字符串常数如:‘d’,‘AB’,‘Hello!’。

变量 变量是内存中一个数据区的名字,即数据所存放 地址的符号地址。变量名应由字母开头,其长度
4
目标程序再经过“连接程序”连接、装配形成可 执行程序,然后装入主存中运行。完整的汇编语言 程序处理过程如图6-1所示。 图 6-1 汇编语言程序处理过程
汇编语言源程序: XXX.ASM 汇编程序汇编 目标程序文件: XXX.OBJ
可执行程序文件: XXX.EXE
连接程序连接
库文件: YYY.LIB

指令助记符也称指令操作码,用来指定操作的性质
或功能,如“MOV”表示传送指令,“ADD”表示加
法指令等。
操作数用来指定参与操作的数据,可以是直接参与
操作的数据,也可以是数据所在的地址。
注释是语句的说明部分由分号开始,用来对指令的
功能加以说明。
9

6.1.3汇编语言的数据项和表达式
计算机硬件技术基础
主讲:
1
第 6章
主要内容
汇编语言程序设计
汇编语言的基础知识,如汇编语言程序的
处理过程,指令中的常量、变量、表达式 ,常用的伪指令。 汇编语言程序的基本结构和设计方法 简单介绍系统功能调用和程序的动态调试
2



6.1 汇编语言概述


6.2 80X86汇编语言伪指令

3. 运算符优先级
运 算 符 圆括号,LENGTH,SIZE 1
优先级别
2
3 4
PTR,OFFSET,SEG,TYPE,THIS,CS:,DS:,ES:,SS:
HIGH,LOW *,/,MOD,SHL,SHR
5
6 7 8 9 10
+,EQ,NE,LT,LE,GT,GE NOT AND OR,XOR SHORT
31
D6 DW ‘AB’ 字,字符A在高字节,B在低字节
;为D6分配1个
S1 DB 5 DUP(?) 节的存储空间 S2 DW 3 DUP(0) 字,初值设为0
;为S1预留5字
;为S2分配3个
32

6.2.2 符号定义伪指令 符号定义伪指令是给一个数值、字符串或表达式 赋予一个名字。 符号定义伪指令有等值伪指令 EQU 、等号伪指 令“=”、符号/标号伪指令LABEL三种。

25
SHORT运算符在转移指令中用于表示段内 短转移,转移的目标地址与本指令之间的 距离在-128 ~+127之间。 段跨越操作符有CS:、DS:、ES:、SS:,用 于跨越当前默认段,为变量、地址标号或 地址表达式指定临时的段属性。 例如,在指令MOV AX, ES: [BX]中,段跨 越操作符ES用于跨越默认段DS,临时指定 ES为当前段,即在附加数据段中找操作数 。
5


6.1.2
汇编语言语句类型和格式
1.汇编语言语句的类型 指令语句:隶属于指令集,汇编后产生目标代码, 可被CPU执行。 伪指令语句:汇编后不产生目标代码, 用于定义 段、子程序、常量、变量及给变量分配存储单元 宏指令语句:用户定义的一个指令序列集合, 汇 编后在引用的地方展开成相应的指令序列。
6.3 80X86汇编语言程序结构 6.4 系统功能调用和动态调试
3
6.1汇编语言概述
汇编语言不同于高级语言,它是一种面向机器的
程序设计语言,与机器硬件密切相关,具有自己独
特的编程优势和专门的应用领域。

6.1.1 汇编语言程序的处理过程
首先“汇编程序”将汇编语言源程序汇编成目标
程序,目标程序即为机器语言程序。
表达式中的运算符可分为以下几类:

算术运算符、逻辑运算符、取值运算符、合成
(属性)运算符
14

(1)算术运算符
常用的算术运算符包括7种:加(+)、减(-)、乘(*)、
除(/)、模除(MOD, 取余数)、左移(SHL)、右移 (SHR)。
15
算术运算符用于数值表达式时,其汇编结果是一
个数值。
除了加、减运算符可以使用变量和标号外,其他
的算术运算符只适用于常量的数值运算。
例如:MOV AX, 22*3+35 ADD AX, 11H/2
ห้องสมุดไป่ตู้
16

(2)逻辑运算符
常用的逻辑运算符包括 4 种:与 (AND) 、或 (OR) 、
非(NOT)、异或(XOR) 。
逻辑运算符只能用于数值表达式,用来对数值进
行按位逻辑运算,并得到一个数值;对地址进行 逻辑运算没有意义。 例如:AND AL , NUM AND 0F0H
35
=(等号伪指令) 其格式如下: <符号名> = <表达式>

使用=定义的符号名可以被重新定义,使符号名具有新值; 等号伪指令定义的符号名仅用于代表数值表达式。
习惯上 “= ”主要用来定义符号常量:
X=18
X=X+1 ;X的值为19
36
EQU和=的区别: ① 使用EQU伪指令定义的符号名不能与其 他符号名重名,符号名必须唯一,且不能被 重新定义,而使用等号伪指令定义的符号名 可以重名,可以被重新定义、重新赋值。 ② 使用EQU伪指令定义的符号名不仅可以 代表某个常数或常数表达式,还可以代表字 符串、关键字、指令码、一串符号(如 WORD PTR)等,而使用等号伪指令定义 的符号名仅用于代表数值表达式。
17

(3)关系运算符
常用的关系运算符包括6种:EQ(=)、NE(≠)、 LT(<)、GT(>)、LE(<=)、GE(>=) 。 在数值表达式中参与关系运算的必须是两个数值, 或同一段中的两个存储单元地址,关系运算的结果 是一个逻辑值(常数),其数值在汇编时获得。
当关系成立时,结果为0FFFFH;当关系不成立时,



(4)合成(属性)运算符
PTR运算符
TPR运算符用来说明或修改位于其后的存储器操 作数的类型。 例如:MOV AX,WORD PTR DATA THIS运算符 THIS运算符用来把它后面指定的类型和距离属性 赋给当前的变量、标号或地址表达式,但是不分 配新的存储单元。
FIRST EQU THIS BYTE SECOND DW 100 DUP (?)
不能超过31个字符。
11

标号
标号是用户按照一定规则定义的标识符,也称符
号地址,用来表示指令在主存中的位置,以便程
序中的其他指令能引用该指令。标号的最大长度
相关主题