5A 汇编语言程序语法及格式
汇编语言程序格式

2.符号定义伪指令 符号定义伪指令
1》等价伪指令 》 格式: 符号名 符号名> 表达式> 格式: <符号名 EQU <表达式 表达式 功能:给常量、 功能:给常量、表达式及其它符号定义一个等 价的符号名, 但不申请存储空间,且用EQU 价的符号名, 但不申请存储空间,且用 语句定义过的符号不能重新定义。 语句定义过的符号不能重新定义。 例: A EQU 5 B EQU A*3+2
2.变量的属性 .
(1)段属性:变量的段属性就是变量所在段的 )段属性:
段地址。 段地址。
(2)偏移属性 )
变量的偏移属性是指变量所在段的段内偏移地址, 变量的偏移属性是指变量所在段的段内偏移地址, 它表示段内变量所在的位置到该段起始地址之间的 它表示段内变 字节距离。
(3)类型属性 )
变量的类型属性也就是变量的类型, 变量的类型属性也就是变量的类型,汇编语言中变 量共有五种类型: 、 量共有五种类型:DB、DW、DD、DQ和DT。 、 、 和 。
(1)操作数是常量表达式 )
数值常量 直接以数值的形式出现在汇编语句中 直接以数值的形式出现在汇编语句中, 有确定的数值。 有确定的数值。 用伪指令EQU或“=”来定义,然后 来定义, 符号常量 用伪指令 或 来定义 在语句中直接使用符号常量, 在语句中直接使用符号常量,方便实现参数的修 改善程序的可读性。 改,改善程序的可读性。 如: AA EQU 50 BB = 100 MOV AX,BB , ADD AX,AA ,
3.2.2 数据定义
1.数据定义伪指令 .
格式: 变量名 变量名>] <类型 类型> <初值表 初值表> 格式:[<变量名 类型 初值表 功能:为操作数分配存储单元, 功能:为操作数分配存储单元,并用变量与 存储单元相联系。 存储单元相联系。
汇编语言程序格式

汇编语言程序格式编程语言是计算机与人之间交流的桥梁,通过编写程序代码,我们可以指导计算机执行特定的任务。
汇编语言是一种底层的编程语言,它直接与计算机硬件进行交互,并提供了对机器指令的精细控制。
在编写汇编语言程序时,我们需要遵循一定的格式,以确保程序的正确性和可读性。
本文将介绍汇编语言程序的格式要求。
一、程序结构在编写汇编语言程序时,需要明确的程序结构是很重要的。
一个典型的汇编语言程序由如下几个部分组成:1. 数据段(.data):用于定义程序中使用的数据,如变量、常量等。
2. 代码段(.text):包含实际的机器指令,用于执行特定的任务。
3. 其他段(如堆栈段):根据需要定义的其他段。
二、指令格式每个汇编指令都有特定的格式,以便告诉计算机应该执行什么操作。
一个标准的汇编指令格式通常包含如下几个部分:1. 操作码(Opcode):用于指定要执行的操作,如“mov”用于将数据从一个位置移动到另一个位置。
2. 操作数(Operand):操作数描述了要对其进行操作的数据。
操作数可以是立即数、寄存器或内存地址等。
3. 注释(Comment):注释用于解释指令的作用和目的,提高程序的可读性。
三、指令的排列在编写汇编语言程序时,指令的排列很重要。
正确的指令排列可以提高程序执行效率和可读性。
一般而言,指令按照执行的顺序排列,具有逻辑关系的指令可以分组编写。
四、标签和跳转在程序中,我们常常需要使用标签和跳转指令来实现条件执行和循环等功能。
标签是程序中的一个标记,用于标识某个位置,而跳转指令则会根据一定的条件,跳转到指定的标签处继续执行。
在使用标签和跳转指令时,需要注意以下几点:1. 标签需要以冒号(:)结尾,以便与其他变量或指令进行区分。
2. 跳转指令一般以条件代码作为前缀,如“je”(等于跳转)、“jne”(不等于跳转)等。
五、宏定义宏定义是一种将一段常用代码片段定义为简单的符号表示的方式。
在汇编语言中使用宏定义可以提高代码的可读性和重用性。
4-1、汇编语言语法

名字] 名字 [名字 [: ]
助记符
操作数, [ 操作数
]
;注释] [;注释
名字项
助记符项
操作数项
注释项
3.操作数项 .
操作数给出参与操作的数或数所在的地方。 操作数给出参与操作的数或数所在的地方。 操作数多于一个时,用逗号分开。 操作数多于一个时,用逗号分开。 操作数可以是常数、寄存器、存储器操作数、 操作数可以是常数、寄存器、存储器操作数、 常数 标号名、过程名或表达式 表达式等 标号名、过程名或表达式等。
例
; ; ;
、、、 MOV AH, 2 MOV DL, ’A’ INT 21H 、、、 ;显示提示信息 显示提示信息
二、基本数据常量、变量、标号 基本数据常量、变量、 常量
二进制 八进制 十进制 十六进制 字符串 xxxxxxxxB 01000101B 721O或 xxxO 或xxxQ 721O或721Q xxxx或 1991或 xxxx或xxxxD 1991或1991D xxxxH 0F1D4H xxx’或 xxx” AB AB’ ‘xxx 或“xxx ‘AB
(4)别名定义伪指令 )别名定义伪指令LABEL
格式: 别名 LABEL 类型属性 格式 例如 BYTE-ARRAY LABEL BYTE WORD-ARRAY DW 100 DUP(?) MOV WORD-ARRAY, 0 MOV BYTE-ARRAY, 0 把第一个字置0 把第一个字置 把第一个字节置0 把第一个字节置
名字] 名字 [名字 [: ]
助记符
操作数, [ 操作数
]
;注释] [;注释
名字项
助记符项
操作数项
注释项
4.注释项 .
由分号引出,用来说明语句或程序的功能。 由分号引出,用来说明语句或程序的功能。 汇编程序对分号后的内容不做处理。 汇编程序对分号后的内容不做处理。 作用: 作用: ①注释程序,增强程序可读性。 注释程序,增强程序可读性。 ②可放在语句最前,暂时注释某语句,调试程序用。 可放在语句最前,暂时注释某语句,调试程序用。
汇编语言-程序格式

每一个字节数据项只占用一个字节存储单元 例:COUNT DB 100 DB 0DH ,0AH , ‘$’ TABLE DB 0 , 1 , 4 , 9 , 16
定义字节数据项(DB)
每一个字数据项只占用两个字节存储单元 例:FLAG DW 2FCDH, 100,-1 VECT DW 0 DW 100H
伪指令定义符:规定了伪指令的功能 参数:说明伪指令操作的对象,如常数(数值表达式)等 名称:给所定义的内容起的名称。 在汇编语言中,名字和标号很容易区分,名字后面没有冒号,而标号后一定用冒号。 标号和名字最多由31个字母、数字及规定的特殊字符组成,并且不能以数字来开头。 标号和名字不能是汇编语言的保留字,如不能是“MOV”。 汇编语言不区分保留字中字母的大小写。如“MOV AX ,03H”等同于“mov ax , 03h” 伪指令有多种,常见的如: (1)段定义伪操作 (2)数值数据定义及存储器分配 (3)符号数据定义 (4)程序开始和结束伪操作 (5)表达式赋值伪操作 此外还有基数控制伪操作、对准伪操作等。
等号语句(=) 汇编语言专门提供了符号语句来定义符号常数,即用符号表示一个常数。等号语句的一般格式如下: 符号名 = 数值表达式 例如:XX = 10 用符号定义语句可被重新定义。 例如: ABCD = 1 ABCD = 100
3. 定义符号名语句 格式:符号名 LABEL 类型 其中类型可以是BYTE、WORD、DWORD、NEAR、FAR,其中前3项对应于数据项,后2项对应于可执行代码。 功能:指定为某一类型的符号,且该符号的段属性和偏移属性与下一个紧接着的存储单元的段属性和偏移属性相同。 例如: BUFFER LABEL WORD BUFF DB 100 DUP(0) 定义了一个符号BUFFER,其类型是WORD。因为段属性与偏移属性和BUFF相同, 所以内容为0000H。 又如: QUIT LABEL FAR EXIT:MOV AH , 4CH “MOV AH , 4CH”有了QUIT和EXIT两个标号。
汇编语言的语句格式

; STACK段结束 ;定义DATA1段,定位类型BYTE
DB “This is an example!” ;长度为19个字节 ENDS SEGMENT WORD DW 40 DUP(0) ; DATA1段结束 ;定义DATA2段,定位类型WORD ;长度为40字,80个字节
ENDS ; DATA2段结束 SEGMENT PAGE ;定义CODE代码段,定位类型PAGE … ENDS ; CODE代码段结束
2.伪指令 伪指令
符号定义伪指令 数据定义伪指令 段定义伪指令 过程定义伪指令 定位定义伪指令
一、符号定义伪指令
用途: 用途 给一个符号重命名,或定义新的类型 属性等。
1)EQU 等值伪指令 格式:名字 EQU 表达式 2)= 等号伪指令 格式:名字
=
表达式
二、数据定义伪指令
格式:[名字] 伪指令助记符 数据项表 1)DB 定义字节 2)DW 定义字 3)DD 定义双字 重复操作符 n DUP (初值)
START: … CODE ENDS END START
(五)、其他运算符 )、其他运算符
1)、方括号 [ ] )、方括号 )、 2)、段超越 “:” )、段超越 )、 3)、 )、HIGH和LOW )、 和
(五)、运算符的优先级 五、
优 先 级 (高) 高 1 2 3 4 5 6 优先 级 7 8 9 10 11 12 (低) 低
运 算 符
运 算 符
四、过程定义伪指令
格式: 过程名 PROC[NEAR/FAR] . . . RET ENDP
过程名
五、定位定义伪指令
ORG 例:
DATA D1 D2 DATA CODE
表达式
汇编语言程序设计第四章 汇编语言程序格式

标号在代码段中定义,后面跟冒号:。标号有三 种属性:段,偏移及类型。
11
数据定义伪操作:把数据存入存储单元;分配空间; DW和DD可存储偏移地址或完整的地址。 下面举例说明:
例: 操作数可以是常数,或者 表达式(根据表达式可以求得一 个常数),如 DATA_BYTE DB 10,4,10H DATA_WORD DW 100,100H,-5 DATA_DW DD 3*20,0FFFDH 汇编程序在汇编期间在存储器中 存入数据,如图所示
…
…
26
code_seg segment; define code segment
assume cs:code_seg,ds:data_seg1,es:data_seg2
start: ;set DS register to current data segment mov ax,data_seg1 ;data segment addr mov ds,ax ;into DS register
;set ES register to current extra segment mov ax,data_seg2 ;extra segment addr mov es,ax ;into ES register code_seg ends end start
27
…
;end of segment
返回DOS
25
段寄存器:是CS,DS,ES和SS中的一个; 段名:是由SEGMENT定义的段名.
程序格式举例说明如下: data_seg1 segment ;define data segment
data_seg1 ends data_seg2 segment ;define extra segment
汇编语言的语句格式

ORG 表达式
DATA D1 D2 DATA CODE
START: …
SEGMENT
ORG 20H
DB 12H,13H
ORG $+01H
61H,62H,63H
ENDS
SEGMENT
ASSUME
CS:CODE, …
ORG 100H
…
CODE
ENDS END START
2. 汇编语言的语句
指令性语句 指示性语句
一、汇编语言的语句格式:
[名字] 操作码/伪操作 [操作数] [;注释]
(一)、名字、标号、变量
标号的三种属性:段、偏移量和类型 变量的三种属性:段、偏移量和类型
(二)、操作码和伪操作
(三)、语句中的操作数
1)、常数 2)、寄存器 3)、标号 4)、变量 5)、表达式
ENDS SEGMENT BYTE
; STACK段结束 ;定义DATA1段,定位类型BYTE
DB “This is an example!” ;长度为19个字节
ENDS
; DATA1段结束
SEGMENT WORD ;定义DATA2段,定位类型WORD
DW 40 DUP(0) ;长度为40字,80个字节
6 *,/,MOD,
SHL,SHR
优先 级
运算符
7
十,— (二元运算符)
8
EQ, NE, LT,
LE, GT, GE
9 NOT
10 AND
11 OR,XOR
12 SHORT
(低)
2.伪指令
符号定义伪指令 数据定义伪指令 段定义伪指令 过程定义伪指令 定位定义伪指令
一、符号定义伪指令
汇编语言程序格式

第四章 汇编语言程序格式
2
4.汇编语言程序格式
1. 汇编程序基本元素 2. 伪操作 3. 汇编程序程序格式
3
4.1汇编程序基本元素
字符常量
‘A’,“d”
字符串常量
‘ABC’ “Goodnight “
保留字
指令助记符 伪指令 属性 运算符
4
4.1汇编语言基本元素
4.2 伪操作 4.2.2 段定义位操作
3) 组合方式 组合方式有六种类型可供选择。 (1)PRIVATE 该段为私有段,在连接时将不与其他同名段合并 (2)PUBLIC 该段在连接时可以把不同模块的同名段相连接而形成一 个段。 每一段从小段的边界开始,所以各段之间有小于16个字节的 间隙。 (3)COMMON 该段在连接时可以把不同模块中的同名段重叠而形成 一个段,由于各同名段有相同的起始地址,所以会产生覆盖。 (4)STACK 把不同模块的同名段组合而成一个堆栈段。各段之间没 有间隙。 (5) MEMORY 同PUBLIC (6)AT 表达式 使段地址是表达式所计算出来的16位值,CS除外。 默认为 PRIVATE
17
段定义伪操作:完整的段定义格式举例
data segment ; 定义数据段 … data ends ;---------------------------------------extra segment ; 定义附加段 … extra ends ;---------------------------------------code segment ; 定义代码段
例:1
DATA_BYTE 0AH
DATA_BYTE DB 10,4,10H,? DATA_WORD DW 100,100H,-5,?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 带DUP的表达式 ARY 5. 偏移地址表达式 AT1 9
变量的属性 2、属性:变量一经定义,有5个属性 P206 1. 段属性SEG:变量在哪个段中 2. 偏移量属性OFFSET 该变量距段起始地址的字节数 3. 类型属性TYPE
变量的数据大小 DB(1) DW(2) DD(4) DF(6)
1、变量定义 、
数据定义伪指令实现变量的定义,格式如下: 数据定义伪指令实现变量的定义,格式如下: 实现变量的定义 变量名 数据定义伪指令 <表达式1>,…… 表达式1>, 1>
可选
DB 定义字节 DW 定义字 DD 定义双字 DQ 定义 字节 定义8字节 DT 定义10字节 定义 字节
8
例: DATA1 DB 10H
ABC ABC+1 ABC+2 ABC+3 23 14 96 78
(3)寄存器相对寻址
ABC DB 23H,14H,96H,78H MOV BP, OFFSET ABC MOV AL, [BP+2] +
21
4、属性操作符PTR: P213
A1 DB 1,2 , A2 DW 1234H,5678H MOV BX, A1+1 + MOV AL, A2
F
43‘C’ 42’B’ 41‘A’ 43’C‘ 00 G ’B’ ‘A’ 00 00
14
DW/DD中,每个字符串只能由1~2个 字符组成 DW给每个串分配2个字节存储单元 DD给每个串分配4个字节存储单元
习题: 5习题:P269 5-2
STRING1 STRING2 STRING3 DB ‘STRING’ DW ‘ST’, ‘RI ’, ‘NG ’ DD ‘ST’, ‘RI ’, ‘NG ’
DT(10)
4. 长度属性LENGTH
变量用DUP定义,返回外层DUP的重复次数; 若变量没用DUP定义,则返回结果总是1 (其他情况为
1)
5. 大小属性SIZE
=TYPE×LENGTH
10
为了取变量属性,有5个操作符SEG……
Mydata segment A X Y DB DW DD 0dH 100,100H,-5 3*20H,0FFFDH 100 DUP (?) ARY ‘hello’ ?
MOV X,1
mov ah,4ch int 21h code ends end start
DOS调用,程序结束返回DOS提 示符状态
3
5.2 汇编语言程序格式 汇编语言源程序的基本组成单位是语句 汇编语言源程序的基本组成单位是语句 基本组成单位是 汇编语句的组成: 指令语句:8086指令系统中的所有机器指令 1. 指令语句:8086指令系统中的所有机器指令 2. 伪指令:是一种命令,仅仅告诉汇编程序怎 伪指令:是一种命令, 样产生目标代码,除具体数据外, 样产生目标代码,除具体数据外,不产生对 应的二进制代码, 应的二进制代码,“伪”指令 宏指令: MICRO和ENDM定义的一组机器指 3. 宏指令:由MICRO和ENDM定义的一组机器指 令,然后由宏调用去调用这一组命令
源程序ex.asm
mystack segment stack 'stack'
堆栈段 数据段
DW 20H DUP (?)
mystack ends mydata segment
X DW ?
代码段
mydata ends code segment assume cs:code,ds:mydata,ss:mystack start: mov ax,mydata mov ds,ax
计算机原理与汇编
上海海事大学信息工程学院
1
Ch5 汇编语言程序
1、编辑源程序 2、汇编程序 3、连接程序 调试程序 需要的四个文件: Edit.exe masm.exe link.exe debug.exe
2
edit ex.asm masm ex.asm 形成obj文件 link ex.obj 生成exe文件 debug prog.exe
19
2. 变量的使用 变量的访问: (1)直接寻址
ABC DB 23H,14H,96H,78H
ABC 23 14 96 78
. . . MOV AL, ABC MOV AL, ABC+3
ABC+1 ABC+2 ABC+3
20
(2)寄存器间接寻址
ABC DB 23H,14H,96H,78H MOV BX, OFFSET ABC MOV AL, [BX]
26
但类型属性不同。 但类型属性不同。 MOV AX, DATA_WORD+4 MOV AL, DATA_BYTE+4
5.3.4 表达式与运算符
表达式
常用作指令语句或伪指令语句的操作数; 常用作指令语句或伪指令语句的操作数; 操作数 由常数、变量、标号通过运算符连接而成; 运算符连接而成 由常数、变量、标号通过运算符连接而成; 有数值表达式和地址表达式; 数值表达式和地址表达式; 汇编时, 汇编时,经计算得到一个数值或地址
10H 20H 30H 34H 12H 78H 56H 34H 12H
字 双 字
:
FFFFFH
存储器分配图
13
表达式的几种情况 (2)字符串表达式:每个字串两端加‘ ’或“ ”,每个字符以ASCII码存放,但DB/DW/DD 41‘A’ E 定义存放形式不同
42’B’
E DB ‘ABC’ F DW ’AB’,’C’ G DD ‘AB’,’C’
15
表达式的几种情况 (3)保留符号? 只是分配存储空间
A DB ?;分配1个字节单元 B DW ?;分配2个字节单元
(4)带DUP的表达式
重复次数 (?);分配100个字节单元 (?); DA1 DW 10H DUP (4 DUP (2), ) ),3) ), ;相当于 DA1 DW 10H DUP (2,2,2,2,3) , , , , )
例如,有程序段如下: 例如,有程序段如下:
LOP:INC SI : : JMP LOP
23
1. 标号的属性 (1)段属性(SEG) )段属性( )
表示指令在哪个逻辑段中
(2)偏移地址属性(OFFSET) )偏移地址属性( )
表示这条指令目标代码的首字节离段起始单元之间 的字节数。 的字节数。 上述两个属性SEG和OFFSET构成了指令的逻辑地址 构成了指令的逻辑地址 上述两个属性 和 构成了指令的
2. 字符常数
单引号或双引号扩起来的一个或多个字符, 单引号或双引号扩起来的一个或多个字符,以 ASCII码存储。 码存储。 码存储 如 ‘A ’ ——ASCII码为41H; “HELLO ASCII码为41H; HELLO” ASCII码为41H
7
5.3.2 变量
变量应先定义并预置初值, 变量应先定义并预置初值,才能被引用 定义 初值
mov ax, offset X 1→ax → mov ah, size Y
4→ah
mov ax, seg AT1
ARY DB AT1 E F Mydata ends DW DB DB
mydata→ax
mov ax, length ARY
100→ax
mov al, type Y
4→al
11
表达式的几种情况 3、表达式的几种情况: (1)数值表达式
练习:P270 5.6,5.5
18
2、变量的使用
引用变量名
(1)在指令语句中引用变量名 ) 指令语句中引用变量名
变量名作为地址表达式的组成部分之一 变量名作为地址表达式的组成部分之一 。 地址表达式的组成部分
某数据段中有定义:VAR 某数据段中有定义: DB 40H DUP(?) ( )
直接寻址: VAR、 VAR+08H 直接寻址: 、 变址寻址: 变址寻址: VAR [SI]、 VAR+5 [DI] 、 基址寻址: 基址寻址: VAR [BX]、VAR+10H [BP] 、 基址变址寻址: 基址变址寻址:VAR [BX][DI]、VAR+06H [BP][SI] 、
定义变量语句中的表达式
Mydata segment A X Y DB DW DD 0dH 100,100H,-5 3*20H,0FFFDH 100 DUP (?) ARY ‘hello’ ?
表达式可以是: 1. 数值表达式 A,X,Y 2. 字串表达式 E 3. 保留符号? F
ARY DB AT1 E F Mydata ends DW DB DB
A1 A1+1 + A2 1 2 34 12 78 56
类型不匹配
改为 : MOV BX, WORD PTR A1+1 MOV AL, BYTE PTR A2
;(BX)=3402H ;(AL)=34H
22
5.3.3 标号
符号地址,可作为转移类指令的 指令的符号地址 可作为转移类指令的目标地址 指令的符号地址 可作为转移类指令的目标地址
(3)类型属性(TYPE) )类型属性( )
表示指令的转移特性 NEAR(近)段内转移 ( FAR(远) 段间转移 (
24
2. 标号类型的设置 (1)隐含方式 )
例如 直接指定指令的标号 AX,3000H
NEXT: MOV
伪指令设置标号类型 (2)用LABEL伪指令设置标号类型 ) 伪指令
名字 LABEL 类型 标号 变量名 NEAR/FAR BYTE/WORD/DWORD
存储器分配图
习题: 5习题:P270 5-6
存储器分配图
17
表达式的几种情况 (5)偏移地址表达式
ARY DB 100 DUP (?)
AT1 DW ARY ;AT1存放ARY的偏移地址(16位数) ARY DB AT1 DD 100 DUP (?) ARY ;AT1前2个字节存放ARY的偏移地址后 2个字节存放ARY的段地址