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、汇编语言语法

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两个标号。

汇编语言的语句格式

汇编语言的语句格式
长度为30个字节
; 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.伪指令
符号定义伪指令 数据定义伪指令 段定义伪指令 过程定义伪指令 定位定义伪指令
一、符号定义伪指令

汇编语言程序格式

汇编语言程序格式
1
第四章 汇编语言程序格式
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,?

4.汇编语言语法及其程序格式

4.汇编语言语法及其程序格式
数值型参数
11
第 四 章
汇 编 语 言 程 序 格 式
例如:Number_1 EQU 2; Loop_count EQU 2*5+Number_1 CallDos EQU <INT 21H> 注释: 1)程序中使用符号常数,而不使用具体数值,可 大大提高程序的易读性,而且使程序易于修改。使用 汇编语言编写程序,通常应遵循这一原则。 2)EQU右边的项允许出现符号,但该符号必须是 已经定义或即将定义的。 3)符号定义后即可在程序中使用,如 MOV CX,Loop_count CallDos
3.2.1 数值型参数
10
第 四 章
汇 编 语 言 程 序 格 式
1)基数控制伪指令(RADIX) RADIX n;n取2~16内的任意整数。 如“ RADIX 16”,使汇编程序把默认的基数改为 16,即没有加后缀的数表示十六进制数,非十六进制 数均应加后缀(含十进制数)。 2)符号常数定义伪指令(EQU、=) EQU 符号名 EQU 数值表达式 符号名 EQU <字符串>;5.X版用双引号。 给符号定义一个数值或把符号定义成另一个字符串; 也可以说使EQU两边的项等效,可以互相代换。
偏移量为变量
变量定义伪指令(4)
பைடு நூலகம்
18
第 四 章
汇 编 语 言 程 序 格 式
3.定义双字单元伪指令DD 以双字单元(4字节)为单位分配存储空间。初值 表中的每个数据是32位数据,可以是32位有符号或无符 号数,也可以用来表示一个“远指针”(高位字表示段 地 址,低位字表示偏移地址,可用做段间间接转移)。 vardd dd 0,?,12345678h far_point dd 00400078h(LDS SI,FAR_POINT) 4.其他数据定义伪指令 1)DF、DQ、DT 略 2)MASM6.0建议使用:BYTE/WORD/DWORD等 3)SBYTE/SWORD/SDWORD:有符号数专用。

汇编语言语法

汇编语言语法

汇编语言语法
汇编语言是一种低级语言,它使用符号代表机器指令,用于编写底层程序。

以下是汇编语言的语法规则:
1. 指令格式
汇编语言的指令格式通常由操作码和操作数组成。

操作码表示要执行的操作,操作数则是指令要操作的数据。

指令格式通常如下:
操作码操作数1, 操作数2
其中,操作数可以是寄存器、内存地址或立即数。

2. 注释
汇编语言中的注释以分号(;)开头,可以在指令后面或单独一行中使用。

注释用于解释代码的作用和用途,提高代码的可读性。

3. 标号
汇编语言中的标号用于标识程序中的位置,通常用于跳转指令和数据定义。

标号以字母或下划线开头,后面可以跟数字和字母。

标号后面必须加冒号(:)。

4. 寄存器
汇编语言中的寄存器用于存储数据和执行操作。

常用的寄存器包括AX、BX、CX、DX等。

寄存器名通常以字母开头,后面可以跟数字。

5. 内存地址
汇编语言中的内存地址用于访问内存中的数据。

内存地址通常由段地址和偏移地址组成。

段地址和偏移地址可以用方括号括起来表示,例如[0x1000:0x0000]。

6. 数据定义
汇编语言中的数据定义用于定义变量和常量。

数据定义通常以关键字开头,例如DB表示定义一个字节,DW表示定义一个字。

数据定义后面可以跟变量名和初始值。

7. 跳转指令
汇编语言中的跳转指令用于改变程序的执行流程。

常用的跳转指令包括JMP、JE、JNE等。

跳转指令后面通常跟标号。

以上是汇编语言的语法规则,掌握这些规则可以编写简单的汇编程序。

汇编语言

汇编语言

.bss . sect
为未初始化变量保留空间
.bss x,4
建立包含代码和数据的自定 .sect “vectors” 义段 .usect 为未初始化变量保留空间的 Stack .usect “STACK”,10h 自定义段 .def .def start 定义本程序所要用的符号 .ref 引用其它程序中被定义了的 .ref start 符号 .global start

在使用标号时,标号的值是段程序计数器SPC 的当前值。 例如,若使用.word伪指令初始化几个字,则 标号将指到第一个字。
标号格式举例: „ 9 000000 10 000040 000041 000042

;假设汇编了某个其他代码
000A 0003 0007
Start: .word 0Ah,3,7
指令的操作数前缀
① 用“#” 作前缀 使用“#”号作为前缀,汇编器将操作数 作为立即数处理。即使操作数是寄存器或地址, 也将作为立即数。 如果操作数是地址,汇编器将把地址处 理为一个数值,而不使用地址的内容。
例如: Label:
ADD # 99, B
操作数# 99是一个立即数。
② 用“*”作前缀 使用“*”符号作为前缀,汇编器将操作数 作为间接地址,即把操作数的内容作为地址。
助记符指令源语句举例: Period Begin: 标 号 .set 1
; 符号Period =1 ; 将1加载到AR1
LD # Period ,AR1 助记符 操作数


语句的书写规则:

① 所有语句必须以标号、空格、星号或分号(*或;) 开始; ② 标号是可选项,若使用标号,则标号必须从第 一列开始; ③ 所有包含有汇编伪指令的语句必须在一行完成 指定; ④ 各部分之间必须用空格分开,Tab字符与空格等 效; ⑤ 程序中注释是可选项。如果注释在第一列开始 时,前面必须标上星号或分号,在其他列开始的注 释前面必须以分号开头; ⑥ 如果源程序很长,需要书写若干行,可以在前 一行用反斜杠字符(\)结束,余下部分接着在下 一行align .set

汇编语言程序格式

汇编语言程序格式

1.2汇编语言程序的段定义
DATA_SEG1 SEGMENT PARA
DATA_SEG1 ENDS
DATA_SEG2 SEGMENT PARA
…….
DATA_SEG2 ENDS
E_SEG1
SEGMENT PARA
……..
ቤተ መጻሕፍቲ ባይዱ
E_SEG1
ENDS
E_SEG2
SEGMENT PARA
……..
E_SEG2
ENDS
ENDP 说明:过程属性项省略,系统默认为NEAR,表示段内调用, FAR 过程体至少有一条返回指令RET,RET一般放在过程体的最后。 也可以使用带参数的返回语句,如RET n。
1.3汇编语言源程序过程定义
MY_CODE SEGMENT
UP_COUNT PROC NEAR
ADDCX, 1
RET
UP_COUNT ENDP
1.2 汇编语言程序的段定义
存储器是采用分段管理方式,在编制任意源程序时亦必 须按段来构造程序。按段来构造程序有两种形式:一种是完
1.
NAME TITLE EQU EXTRN PUBLIC SEG1
SEG1 SEG2
SEG2
SEGMENT PARA STACK …… ENDS SEGMENT PARA STACK ; …… ENDS
避免多模块使用不同起始地址,只有主模块使用起始地址, 否则引起程序出错。
1.4标准程序前奏
Code_SREG1 SEGMENT‘CODE’ ASSUME CS:Code_SREG1…
MAIN PROC FAR ……… RET
MAIN ENDP Code_SREG1 ENDS
END MAIN Code_G2 SEGMENT ‘CODE’

汇编语言语法及其程序格式

汇编语言语法及其程序格式

第4章 汇编语言语法及其程序格式
(2) 变量在数据段、附加数据段或堆栈段中定义, 后面不跟冒号。它也可以用LABEL或EQU伪指令来定 义。变量经常在操作数字段出现。它也有段、偏移和 类型三种属性。
段属性:定义变量的段起始地址,此值必须在一 个段寄存器中。
偏移属性:变量的偏移地址是从段的起始地址到 定义变量的位置之间的字节数。对于16位段,是16位 无符号数;对于32位段,则是32位无符号数。在当前 段内给出变量的偏移值等于当前地址计数器的值,当 前地址计数器的值可以用$来表示。
程序的功能是完成两个字节数据相加。 DATA SEGMENT ;段定义开始(DATA段) BUF1 DB 34H ;第1个加数 BUF2 DB 2AH ;第2个加数
第4章 汇编语言语法及其程序格式
SUM DATA CODE
DB ? ;准备用来存放和数的单元
ENDS
;段定义结束(DATA段)
SEGMENT ;段定义开始(CODE段)
第4章 汇编语言语法及其程序格式
程序中的语句
BUF1 DB 34H BUF2 DB 2AH SUM DB ? 就是伪指令语句,其功能是在内存中开辟三个名 字分别为BUF1、BUF2和SUM的字节单元。前两个单 元的初值分别为34H和2AH,SUM仅指定一个字节单 元,不定义确定的初值。 实际上,汇编语言源程序中还可出现宏指令语句。 宏指令语句就是由若干条指令语句形成的语句体。一 条宏指令语句的功能相当于若干条指令语句的功能。
第4章 汇编语言语法及其程序格式
第4章 汇编语言语法及其程序格式
4.1 汇编语言语句格式 4.2 伪指令 4.3 汇编语言源程序结构 4.4 汇编语言程序的上机过程 4.5 动态调试程序DEBUG 习题4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的段地址
相关文档
最新文档