文档介绍:第5章汇编语言与汇编程序
【本章重点】本章重点在于介绍汇编语言的指令格式和伪指令格式、汇编程序的上机调试过程等等,为后面学习微型计算机接口的编程打好基础。
【本章难点】本章难点是汇编程序的上机调试过程,它是掌握汇编语言的关键。
汇编程序的执行过程
§ 汇编语言的语句格式
一条汇编语言指令中最多包含4个区段,如下所示:
[标号]: 操作码[目的操作数,源操作数] [;注释]
其中用方括号括起来的部分,可以有,也可以没有。
标号与操作码之间“:”隔开;
操作码与操作数之间用“空格”隔开;
目的操作数和源操作数之间有“,”分隔;
操作数与注释之间用“;”隔开。
§ 汇编语言中的常数与表达式
常数可以分数值常数和字符串常数两类。数值常数按其基数的不同,可有二进制数、八进制数、十进制数、十六进制数等几种不同的表示形式,汇编语言中采用不同的后缀加以区分。
B:表示二进制数。例如,10100101B。
D:表示十进制数。例如,278D或278。
Q:表示八进制数。例如,567Q,263Q。
H:表示十六进制数。例如,9AH,5678H。
字符串常数是由单引号括起来的一串字符。例如:
‘THIS IS A STUDENT!’
‘12345’
要指出的是,此处的’12345’其值并非是十进制数12345,而是代表它们所对应的ASCⅡ码,即31H,32H,33H,34H,35H。
在表达式中,运算符充当着重要的角色。8086宏汇编有算术运算符、逻辑运算符、关系运算符、分析运算符和综合运算符共5种。
算术运算符
逻辑运算符
关系运算符
分析运算符
综合运算符
+(加法)
AND(与)
EQ(相等)
SEG(求段基值)
PTR
-(减法)
OR(或)
NE(不相等)
OFFSET(求偏移量)
THIS
×(乘法)
XOR(异或)
LT(小于)
TYPE(求变量类型)
SHORT
÷(除法)
NOT(非)
GT(大于)
LENGTH(求变量长度)
HIGH
MOD(求余)
LE(小于或等于)
SIZE(求字节数)
LOW
SHL(左移)
GE(大于或等于)
SHR(右移)
8086汇编语言中的运算符
分析运算符共有5个:SEG(求段基值)、OFFSET(求偏移量)、TYPE(求变量类型)、LENGTH(求字节数)和SIZE(求字节数)。其中LENGTH和SIZE只对数据存储器地址操作数有效。
1)SEG运算符:利用运算符SEG可以得到一个标号或变量的段基址
使用格式:SEG变量名或标号名
例如:已知数据段DATA从存储器实际地址03000H开始,作如下定义后,用SEG运算符求变量所在的段基址。
DATA
SEGMENT
;定义数据段
VARl
DB 10H,18H,25H,34H
;定义字节数据
VAR2
DW 2300H,1200H
;定义字数据
VAR3
DD 11002200H,33004400H
:定义双字数据
DATA
ENDS
;数据段结束
MOV BX,SEG VARl 汇编成: MOV BX,0300H
MOV CX,SEG VAR2 汇编成: MOV CX,0300H
MOV DX,SEG VAR3 汇编成; MOV DX,0300H
2)OFFSET运算符:利用运算符OFFSET可以得到一个标号或变量的偏移量。
使用格式:OFFSET 变量名或标号名
例如:对于上例中所定义的数据段,采用OFFSET运算符求出变量VARl和VAR2的偏移量。则:
MOV BX,OFFSET VAR1 汇编成: MOV BX,0000H
MOV CX,OFFSET VAR2 汇编成: MOV CX,0004H
MOV DX,OFFSET VAR3 汇编成: MOV DX,0008H
3)TYPE运算符:TYPE运算符可加在变量、结构或标号的前面,所求出的是这些存储器操作数的类型部分。运算符TYPE的运算结果是一个数值,这个数值与存储器操作数类型属性的对应关系
存储释操作数类型 TYPE返回值
字节数据BYTE(DB定义) 1
字数据WORD(DW定义) 2
双字数据DWORD(DD定义) 4
DATA SEGMENT ;定义数据段
VARl DB 10H,18H,25H,34H ;定义字节数据
VAR2 DW 2300H,1200H ;定义字数据
VAR3 DD 11002200H,33004400H :定义双字数据
DATA ENDS ;数据段结束
下列指令: 
MOV BX,TYPE VAR1 汇编成: MOV BX,1
MOV CX,TYPE VAR