1、
程序运行步骤及生成的文件
编辑程序->汇编程序->连接程序
2、伪操作(伪指令)Directives
伪操作是汇编程序对源程序进行汇编时处理的操作,完成处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。
3、
处理器选择伪操作:
.8086 选择 8086 指令系统
段定义伪操作:
data segment ; 定义数据段
…
data ends
;—————————————-
extra segment ; 定义附加段
…
extra ends
;—————————————-
code segment ; 定义代码段
assume cs:code, ds:data, es:extra
start:
mov ax, data
mov ds, ax ; 段地址 ->段寄存器
…
code ends
end start
4、
……
code segment
main proc far
assume ……
start:
push ds
mov ax, 0
push ax
……
ret
main endp
code ends
end start
5、
……
code segment
main proc far
assume ……
start:
……
……
mov ax,4c00h
int 21h
main endp
code ends
end start
6、汇编程序基本元素
字符常量
‘A’,“d”
字符串常量
‘ABC’“Goodnight “
整数常量
[{+|-} digits [radix]
26,420,0A3H
7、汇编语言基本元素
保留字:
8、
伪指令:
汇编编译器语法格式的一部分,与Intel指令集无关
指令:标号(可选)+指令助记符(必需)+操作数(通常需要)+注释(可选)
9、
代码标号:
代码区的标号必须以冒号结尾,常被用做跳转和循环指令的目标地址
target:
mov ax,bx
…
jmp targer
也可以同一行:
target :mov ax,bx
数据标号:
数据区,不用冒号
first BYTE 10
10、
段:程序的基本组织单元
代码段:程序的全部可执行指令,通常有一个或者一个以上的过程,其中一个是启动过程
堆栈段:子程序的参数和局部变量
数据段:存放变量
11、
PRIVATE 该段为私有段,在连接时将不与其他同名段合并
默认为 PRIVATE
12、
格式:
ASSUME 段寄存器:段名 [,段寄存器:段名]
功能:建立段寄存器与段之间的对应关系。该伪指令一般出现在代码段中。
DATA1 SEGMENT
A DB 1,2,3
DATA1 ENDS
CODE SEGMENT
ASSUME DS:DATA1,CS:CODE
┆
其中段寄存器名必须是CS ,DS,ES 和SS中的一个。段名必须是由SEGMENT定义的段中的段名。
13、段定义伪操作:
完整的段定义格式举例
data segment ; 定义数据段
…
data ends
;—————————————-
extra segment ; 定义附加段
…
extra ends
;—————————————-
code segment ; 定义代码段
assume cs:code, ds:data, es:extra
start:
mov ax, data
mov ds, ax ; 段地址->段寄存器
…
code ends
end start
14、
段组定义伪操作
段组名 GROUP 数据段名1[,数据段名2……]
15、数据定义及存储器分配伪操作
[变量名] 助记符 操作数 [ , 操作数 , … ] [ ; 注释]
DB(字节)、DW (字) 、DD (双字) 、DF(6字节)、DQ(四字)、DT(10字节)
16、重复说明符DUP
repeat_count DUP (表达式, 表达式, …, 表达式)
强制属性操作符 PTR
数据类型 PTR 地址表达式
其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等。
为了明确指令中存储单元的属性,可把指令“MOV [BX], 1H”可改写成:
MOV byte ptr [BX], 1H
或 MOV word ptr [BX], 1H
W1 DW 1234H, 5678H
B1 DB 2
DB 5
D1 DD 23456789H
…
17、LABEL伪操作
符号名 LABEL 类型
其中:常用的类型有BYTE、WORD、DWORD、NEAR和FAR等
18、表达式赋值伪操作
符号名 EQU 表达式
作用是左边的符号名代表右边的表达式
汇编语言提供了用等号 “=” 来定义符号常数的方法,即可用符号名代表一个常数。其一般格式如下:
符号名=数值表达式
19、地址计数器与对准伪操作
地址计数器 $ :保存当前正在汇编的指令的地址
ORG伪操作
伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量从该“数值表达式”所指定的地址开始分配。
偶对齐伪指令格式:
EVEN
伪指令的作用是:告诉汇编程序(Assember),本伪指令下面的内存变量从下一个偶地址单元开始分配
对齐伪指令格式: ALIGN Num
其中:Num必须是2的幂,如:2、4、8和16等。
伪指令的作用是:告诉汇编程序,本伪指令下面的内存变量必须从下一个能被Num整除的地址开始分配。
20、基数控制伪操作
RADIX 表达式 ; 规定无标记数的基数
21、
伪指令语句格式如下:
[符号名] 伪指令符 操作数 ;注释
① 符号名:符号名是伪指令语句的一个可选项。
② 伪指令符:伪指令符指定汇编程序要完成的具体操作,如数据定义伪指令DB、DW、DD,段定义伪指令SEGMENT,假定伪指令ASSUME等。
③ 操作数:伪指令后面的操作数可以是常数、字符串、变量、表达式等,其个数由具体的伪指令决定,各个操作数之间必须以“逗号”分隔。
④ 注释:伪指令的注释必须以“;”开始,其作用同指令语句中的注释部分。如: ……
22、LENGTH运算符
格式:LENGTH 变量
功能:取出变量所含的数据存储单元个数。它返回重复操作符DUP中的重复数。如果有嵌套的DUP,则只返回最外层的重复数;如果没有操作符DUP,则返回1
23、SIZE运算符
格式:SIZE 变量
功能:取出变量所含的数据存储区大小。其返回值为:LENGTH 变量 * TYPE 变量
24、OFFSET运算符
格式:OFFSET 变量或标号
功能:分离出其后变量或标号的偏移地址。
25、SEG 运算符
格式:SEG 变量或标号
功能:分离出其后变量或标号所在段的段首址。
26、PTR
格式:类型 PTR 地址表达式
在程序中,我们有时需要对同一个存储单元以不同的属性来访问,或对一些不确定的存储属性需要显式指定等,这时我们就需要强制属性操作符PTR。该操作符的作用有点象C语言中的类型强制方法。
27、段操作符
格式:段寄存器:地址表达式
功能:用来表示一个标号、变量或地址表达式的段属性。如:MOV AX,ES:[BX+SI]
28、THIS
格式:THIS 数据类型
功能:它为同一存储单元取另一别名,该别名可具有其自身的数据属性,但其段地址和偏移量是不变的。其中:数据类型是前面所学的各种数据类型,常用的数据类型有:BYTE、WORD、DWORD、NEAR和FAR等。
29、HIGH和LOW
格式:HIGH 常量或地址表达式
LOW 常量或地址表达式
30、算符的优先级
(1) LENGTH、SIZE、( )、[ ]、< >
(2):(段超越)
(3)PTR、OFFSET、SEG、TYPE、THIS
(4)HIGH、LOW
(5)*、/、MOD、SHL、SHR
(6)+、-
(7)EQ、NE、LT、LE、GT、GE
(8)NOT
(9)AND
(10)OR、XOR
(11)SHORT