汇编语言程序设计:第1章

Download Report

Transcript 汇编语言程序设计:第1章

微型计算机原理
及接口技术
授课教师:
周茂霞
第 4 章
第4章 汇编语言程序设计
第一部分:
程序的基本结构
语法规则
上机操作过程
第二部分:
汇编语言源程序结构化程序的设计的基本方法
典型例题分析
第 4 章
4.1
概述
程序设计语言
 机器语言
低级语言
 汇编语言:机器语言的符号化,与机器密切相关。
 高级语言
第 4 章 4.1.1
机器语言(machinelanguage)
机器语言编写的
程序:目标程序
是用 二进制 代码表示的
计算机 能直接识别和
机器语言 :
执行的一种机器指令的集合。它是计算机的设计者通
过计算机的 硬件 结构赋予计算机的操作功能。机器
语言具有灵活、直接执行和速度快等特点。不同型号
的计算机其机器语言是不相通的,按着一种计算机的
机器指令编制的 程序 ,不能在另一种计算机上执行。
第 4 章 4.1.1
机器语言(machinelanguage)
用机器语言编写程序,编程人员要首先熟记所用计算机的全部
指令代码和代码的涵义。
手编程序时,程序员得自己处理每条指令和每一数据的存储分
配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种
状态。这是一件十分繁琐的工作,编写程序花费的时间往往是实际运
行时间的几十倍或几百倍。
编出的程序全是些0和1的指令代码,直观性差,还容易出错。
现在,除了计算机生产厂家的专业人员外,绝大多数程序员已经不再
去学习机器语言了。
第 4 章 4.1.1
机器语言(machinelanguage)
小结:
如何解决矛盾呢?
机器语言是微处理器理解和使用的,用于控制
它的操作二进制代码。
8086到PENTIUM的机器语言指令长度可以从1
字节到13字节。
尽管机器语言好像复杂的,然而它是有规律的。
存在着多至100000种机器语言的指令。这意味
着不能把这些种类全部列出来
第 4 章 4.1.2
汇编语言(Assembly Language)
汇编语言(Assembly Language):是面向机器的程序
设计语言。
在汇编语合中,用助记符(Memoni)代替操作码,用
地址符号(Symbol)或标号(Label)代替地址码。这样用
符号代替机器语言的二进制码,就把机器语言变成了汇
编语言。于是汇编语言亦称为符号语言。
第 4 章 4.1.2
汇编语言(Assembly Language)
 汇编程序: 使用汇编语言编写的程序,机器不能直接识别,
要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的
Microsoft 公司的
程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。
MASM宏汇编语言
汇编:汇编语言把汇编程序翻译成机器语言的过程称为汇编。
汇编语言源程序(source program)
汇编语言
源程序
汇编程序
翻译
图4.1汇编程序功能示意图
目标程序
第 4 章 4.1.2
汇编语言(Assembly Language)
汇编语言特点:
汇编语言比机器语言易于读写、易于调试和修改,同时也
具有机器语言执行速度快,占内存空间少等优点,但在编写复
杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不
能通用,也不能在不同机型之间移植。
程序员必须熟悉计算机的硬件结构,有要熟悉计算机的指令
系统,才能写出高质量的汇编语言源程序。
根据特点,比较适合编制系统软件、实时控制软件,以及直
接控制硬件的接口的驱动程序。
第 4 章 4.1.3
高级语言(high level language)
为了克服汇编语言的缺点,更方便于编写计算机应用程序,使
程序设计语言适合于描述各种算法,而不依赖于具体的计算机结构
和指令系统,后来便产生了各种类型的高级语言。面向过程的语言。
高级语言的优点:
(1)不依赖于特定的机器,独立于机器,用同一种高级语
言编写的程序可以在不同的机器上运行而获得相同的结果。
(2)编写的程序由一系列编程语句和相应的语法规则构
成,编程方法更适合于人们的思维习惯,易于理解和阅读,程序
本身具有可移植性,通用性强。
第 4 章 4.1.3
高级语言(high level language)
高级语言的缺点:
(1)翻译程序和解释程序复杂,占用内存空间大,与汇
编语言程序相比,经编译后产生的目标程序长,执行速度
慢。同时,目前高级语言处理微型计算机接口和中断处理
系统比困难。
(2)目前,高级语言主要用于科学计算和其他非实时
的数据处理。
第 4 章 4.1.3
高级语言(high level language)
高级语言的执行:
高级语言源程序必须经过编译软件或解释软件程序,
翻译成目标程序,机器才可以运行。 编译软件程序是一
次把所有的源程序翻译成功后才能运行程序,得到处理结
果,一般高级语言采用编译方式。解释软件程序的处理是
边翻译边执行,如BASIC语言。
高级语言
源程序
翻译
编译软件程序或
解释软件程序
目标
程序
第 4 章 4.1.4
宏汇编程序及上机过程简介
宏汇编程序主要功能:是一种系统软件,将汇编语言源程序
翻译成对应的目标程序。
宏汇编程序功能:
(1)按用户要求自动分配存储区
(2)自动把各种进位数制转换成二进制
(3)计算源程序中表达式的值
(4)对源程序进行语法检查、给出错误信息
(5)进行宏汇编,展开指令。
第 4 章 4.1.4
宏汇编程序及上机过程简介
汇 编
编辑软
MASM
形成汇编
语 言
件进行
语言源程
源程序
编辑
序文
汇编程序
汇编
件.ASM
执
形成可执
行
行文件
LINK
连接程序
. EXE
连接
程
序
机器语言目
标程序文件
.OBJ
.LST
图4.3 汇编语言上机处理过程
第 4 章 4.2 汇编语言源程序的格式与基本语法
不同微处理器的汇编语言语法规则不尽相同,但表
示方法、基本语法结构形式类似。
程序段不是规范的完整的宏汇编语言源程序,因此
不能形成汇编,形成目标代码。
一个完整的汇编语言源程序采用分段结构。
第 4 章 4.2.1 汇编语言源程序的分段结构
第 4 章 4.2.1 汇编语言源程序的分段结构
第 4 章 4.2.1 汇编语言源程序的分段结构
第 4 章 4.2.1 汇编语言源程序的分段结构
NAME
自己根据程序取名 ;
STACK
:
STACK
SEGMENT
DATA
:
DATA
ENDS
SEGMENT
ENDS
CODE SEGMENT
ASSUM CS:CODE, DS :DATA, SS:STACK
START:
…………………..
:
CODE
ENDS
END START
;整个源程序汇编结束
第 4 章 4.2.2 汇编语言语句类型与格式
一、语句的种类
MASN宏汇编语言语句的种类分为三种:
指令性语句:与机器指令对应,在汇编过程产生与之对应指令的
DATA SEGMENT
NUM
DW 1234H
目标代码,是可执行的语句。
DATA
ENDS;在汇编时,变量
指示性语句:包括伪操作命令与伪操作符,在汇编过程不产生指
NUM定义为字类型数据区的首地址,
存放有数据1234H
令的目标代码,类似于指令是非执行的指令。作用:在汇编时,只为
汇编程序提供所需要的有关信息,执行特 定的功能操作。例 如定义符
号、定义数据常数、分配存储区等,在汇编过程起作用。
宏指令语句:简化汇编语言源程序的设计,它以某个宏指令名定
义一段指令序列,在程序中用一条宏指令语句代替一段程序,凡是有
宏指令的程序在汇编时,用相应的目标代码序列代替,插入到对应的
程序中。
第 4 章 4.2.3 汇编语言语句类型与格式
二、语句的格式
汇编语句一般由4个字段(区域)构成,三种语句有相似的结构。
1、指令性语句的格式
标号区
[标号:]
LOOP:
操作码区
助记符
ADD
操作数区
;注释区
[操作数表列]
AX,BX
[;注释]
;AX
AX+BX
第 4 章 4.2.3 汇编语言语句类型与格式
二、语句的格式
汇编语句一般由4个字段(区域)构成,三种语句有相似的结构。
2、指示性语句的格式
[符号名]
定义符
[参数1,参数2,….,参数n]
[;注释]
DAT
DB
12H,34H,56H
;注释
注意:
符号名的定
义规则,
不是必须有。
用空格分隔
定义符
汇编程
序规定
的伪操
作指令
DATA
NUM
DATA
SEGMENT
DW
1234H;
ENDS
第 4 章 4.2.3 汇编语言语句类型与格式
二、语句的格式
汇编语句一般由4个字段(区域)构成,三种语句有相似的结构。
3、宏指令语句的格式
[标号:]
宏指令名
宏指令名
由编程者命名,
可出现在汇编
语言指令序列,
做为宏指令使
用。
[参数1,参数2,….,参数n]
[;注释]
操作数
用逗号分
开。
MOV AL, 90H
CRLF
MOV DL, 30H
第 4 章 4.2.3 汇编语言语句类型与格式
二、语句的格式
4、标识符的命名
标识符:
段名、过程名、变量名、标号、组名、记录名、结构名、
模块名、宏指令名等。
标识符可由以下字符集组成:
(1)字母(a~z A~Z)
(2)数字(0~9)
(3)特殊符号
第 4 章 4.2.3 汇编语言语句类型与格式
二、语句的格式
4、标识符的命名
命名规则:
(1)第一个字符一般为英文字母。
(2)如若用
就必须是第一个字符。
(3)大小字母可以混用,汇编时不加识别。
(4)特殊符号不能成标识符。
(5)若超过31个字符,只有前31个有效。
(6)标识符不能用系统的中的保留字,如助记符、伪操作指
令、运算符、寄存器名等。
第 4 章
第 4 章
 开始讲课
开始讲课
第 4 章 4.2.3
LEA SI,SUM1
LEA DI,SUM2
汇编语言语句类型与格式
三、关于指令性语句的说明
LEA BX,SUM
CLC
MOV CX,04H
LOP1:MOV AL,[SI]
(1)标号以及属性:给存放指令的机器码所在存储单元的地址所起的名
ADC AL,[DI]
字,标号实质上是指令的名称地址(符号地址),用来转移或调用指令的
MOV [SI],AL
操作数,表明程序转移的目标地址。
INC SI
1、标号(LABEL):
INC SI
INC DI
标号的三种属性:
段属性: CS
INC DI
DEC CX
偏移量属性:IP
JNZ LOP1
RET
类型属性(TYPE):说明段内操作还是段间操作。
近程NEAR OR
远程 FAR
JMP转移指令
第 4 章 4.2.3 汇编语言语句类型与格式
三、关于指令性语句的说明
(2)标号定义及组成
标号用一个标识符(规则)定义。最好用有一定含义的英文单词缩
写,增加程序的可读性。
Print PROG
………….
(3)使用过程定义的伪操作指令命令PROC定义一个“过程”时,过程
名是一个标号,该标号作为CALL指令的操作数使用。
………….
Mov AL,06H
RET
CALL print
Print ENDP
…………
第 4 章 4.2.3 汇编语言语句类型与格式
三、关于指令性语句的说明
2、关于操作数(operand):可由标号、界限符、常量、变量、表达式
和寄存器等组成。
操作数的类型:
(1)常数操作数:可为直接数值表达的常数或符号名表示的常数。
[数值常数]表示的方法:
①二进制常数 ②十六进制常数
Num DB 123H
③八进制常数 ④十进制常数
NUM1 DW 12
⑤十进制科学计数表示法,6.24E-4
NUM2 DW 12O
NUM3 DW 12B
第 4 章 4.2.3 汇编语言语句类型与格式
三、关于指令性语句的说明
(1)常数操作数:
[数值常数]:
单引号
代表
ASCII码
[字符常数]:‘A’—41H,’CD’——4344H 值
[数值符号名]:在指示性语句中:count EQU 2343H
[常数表达式]:可求值的表达式,在汇编时,计算出。
DAT DB
23H+45
H
第 4 章 4.2.3 汇编语言语句类型与格式
三、关于指令性语句的说明
(2)寄存器操作数:内部寄存器可以作为一个操作数使用,以其存
放的数据参加操作,可以是源操作数,可以是目的操作数。IP指令
指针寄存器不可以作为寄存器来使用。
8位的寄存器
16位的寄存器AX、BX、CX、DX、SI、DI、BP、SP、DS、CS、
ES、SS
第 4 章 4.2.3 汇编语言语句类型与格式
三、关于指令性语句的说明
(3)存储器操作数:以指定的存储单元的数据做指令操作的内容,
汇编指令中的存储器操作数实际上是偏移地址表示的存储单元。
分为:标号与变量(内存变量)(段属性、偏移属性、类型属性)
第 4 章 4.2.3 汇编语言语句类型与格式
三、关于指令性语句的说明
变量(内存变量):如变量BUFFTER
段属性:属于哪个段,段基址是多少
偏移属性: LEA AX,BUFFTER;
MOV AX, OFFSET BUFFTER
类型属性: DB,DW ,DD
第 4 章 4.2.3 汇编语言语句类型与格式
三、关于指令性语句的说明
操作类型必须明确,而不允许模糊,对于含有源操作数与目的
操作数的指令性语句,要求两者的数据类型必须一致。
如果双操作数类型中,一个操作数类型明确,一个不明确,汇
编程序规定以明确的那个操作数做为两个操作数的 共同类型。
第 4 章 4.2.3 汇编语言语句类型与格式
三、关于指令性语句的说明
DAT DB 18,20,30
……
MOV AL DAT
MOV AX, DAT
MOV AX, WORD PTR DAT
MOV [BX],100
MOV WORD PTR [BX], 100
分析类型
是否一致
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
汇编语言表达式:分为 数值表达式 与 地址表达式 ,可以
作为指令中的一个操作数,这就涉及到了运算符和伪操作符。
伪操作符是指示性语句和指令性语句操作数的修饰词。
表达式:由常数、变量、标号数据等再加上必要的运算符和
伪操作构成。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
1、运算符: 算术运算符、逻辑运算符、关系运算符。
(1) 算术运算符:+、—、*、/、MOD、SHR、SHL。
例如:NUM=0101 1010B 表达式 NUM SHL 1=1011 0100B
MOV AX,2*0101H
MOV AX,STA+2;STA为变量,表达式为存储单元地址
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
1、运算符: 算术运算符、逻辑运算符、关系运算符。
(2)逻辑运算符:AND OR XOR NOT
例如:MOV AL,77H AND 84H;
AL=04H
MOV AX,00FFH OR 1783H ; AX=17FFH
MOV AH,,NOT 0FFH ;
AH=00H
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
1、运算符: 算术运算符、逻辑运算符、关系运算符。
(2)逻辑运算符:只能出现在数值表达式中,只能对常数进
行逻辑运算,其结果仍是一个常数。
注意:逻辑运算指令的助记符的符号 与 逻辑运算符是相同的,
意义不同注意区别。
AND
BX,77H AND 0FEH
分析
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
1、运算符: 算术运算符、逻辑运算符、关系运算符。
(3)关系运算符:EQ、LT、GT、LE、GE等运算符号。
一个关系运算符联系两个操作数,操作数可以为数值组成的数
值表达式,也可以是地址表达式,但表达式运算的结果一定是
一个固定的数值,用来表示逻辑运算发结果。
结果:真===关系值为1
假===关系值为0
分析
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(3)关系运算符:EQ、LT、GT、LE、GE等运算符号。
例如:
MOV AX,PORT LT 5
汇编
PORT<5----MOV
AX,0FFFFH
PORT>5--- MOV AX, 0
分析
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(3)关系运算符:一般不单独使用,常由各种运算符组合成逻
辑表达式的形式。
例如:
MOV
BX,((PORT LT 5)AND 20H)OR ((PORT GE 5) AND 30H)
分析
PORT<5---- MOV BX,20H
PORT>5--- MOV BX, 30H
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符:
两类 :分析运算符
合成运算符
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符:
[分析运算符 ]:对存储器地址(变量或标号)进行分析,它可
对存储器的三个属性(段基址、偏移量、类型)分离出来,返
回所在的位置并以数值的形式作为操作数使用。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符: [分析运算符 ]
(1)SEG :段地址操作符
功能:利用该操作符返回一个变量或标号所在的段基址。
格式:SEG
变量名 或 标号名
例如: MOV DX, SEG ABC
MOV DS,DX
同一个段内所有变量的段基址是相同的。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符: [分析运算符 ]
(2) OFFSET :偏移操作符
功能:取变量或标号所在的段的偏移地址。
格式: OFFSET 变量名 或 标号名
Mov SI ,
OFFSET DAT1
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
例如: 数据段的DATA定义如下的变量
MOV
DATA SEGMENT
汇编成:MOV AX, 0
DAT1 DB 20,30
MOV
DAT2 DW 2000H,3532H
汇编成:MOV AX, 2
DAT3 DD 1234 5678H, 9ABCDEFH
MOV
DATA ENDS
汇编成:MOV AX, 6
AX OFFSET DAT1
AX OFFSET DAT2
AX OFFSET DAT3
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符: [分析运算符 ]
(3) TYPE :类型操作符
功能:返回取得变量或标号的类型属性值。
格式: TYPE 变量名 、标号名 或 结构名
MOV AX,
TYPE
DAT1(变量)
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符: [分析运算符 ]
内存变量类型属性值规定
定义的伪指令 变量类型
属性值
DB
BYTE
1
DW
WORD
2
DD
DWORD
4
DQ
QWORD
8
DT
TBYTE
10字节型
10
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符: [分析运算符 ]
标号的类型属性值规定
NEAR 近程
-1
FAR 远程
-2
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
TYPE 放变量前面
ARRAR
DW 1,2,3
TABL DB ‘3ABCDHFJAK’
:
MOV SI , TYPE ARRAY
MOV AH ,TYPE TABL
分析SI
与AH值
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
TYPE 结构前面
student
分析BX
值
STRUC
NAME1 DB ‘ABCD’
NO
DB ?
NUM1
DB ?
NUM2
DB ?
NUM3
DB ?
Student ENDS
MOV BX, TYPE student
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
TYPE 标号前面
返回的是近程NEAR(-1)
或远程FAR(-2)的属性值。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符: [分析运算符 ]
(4)LENGTH 。
功能: 返回变量或结构的数据区的数据总数。在8086汇编语
言中,LENGTH运算符只对DUP定义的变量才有意义,它给出分
配给一变量的基本单位的数目。(字、字节、或双字)
对于没有使用DUP定义的变量返回值为1。
格式: LENGTH
变量名
第 4 章 4.2.3 汇编语言语句类型与格式
n DUP( )
表示重复定义,其( )内的数据项表示重复的内容,前边n表示
重复定义的项数。
例如:
ARR DW 20 DUP(2OH);
DAT DB 12,25,‘AB '
MOV AL,LENGTH ARR
;AL←20
MOV AH, LENGTH DAT
; AH←1
其中第一个变量ARR用
重复定义DUP操作定义里
20字,每个数据为
0020H(40个字节)
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符: [分析运算符 ]
(5)SIZE
功能:分配字节长度操作符。若某个变量在定义时使用了DUP
重复定义操作符,则利用SIZE操作符返回得到分配给该变量数
据区的字节总数。若未使用重复定义操作符DUP定义的其他变
量,则返回值为TYPE运算的结果。
格式: SIZE 变量名
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(5)SIZE
例如:
TBL DW
TBL1 DB
………
MOV AL
MOV AH
MOV BL
MOV BH
100 DUP (?)
12H,34H
, SIZE TBL1
;AL←1
, SIZE TBL
;AH←-200
,LENGTH TBL ;BL←100
,TYPE TBL
;BH←2
第 4 章 4.2.3 汇编语言语句类型与格式
TYPE
LENGTH SIZE
对同一个变量操作,三个操作符的返回值
符合如下关系:
SIZE TBL=(LENGTH TBL)*(TYPE TBL)
即
SIZE =LENGTH x TYPE
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
2、取值运算和属性操作符:
[合成运算符]:
该类运算符规定存储器操作数的某个属性,或者指定存储变
量的类型属性等。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(1)PTR
功能一一指定建立存储器操作数的类型属性(一个变量或标号)o
格式:类型 PTR 表达式
其中类型可以是BYTE、WORD、DWORD、NEAR、FAR。
表达式可为地址表达式或标号。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(1)PTR
功能:PTR的含义是用新的类型属性取代变量或标号的原有的类型
属性,按新类型属性进行寻址访问。
PTR建立确定一个新的存储器操作数,它与其后的存储器操作数
有相同的段地址和偏移地址,但有不同的类型属性。
PTR的作用仅仅是修改存储器操作数的类型,它只是在本指令中
临时改变操作数类型,不影响在其他指令中同一个操作数的类型。
PTR并不分配存储单元。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(1)PTR
VARW DW 2030H, 4080H
………..
MOV AL ,BYTE PTR VARW
;变量VARW属性定义为BYTE字节型。
MOV AX,VARW
;变量VARW属性仍然为WORD字型。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(1)PTR
10H
20H
30H
MOV AH,BYTE PTR VARW[DI]
JMP DWORD PTR [BX]
40H
;段间间接转移
CALL WORD PTR [BX][SI]
;段内间接调用
此处调用CALL指令由[BX][SI]基址变址确定的存储器操作数
的地址,但其操作类型不明确,故而由PTR指定为字类型的操作,属
于段内间接调用子程序。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(1)PTR
10H
20H
利用PTR操作符为同一个存储单元的地址建立
30H
一个类型不同的新的变量名。
40H
例如:
DATA1 DB 100 DUP (?) ;DATA1为字节型变量
DATA2 EQU WORD FTR DATA1 ;DATA2为字型变量
DATA3 EQU DWORD PTR DATA1 ;DATA3为双字型变量
变量DATA1、DATA2、DATA3表示同一个存储区的起始地址,具有相
同的段属性和偏移量属性,但是,它们具有不同的类型属性。若
指令中进行字节操作,使用DATA1,若进的是字操作,必须使用
DATA2 EQU 此处表示把某种类型属性赋给变量。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(1)PTR
10H
20H
MOV DATA1,AL ;寻址合法
30H
MOV DATA1, AX ;寻址非法
40H
MOV DATA2 ,AX ;寻址合法
因此,必须按PTR指定的类型属性对相应存储器进行寻址,利用PTR
明确指明操作数的类型。
MOV [BX] ,5 (; 讨论是字操作还是字节操作?)
必须加PTR予以说明确认。
INC BYTE PTR[BX] ;字节操作
MOV WORD PTR [BX] ,5
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(1)PTR
可利用 PTR 为标号定义新的类型属性。
例如:
NEXT :MOV BX ,100
;NEXT为NEAR近程属性
FNEXT EQU FAR FTR NEXT ;FNEXT为FAR远程属性
NEXT JNEXT
标号具有相同的段属性、偏移量属性,
但是具有不同的类型属性。一个实现
短间转移,一个实现段内转移
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(1)PTR
如果在程序中,指令中引用的标号尚未定义(超前使
用标号),应用PTR指出标号的类型。例如:
JMP NEAR PTR NEXT
……….
NETX :
MOV BX ,100
;超前引用
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(2)THIS——指定属性操作符
格式:
THIS
类型
其类型可以是BYTE、WORD、DWORD、FAR、NEAR。
操作符功能:用以指定存储器操作数或地址的类型属性。可以指
定一个变量具有BYTE、WORD、DWORD类型属性,也可以指定一个标
号具有NEAR或FAR类型属性。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(2)THIS——指定属性操作符
FIRST—BYTE EQU THIS BYTE
WORD—TABLE DW 3275H ,08ABH
用EQU为符
号名赋予
THIS 指定
的类型
该操作符对应的语句放在DB,DW等定义存储变量的前边(或
者标号定义的前边),规定一个新变量(或新标号)的属性,其段地
址和偏移地址为紧跟后边用DB、DW定义(或标号定义)的变量(或
标号)的段地址和偏移地址。
注意寻址方
式已经变了。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
(2)THIS——指定属性操作符
该操作符可以为标号定义新的类型
TAB
JMP TAB 可
以实现段间
转移。
EQU THIS FAR
MOV AX,1234H
TAB:MOV AX,1234H
此处用THIS指定标号TAB为FAR远程属性,该标号对应的段属性
和偏移地址属性,即为下一条指令所在的段地址和偏移地址,也即
指令MOV AX,1234H的标号。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
3、其他操作符及运算符
(1)[ ]方括号对:
MOV AL,[BX];表示以BX的内容作为寻址单元的地址,对所指的
单元进行取数操作。 BX为地址指针。
MOV DX,[SI +5];变址寻址指令,该指令源操作数为存储器操作
数,将SI内容加上位移量5,得到运算值,这个值用方括号括起来,
表于是一个存储单元的地址。
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
3、其他操作符及运算符
(2)“:”段超越符
运算符":"放在段寄存器CS、DS、ES和SS后边,表示段超越。在此
处利用该符号对存储器操作数指定了一个段属性,舍弃隐含标准
的段,到指定的段中进行寻址操作。
例如:MOV AX , ES:[SI]
隐含段DS
MOV AL , ES:[BX]
第 4 章 4.2.3 汇编语言语句类型与格式
四、操作数表达式使用的运算符和伪操作符
4.操作符和运算符的优先级
(1)优先级高的先运算,优先级低的后运算。
(2)优先级别相同,按表达式中从左到右顺序进行。
(3)圆括号内的运算总是在任何相邻的运算之前进行。
第 4 章
运算符的优先级别
运算符
优先
级
1. LENGTH,SIZE,WIDTH,MASK,(),<>,中的项目,结构变量
高
2. 段超越运算符
3 . PTR,OFFSET,SEG,TYPE,THIS
4. HIGH,LOW
5. *,/,MOD,SHL,SHR
6.
底
+,—
7. EQ,NE,LE,LT,GT,GE
8. NOT,
9. AND
10. OR,XOR
11. SHORT