汇编语言第4章 伪指令

合集下载

汇编语言伪指令

汇编语言伪指令

汇编语言伪指令汇编语言作为一种低级编程语言,广泛应用于嵌入式系统、驱动程序开发和操作系统内核等领域。

在进行汇编语言编程时,我们常常会使用到一些伪指令。

本文将介绍一些常见的汇编语言伪指令及其用法。

1. 数据定义伪指令数据定义伪指令用于声明并初始化数据。

在汇编语言中,我们可以使用以下伪指令来定义不同类型的数据:1.1 DB(Define Byte):用于定义一个字节的数据。

例如:DB 10 ;定义一个字节的数据,值为101.2 DW(Define Word):用于定义一个字的数据。

例如:DW 100 ;定义一个字的数据,值为1001.3 DD(Define Doubleword):用于定义一个双字的数据。

例如:DD 1000 ;定义一个双字的数据,值为10001.4 DQ(Define Quadword):用于定义一个四字的数据。

例如:DQ 10000 ;定义一个四字的数据,值为100001.5 DT(Define Ten Bytes):用于定义一个十个字节的数据。

例如:DT 1234567890 ;定义一个十个字节的数据,值为12345678902. 代码段和数据段伪指令在汇编语言中,我们通常需要将代码和数据分开存放,以便于管理和执行。

以下是一些常用的代码段和数据段伪指令:2.1 CODE SEGMENT:用于定义代码段。

例如:CODE SEGMENT;代码段内容CODE ENDS2.2 DATA SEGMENT:用于定义数据段。

例如:DATA SEGMENT;数据段内容DATA ENDS2.3 STACK SEGMENT:用于定义堆栈段。

例如:STACK SEGMENT;堆栈段内容STACK ENDS3. 控制指令伪指令控制指令伪指令用于控制程序的执行流程。

以下是一些常见的控制指令伪指令:3.1 IF-ELSE-ENDIF:用于条件判断。

例如:IF 条件;条件为真时执行的代码ELSE;条件为假时执行的代码ENDIF3.2 REPEAT-UNTIL:用于循环执行一段代码直至满足条件。

伪指令和汇编语言

伪指令和汇编语言

从指定单元开始,定义若干个字(双字节数)。
例如:
ORG 8000H
HETAB:
DW 7234H,8AH,10
汇编后则:
(8000H)=72H (8001H)=34H (8002H)=00H (8003H)=8AH (8004H)=00H (8005H)=0AH
03 常用旳伪指令
DS:定义空间命令
“DS <体现式>定义空间命令 格式: 标号: DS 数据或字符体现式 从指定单元开始,由数据或体现式 拟定保存若干个字节内存空间备用。 例如: ORG 8000H DS 08H DB 30H,8AH 即8000H~8007H单元保存备用 (8008H)=30H (8009H)=8AH
DATA和EQU旳区别在于DATA定义旳字符名称
作为标号登记在符号表中,故可先使用后定义;
而用EQU定义旳字符名称必须先定义后使用,其
原因是EQU不定义在符号表中。
03 常用旳伪指令
BIT:位地址符号命令

BIT<体现式>位地址符号命令
格式:
字符名称:
BIT 位地址
该命令把地址赋予标号段要求旳字符名称。
地址,位地址或立即数。
例如:
ORG 8000H
AA: EQU R6
;AA与R6等值
MOV A,AA
;A(R6)

03 常用旳伪指令
DATA:数据地址赋值命令
“ DATA<体现式>数据地址赋值命令 格式:
字符名称:
DATA 数据或体现式
此命令把数据地址或代码地址赋予标号段要求旳字符名称。
例如:INDEXJ DATA 8389H
定义了INDEXJ这个字符名称旳地址为8389H,主要用于

《汇编语言》学习笔记6——伪指令

《汇编语言》学习笔记6——伪指令

《汇编语⾔》学习笔记6——伪指令1.伪指令⼜称伪操作,即不能像汇编指令⼀样⽣成可执⾏的⼆进制机器代码,⽽是在汇编程序对汇编语⾔源程序进⾏汇编(编译)期间,由汇编程序执⾏。

它与C中的说明性语⾔的含义类似,起到说明作⽤,⽤来指出程序分段、数据定义、存储分配、程序开始和结束等信息,这些信息在汇编(编译)完成后就不⽤了。

但程序中没伪指令,则系统就⽆法完成编译。

2.段定义伪指令:⽤来定义各种类型的段 1.格式:段名 SEGMENT [类型参数] ...... 段名 ENDS 1.其中SEGMENT和ENDS必须成对出现,表⽰段的开始和结束。

⼀般的,段名和段的意义⼀致,便于识别。

2.段名实际就是段地址,在汇编过程中,系统给出具体的地址值,⼀个段必须有⼀个名字来标识。

3.参数是可选项(可有可⽆),⽤于指出段的边界、段的组合、类别标识,⼀般⽤于多模块程序设计中。

2.类型参数 1.定位类型 PARA 该段的起始地址必须为⼩段的⾸地址,即起始地址的16进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即起始地址为偶数 DWORD 该段必须从双字边界开始,即起始地址的16进制数为最低应为4的倍数 PAGE 该段必须从页边界开始,即起始地址的16进制数最低两位为00(能被256整除) 若不指定定位类型,系统默认为PARA 2.组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成⼀个段 COMMON 表⽰该段与其他模块中的同名段有相同的起始地址,如果连接将产⽣覆盖,连接后段的长度为同名段中的最长者 STACK 表⽰该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 若不指定组合类型,默认为PRIVATE 3.类型标识:在引号中给出段的类型名。

在连接时,类别标识相同的段放在连续的存储区中。

(如:"STACK"⽤啦标识该段为堆栈段) 4.END:结束标记,若碰到伪指令END则停⽌编译3.ASSUME伪指令:⽤于指明段寄存器与段的对应关系 1.格式:ASSUME 段寄存器:段名,[段寄存器:段名,段寄存器:.....]【[]中标识可选项】 2.除了代码段寄存器CS不能⽤MOV指令赋值外,其他段寄存器都可⽤MOV指令进⾏初始化。

汇编常见伪指令

汇编常见伪指令

汇编常见伪指令汇编常见伪指令转⾃:⼀、与宏有关的伪指令在宏定义时,为了满⾜某种特殊需要,汇编语⾔还提供了⼏个伪指令。

9.3.1 局部标号伪指令LOCAL在宏定义体中,如果存在标号,则该标号要⽤伪指令LOCAL说明为局部标号,否则,当在源程序中,有多于⼀次引⽤该宏时,汇编程序在进⾏宏扩展后将会给出:标号重复定义的错误。

伪指令LOCAL的⼀般格式如下:LOCAL 标号1, 标号2, ……伪指令LOCAL必须是伪指令MACRO后的第⼀条语句,并且在MACRO和LOCAL之间也不允许有注释和分号标志。

汇编程序在每次进⾏宏扩展时,总是把由LOCAL说明的标号⽤⼀个唯⼀的符号(从??0000到??FFFF)来代替,从⽽避免标号重定义的错误。

例9.7 编写求⼀个求绝对值的宏。

解:⽅法1:ABSMACROword1CMPword1, 0JGEnextNEGword1next:ENDM假设对宏ABS有以下两次引⽤,点击它们将会显⽰汇编程序对它们进⾏宏扩展后所得到程序⽚段: ABS BX 1 CMP BX, 0 1 JGE next 1 NEG BX 1 next:… ABS AL 1 CMP AL, 0 1 JGE next 1 NEG AL 1 next:在上述程序⽚段中,显然标号next定义了⼆次,所以,汇编程序将显⽰“标号重复定义”的错误信息。

为了避免这种情况的发⽣,我们需要⽤下⾯的⽅法来定义该宏。

⽅法2:ABSMACROword1LOCALnextCMPword1, 0JGEnextNEGword1next:ENDM假设对宏ABS有以下两次引⽤,点击它们将会显⽰汇编程序对它们进⾏宏扩展时所得到程序⽚段: ABS BX 1 CMP BX, 0 1 JGE ??0000 1 NEG BX 1 ??0000:… ABS AL 1 CMP AL, 0 1 JGE ??0001 1 NEG AL 1 ??0001:在上述程序⽚段中,宏体内部的局部标号next分别⽤符号??0000和??0001来对应它的⼆次引⽤。

汇编 第四章伪指令及汇编语言源程序结构

汇编 第四章伪指令及汇编语言源程序结构

MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆

8086汇编语言伪指令

8086汇编语言伪指令

一、伪指令详解伪指令在百度百科中的定义为:伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。

例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。

伪指令有2个特点:1.由于是伪“指令”,因而它只存在于汇编语言中。

高级语言中不叫指令,叫语句;2.由于是“伪”指令,也即“假”指令,因而不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。

与指令的区别::1.指令是在执行阶段发挥作用的,由CPU(Intel、AMD等)来执行。

2.伪指令是在编译阶段发挥作用的,由汇编器(MASM、TASM等)来解释。

二、数据定义伪指令为源程序中的数据和堆栈区分配数据存储单时,使用最多的伪指令。

数据定义伪指令格式如下:常用的数据定义伪指令类型有:∙DB(定义字节,常用)一个字节数据占1个字节单元,读完一个,偏移量加1∙DW(定义字,常用)一个字数据占2个字节单元,读完一个,偏移量加2∙DD(定义双字)一个双字数据占4个字节单元,读完一个,偏移量加4∙DQ(定义四字)一个四字数据占8个字节单元,读完一个,偏移量加8∙DT(定义十字节,用于BCD码)数据定义伪指令后面的初值表可以是常数、表达式、字符串。

例如:D2DW110*230;为D2分配1个字,存放表达式的值D3DB‘GOOD!’;为D3分配5字节,用来存放字符串‘GOOD!’D4DD2.4E+3;为D4分配2个字,存放一个浮点数D5DB‘AB’;为D5分配2字节,字符A在低字节,B在高字节D6DW‘AB’;为D6分配1个字,字符A在高字节,B在低字节S1DB5DUP(?);为S1预留5字节的存储空间S2DW3DUP(0);为S2分配3个字,初值设为0语句1相当于C语言中的DW D2=110*230,只不过是语法结构不太一样注意:通过变量名操作时,变量名代表存储区的第一个数据的地址。

完整版汇编语言中常用的伪指令档

完整版汇编语言中常用的伪指令档

完整版汇编语言中常用的伪指令档汇编语言是一种低级的程序设计语言,它用于编写底层计算机程序。

在汇编语言中,伪指令是一类特殊的指令,它们在程序运行时不会被计算机执行,而是在编译或汇编时被处理器或汇编器解释和展开。

伪指令在汇编语言中起到辅助编程、优化代码和声明常量等作用。

本文将介绍完整版汇编语言中常用的伪指令档。

一、伪指令的定义和作用伪指令是汇编语言中的一类特殊指令,它们不是真正的指令,不会被计算机执行,而是在编译或汇编的过程中被汇编器或处理器解释和处理。

伪指令主要用于辅助编程、优化代码和声明常量等作用。

伪指令的格式一般与真正的指令相似,但一般不包含操作码。

在一些汇编语言中,伪指令以特殊的标记或符号来区分,比如以“.”开头的指令。

二、常用的伪指令档1. ORG指令ORG指令用于指定程序的起始地址。

在汇编程序中,使用ORG指令可以将程序的代码段或数据段放置在指定的内存地址处。

其格式一般为:ORG 地址其中,地址为16进制数或表示内存单元的符号。

2. EQU指令EQU指令用于定义符号常量或符号变量。

它将一个符号与一个数值或地址进行关联,使得在程序中使用该符号时可以被汇编器或处理器替换为对应的数值或地址。

其格式一般为:符号 EQU 数值或地址其中,符号为一个标识符,数值或地址可以是16进制数、10进制数或表示内存单元的符号。

3. DB指令DB指令用于定义字节型数据。

它可以用于声明字符、整数等字节型数据,并将这些数据存储在指定的内存地址中。

其格式一般为:标号 DB 表达式其中,表达式可以是一个字节常量、字符常量或表示内存单元的符号。

4. DW指令DW指令用于定义字型数据。

它可以用于声明无符号整数等字型数据,并将这些数据存储在指定的内存地址中。

其格式一般为:标号 DW 表达式其中,表达式可以是一个字常量或表示内存单元的符号。

5. DD指令DD指令用于定义双字型数据。

它可以用于声明无符号双字整数等双字型数据,并将这些数据存储在指定的内存地址中。

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例:COUNT EQU 100 ;数值赋予符号名
MOV CX, COUNT ; 源操作数的寻址方式 ? NUM1 EQU COUNT+100 ;表达式值200赋予NUM1
PORT1 EQU CX
;PORT1是CX的代名词,即CX本身赋以符号名
CBD EQU DAA ;指令助记符本身赋予符号名
B EQU [BP+8] ;相对变址引用本身赋予符号名
简化段定义
宏汇编语言中包括三类语句:
机器指令语句:
汇编后形成机器代码,在执行时引起机器操作
伪指令语句:
不形成机器代码,只在汇编过程中起作用
宏指令语句:
汇编语言语句格式 指令的格式:
[标号:] 操作码项 [操作数项] [;注释项]
伪指令格式:
[变量名] 伪指令助记符 [操作数项] [;注释项]
汇编语言程序结构
汇编语言程序的基本结构
完整段定义框架
STACK SEGMENT …… STACK ENDS DATA SEGMENT …… DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
简化段定义框架
.MODEL SMALL .386 .STACK ;堆栈段 .DATA ……
内存空间表达式 ?
汇编后,这些单元的初值为任意
例: ONE DB ?
;为变量ONE分配一个字节的空间
TWO DW ?,?,?
;为变量TWO 分配了3个字单元空间
THREE DD ? ; 为变量THREE分配了一个4字节的存储单元
为存储单元定义数据:用数值初始化存储单元
例: A1 DB 10 A2 DW 01100100B,100H A3 DW OFFSET NEXT ;标号NEXT的偏移地址值0028存入A3单元 ADD1 DD NEXT ;标号NEXT的32位地址指针存入ADD1单元 B1 DW A1 ;B1中存储A1的偏移地址 …… 3000: 0028 NEXT:MOV BX,AX …… 标 号
段寄存器的初值 CS=3000H DS=3000H SS=3000H ES=3000H
DATA SEGMENT ARRAY DB 1,4,6,9,2 SUM DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA SATRT: MOV AX, DATA MOV DS, AX MOV AX, 0 MOV SI, 0 MOV CX, 5 AGN: ADD AL, ARRAY[SI] ADC AH, 0 INC SI LOOP AGN MOV SUM, AX MOV AH, 4CH INT 21H CODE ENDS END START
标号:在代码段中定义,后跟冒号:
(这是标号和变量的重要区别) 标号经常出现在转移指令或CALL指令的操作数项,用 以表示转移地址。 标号有三种属性 段属性
定义标号的段起始地址,此值必须在一个段寄存器中,而标 号的段则总是在CS寄存器中。
偏移属性
标号的偏移地址是16位无符号数,它代表从段起始地址开始 到定义标号的位置之间的字节数。
当前位置计时器 $ $:当前地址的偏移值
X1 1000:2000H X1 DB 1, 2, 3, 5 LEN1 EQU $-X1 $=1000:2004H,LEN1=4 X2 DW 1234H LEN2 EQU $-X2 $=1000:2006H,LEN1=2
X2 1000:2004H
01H
02H 03H 05H 34H 12H
不同
逻辑运算符
AND OR XOR NOT SHL SHR 注意: 是运算符,不是操作码。 逻辑运算符是按位操作的。运算在汇编过程完成 只能用于数字表达式中。
例:IN AL,PORT ; 这是外设端口地址的符号名 OUT PORT AND 0FEH, AL
;此逻辑运算在汇编时完成,结果是某一端口号
例:
LENGTH 回送单元数
格式: LENGTH 变量
注意:
只对内存变量符号名有效,不能对标号操作 当变量中使用DUP情况,汇编程序将回送分配给该变量的单元数 而对于其它情况则回送值1 FEES DW 1,2,3,4,5….;100个数 MOV CX,LENGTH FEES 汇编后:MOV CX,1 例: FEES DW 100 DUP(0) MOV CX,LENGTH FEES 汇编后:MOV CX,100 例:
;数据段
START:MOV AX,DATA MOV DS,AX …… MOV AX,4C00H INT 21H CODE ENDS END START
.CODE .STARTUP ;代码段 …… .EXIT ;返回DOS END
段寄存器的赋值
完整段定义框架
STACK SEGMENT …… STACK ENDS DATA SEGMENT …… DATA ENDS CODE SEGMENT
表达式是由一些常数、标号、变量和运算符组合而成 注意:表达式的运算是在汇编的过程中完成的
算术运算符
逻辑运算符
关系运算符
数值回送操作符
属性操作符
算术运算符:
+ - × / MOD(模除、取余) 注意: 在数字表达式中,可以使用这5种运算符 在地址表达式中,可以使用+- 例如: SUM和SUM+1单元的字节操作数相加。 MOV AL,SUM ADD AL,SUM+1 ;地址表达式,直接寻址 在汇编时将计算出SUM+1的值。
MOV BX,((PORT LT 5)AND 20) OR ((PORT GE 5)AND 30)
此运算汇编时完成 当 PORT<5时 汇编后 MOV BX,20 当 PORT≥5时 汇编后 MOV BX,30
数值回送运算符
TYPE、LENGTH、SIZE、OFFSET、SEG
格式: TYPE 变量/标号
等号伪指令(=)
最主要的区别 用EQU定义的符号,在一个程序中不能再定义 “=”伪指令可以重定义 例: EMP EQU 6 EMP=6 “=”伪操作中可以多次定义: 如: ….. EMP=6 ….. EMP=EMP+1 ….. 说明:在EQU或“=”右边表达式中如果有变量或 标号的话,则在该语句前应该给出它们的定义。
DA1 DB 1,2,3,4,5 DA2 DW 1,2,3,4,5 DA3 DD 1,2,3,4,5
用DB伪指令定义字符串操作数时,可以分别写 多个字符,也可以写一个多字符的串形式。
STRING1 DB ‘H’,‘E’,‘L’,‘L’,‘O’ STRING2 DB ‘HELLO’ STRING3 DB “HELLO”
功能:执行OUT指令时,(AL)该端口中 执行结果:
当PORT端口号为偶数时,输入端口与输出端口是同一个 当PORT端口号为奇数时,输入端口比输出端口大1
关系运算符
EQ(等于)、NE(不等于)、LT(小于)、 GT(大于)、LE(小于等于)、GE(大于等于)
计算结果为逻辑值:
关系成立, 结果为真,值为1 关系不成立,结果为假,值为0 例:
实际应用:求数组的长度
ARRAY1 DB 1, 3, 4, 5, 6 COUNT1 EQU $-ARRAY1 …… MOV CX, COUNT1 ARRAY2 DW 1,3,4,5,6 COUNT2 EQU ($-ARRAY2)/2 …… MOV CX, COUNT2 $
1000:2006H
运算符与表达式
修改:
MOV AX,WORD PTR OPER1 ;执行后AX内容0201H MOV AL,BYTE PTR OPER2 ;执行后AL内容34H
变量
变量经常在操作数段出现,是数据的存储单元地址。 变量有三种属性 段 定义变量的段起始地址,此值必须在一个段寄 存器(DS、ES、SS)中 偏移 变量的偏移地址是16位无符号数,它代表从段 起始地址到定义变量的位置之间的字节数。 类型 例:A1 DB 1,2,3,4,5,8,90,67,23,100 COUNT EQU $-A1
可以用数据定义伪指令定义一个表(数组) 或一个字符串
POWER1 DB 1,4,8,19,27,46,23 POWER2 DB 0,0,0,0,0,0,0,0,0,0 POWER3 DB ‘How are you ?’ ;每个字符占一个字节,存其ASCII码
变量和数据都具有段和偏移属性,同时也隐 含着类型属性。如:
注意: 单引号和双引号作用相同
重复操作符 DUP
格式: 重复次数 DUP(操作数,…,操作数)
例1: ARRAY DW 100 DUP(?) 功能:从ARRAY开始保留100个字类型存储缓冲区 (共200个字节)
ARRAY DB 2 DUP(0,1,2,?)
等价于ARRAY DB 0,1,2,?,0,1,2,?
变量 标识符
最多由31个字母、数字及规定的特殊字符 (?@ _ $)等组成,不能用数字开头。
定义原则:
不能以数字开头 不能单独使用特殊字符 不能使用系统的保留字,如指令名、寄存 器名和伪指令名等。 例:FFFFH 是标识符 0FFFFH 是十六进制数
变量定义及存储器分配伪指令
为数据项分配存储空间
如果是变量,则汇编程序将返回该变量以字节数表 示的类型值:
DB为1、DW为2、DD为4、 DF为6、DQ为8、DT为10
如果是标号,则汇编程序将回送标号类型值:
NEAR为-1、FAR为-2
ARRAY DW 1,2,3 ADD SI,TYPE ARRAY ;汇编时回送值2 汇编后:ADD SI,2
数组求和
完整段定义
.MODEL SMALL .DATA ARRAY DB 1,4,6,9,2 SUM DW ? .STACK DW 100DUP(?) .CODE .STARTUP MOV AX, 0 MOV SI, 0 MOV CX, 5 AGN: ADD AL, ARRAY[SI] ADC AH, 0 INC SI LOOP AGN MOV SUM, AX .EXIT END
相关文档
最新文档