汇编语言基本格式
一、符号定义语句
1、等值语句 EQU
格式:符号 EQU 表达式或内容表述(同一符号不能重新定义)
功能:把表达式的值或表达式赋给EQU左边的符号
例子:
COUNT EQU 5
PL EQU ADD(后面出现的PL相当于ADD指令)
ADR1 EQU DS:[BP]
WO EQU WORD PTR DA_BYTE
(错误例子)
PL EQU ADD
PL EQU ADC
(同一符号不能重新定义)
2、等号语句 =
格式:符号 = 表达式(=右边必须为表达式)
功能:与EQU相同,但可重新定义
例子:
COUNT = 5
COUNT = 3*2
二、表达式与运算符
1、算术运算符
+、-、*、/、mod、SHR、SHL、[ ](下标)等
2、逻辑运算符
AND、OR、XOR、NOT等
3、关系运算符
EQ、NE,LT、LE、GT、GE
结果真则值为全1,否则为全0
4、数值返回运算符
(1)SEG运算符
功能:得到变量或标号所在段的段基址
MOV AX ,SEG K1
若K1段基址为0915H,则AX = 0915H
(2)OFFSET运算符
功能:得到变量或标号的段内偏移量
MOV SI,OFFSET DA1
若DA1偏移量为10H,则SI = 10H
(3)TYPE运算符
功能:得到变量或标号类型代码(变量类型代码为其字节数,标号类型代码没有物理意义),如下表
例子:
V1 DB ‘ABC’
MOV AL,TYPE V1
(AL = 01H)
(4)LENGTH运算符
功能:用于变量,若变量用dup说明,返回dup外层值,没有用dup返回1
例子:
K1 DB 10H,20H,30H
K2 DB 10H DUP(0)
K3 DW 20H DUP(0,1,2,DUP(2))
MOV AL,LENGTH K1
MOV BL,LENGTH K2
MOV CL,LENGTH K3
(AL = 1)(BL = 10H)(CL = 20H)
(5)SIZE运算符
功能:用于变量,等于LENGTH和TYPE两个运算符值的积
例子(上例):
MOV AL,SIZE K1
MOV BL,SIZE K2
MOV CL,SIZE K3
(AL = 1)(BL = 10H)(CL = 40H)
5、属性修改运算符
功能:用于对变量,标号或存贮器操作数的类型进行修改
(1)PTR运算符
格式:类型 PTR 地址表达式
功能:用于指定PTR后面存储器操作数的类型(这种修改是临时性的,仅在该语句内有效)
例子:
DA_BYTE DB 20H DUP(0)
DA_WORD DW 30H DUP(0)
MOV AX, WORD PTR DA_BYTE[10](AX类型为字,修改DA_BYTE类型为字)
ADD BYTE PTR DA_WORD[20],BL(修改DA_WORD为字节,与BL统一)
INC BYTE/WORD PTR [BX](确定是BX存储地址中的一个字还是字节加一)
(2)This运算符
功能:把运算符后面指定的类型属性赋给当前的存储单元,而段和偏移属性不变
例子:
DA_BYTE EQU This BYTE
DA_WORD DW 20H DUP(0)
6、运算符的优先级
三、定义伪指令和当前位置计数器
1、$
功能:用于记载当前偏移量,即当前位置计数器
2、ORG
格式:ORG 表达式
功能:表达式的值为一偏移量,表示把此偏移量送当前位置计数器,即ORG后面的数据或指令从当前给定偏移量开始
例:
DATA SEGMENT
ORG 30H
DB1 DB 12H,34H (当前位置30H)
ORG $+20H
STRING DB 'ABCDEFGHI' (当前位置52H)
COUNT EQU $-STRING (COUNT表示STRING字节数)
DATA ENDS
.
.
.
CODE SEGMENT
ASSUME CS:CODE
ORG 10H
START:MOV AX,DATA (起始于10H)
CODE ENDS
START END