当前位置:文档之家› 汇编语言的基本语法

汇编语言的基本语法


·SEG
格式为:SEG 变量或标号 汇编程序将回送变量或标号的段地址值。
举例:如果DATA_SEG是从存储器的05000H地址 开始的一个数据段的段名,OPER1是该段中的一个 变量名,则 MOV BX, SEG OPER1
将把0500H作为立即数插入指令。实际上,由 于段地址是由连接程序分配的,所以该立即数是连 接时插入的。执行期间则使BX寄存器的内容成为 0500H。
(2)操作项 操作项可以是指令、伪指令或宏指 令的助记符。对于指令,汇编程序将其 翻译为机器语言指令。对于伪指令,汇 编程序将根据其所要求的功能进行处理。 对于宏指令,则将根据其定义展开。
(3) 操作数项 操作数项由一个或多个表达式组成,多个 操作数项之间一般用逗号分开。对于指令,操 作数项一般给出操作数地址,它们可能有一个, 或二个,或三个,或一个也没有。对于伪操作 或宏指令,则给出它们所要求的参数。 操作数项可以是常数、寄存器、标号、变 量或由表达式组成。
汇编语言的基本语法
1.1. 汇编语言源程序的格式
DATA ARRAY COUNT SUM SEGMENT AT 2000H DB a1,a2,a3,…a10(a1~a10为立即数) EQU $ - ARRAY DW ?
DATA
STACK STAK TOP STACK
ENDS
SEGMENT PARA STACK ‘STACK’ DB 10 DUP (?) EQU LENGTH STAK ENDS
将形成为 MOV CX, 1。
·OFFSET 格式为:OFFSET 变量或标号 汇编程序将回送变量或标号的偏移地址值。 举例: MOV BX, OFFSET OPER_ONE 汇编程序将OPER_ONE的偏移地址作为 立即数回送给指令,而在执行时则将该偏移地 址装入BX寄存器中。所以这条指令的功能与 指令 LEA BX, OPER_ONE 是等价的。
CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,0 MOV DI,OFFSET SUM MOV BX,OFFSET ARRAY MOV CX,COUNT LOP: ADD AL,[BX] ADC AH,0 INC BX LOOP LOP MOV [DI],AX MOV AH,4CH INT 21H CODE ENDS END START
参数Байду номын сангаас有关的数据,
名字是段名、符号名等标识符,变量用变量名表示。
常量、标识符和表达式
一、常量 其值在程序中不能改变的量, 在汇编语言源程序中的常量有: 数字常量、字符常量和符号常量 ( 1 ) 数字常量可以是二进制数、八进制数、十进 制数或十六进制数表示
( 2 ) 字符常量是用单引号‘ ’括起来的ASCII字 符,
操作数项由一个或多个表达式组成, 它提供为执行所要求的操作而需要的信 息。操作数项可以是常数、寄存器、标 号、变量或由表达式组成。
注释项用来说明程序或语句的功能。 ";"为识别注释项的开始。";"也可以 从一行的第一个字符开始,此时整行都 是注释,常用来说明下面一段程序的功 能。
上面四项中带方括号的两项是可选项。 各项之间必须用"空格"(space)或"水 平制表"(Tab)符隔开。
一般说来,名字项可以是标号或变量。它 们都用来表示本语句的符号地址,都是可有可 无的,只有当需要用符号地址来访问该语句时 它才需要出现。 ·标号:标号在代码段中定义,后面跟着 冒号:,此外,它还可以作为过程名定义。 ·变量:变量在数据段或附加数据段中定 义,后面不跟冒号。 变量经常在操作数字段出 现。
指令性语句
格式为:
[ 标号 ]: 操作码 [ 操作数 ] [; 注释 ]
带方括号的为任选项,
标号是指令的符号地址,
操作码和操作数是用汇编语言指令表示的指令部分,
注释是对该语句在本程序中的功能的说明。
指示性语句
格式为:
[ 名字 / 变量 ] 命令 [参数] [; 注释 ]
命令指示汇编程序进行某种汇编操作,
(3) 关系操作符 关系操作符有:EQ(相等)、NE(不 等)、LT(小于)、GT(大于)、LE(小于 或等于)、GE(大于或等于)。 关系操作符的两个操作数必须都是数字或 是同一段内的两个存储器地址。计算的结果应 为逻辑值:结果为真,表示为0FFFFH;结果 为假,则表示为0。
例如:
MOV BX,((PORT_VAL LT 5) AND 20) OR ((PORT_VAL GE 5) AND 30)
举例:已有数据定义如下: TWO_BYTE DW ? 可以用以下语句对这两个字节赋予另一种 类型定义: ONE_BYTE EQU BYTE PTR TWO_BYTE 这里ONE_BYTE和TWO_BYTE两个符号 地址具有相同的段地址和偏移地址,但是它们 的类型属性不同,前者为1,后者为2。
此外,有时指令要求使用PTR操作符。例 如用 MOV [BX], 5 指令把立即数存入BX寄存器内容指 定的存储单元中,但汇编程序不能分清 是存入字单元还是字节单元,此时必须 用PTR操作符来说明属性,应该写明: MOV BYTE PTR [BX],5 或 MOV WORD PTR [BX],5
( 1 ) 组成标识符的字符有:
英文大写字母:A~Z; 英文小写字母: a-z; 数字0~9; 字符?、@、_ 、$;
( 2 )字符长度不超过3l个;
( 3 ) 首字符不能是数字;
( 4 ) ? 不能单独作为一个标识符;
( 5 ) 不能把保留字用作标识符,保留字包括助记符、 寄存器名等。
三、表达式 表达式是常数、标号、变量与一些操作符相 组合的序列,可以有数字表达式和地址表达式 两种。在汇编期间,汇编程序按照一定的优先 规则对表达式进行计算后可得到一个数值或一 个地址。
(4) 注释项 注释项用来说明一段程序、一条或几条指 令的功能。对于汇编语言程序来说,注释项的 作用是很明显的,它可以使程序容易被读懂, 因此汇编语言程序必须写好注释。注释应该写 出本条(或本段)指令在程序中的功能和作用, 而不应该只写指令的动作。读者在有机会阅读 程序例子时,应注意学习注释的写法,在编制 程序时,更应学会写好注释。
则当PORT_VAL < 5时,汇编结果应该是: MOV BX, 20
否则,汇编结果应该是:
MOV BX, 30
(4) 数值回送操作符 数值回送操作符有:TYPE、 LENGTH、SIZE、OFFSET、SEG等。 数值回送操作符把一些特征或存储 器地址的一部分作为数值回送。
·TYPE 格式为:TYPE 表达式 如果表达式是变量,则汇编程序将 回送该变量的以字节数表示的类型:DB 为1,DW为2,DD为4,DF为6,DQ 为8,DT为10。如果表达式是标号,则 汇编程序将回送代表该标号类型的数值: NEAR为 -1,FAR为 -2。如果表达式为 常数,则应回送0。
例如把两个不同段的地址相加也是无意义的。 经常使用的是地址 ± 数字量,它是有意义的。例如 SUM +1是指SUM字节单元的下一个字节单元的地址 (注意:不是指SUM单元的内容加1),而SUM-1则 是指SUM字节单元的前一个字节单元的地址。 例: 如果要求把首地址为BLOCK的字数组的第 6个字传送到DX寄存器,可用指令如下: MOV DX, BLOCK+ (6-1) * 2
格式为:SIZE 变量 汇编程序应回送分配给该变量的字 节数。但是,此值是LENGTH值和TYPE 值的乘积。
例如:
MOV CX, SIZE FEES
将形成为 MOV CX, 200
又例如: MOV CX, SIZE ARRAY 将形成为 MOV CX, 2
又例如: MOV CX, SIZE TABLE
常用的表达式操作符介绍如下:
(1) 算术操作符 算术操作符有+、-、*、/ 和MOD。 MOD是指除法运算后得到的余数,如 19/7的商是2,而19 MOD 7则为5(余数)。
算术操作符可以用于数字表达式或地 址表达式中,但当它用于地址表达式时, 只有当其结果有明确的物理意义时才是 有效的结果。例如两个地址相乘或相除 是无意义的。在地址表达式中,可以使 用 + 或 - ,但也必须注意其物理意义。
汇编语言源程序格式的特点是:
1 .分段结构
2 .语句行
汇编语言程序的语句有两类:
( 1 ) 指令性语句
( 2 ) 指示性语句
汇编语言源程序语句的格式
汇编语言源程序中的每个语句可以由四项组成, 格式如下: [名字] 操作 操作数 [ ;注释]
其中: 名字项是指一个标号或变量。 操作项是一个操作码的助记符,它可以是指令、 伪指令或宏指令名。
MOV CX, 100
举例2: ARRAY DW 1, 2, 3 对于指令MOV CX, LENGTH ARRAY 汇编程序将使其形成为: MOV CX, 1
举例3: TABLE DB ‘ABCD’ 对于指令MOV CX, LENGTH TABLE 汇编程序将使其形成为: MOV CX, 1
·SIZE
(2) 逻辑操作符 逻辑操作符有:AND(与)、OR(或)、XOR (异或)、NOT(非)。 逻辑操作符都是按位操作的,只能用于数字表 达式中。逻辑操作符要求汇编程序对其前后两个操 作数(或表达式)作指定的逻辑操作。
例: OUT PORT_VAL AND 0FEH, AL 上例中PORT_VAL为端口号,OUT 指令中的表达式说明只为偶数号端口输 出数据。
其值是该字符的ASCII代码值
( 3 ) 符号常量是用标识符定义的常量。
例如,采用符号定义语句 PORTA EQU 80H, 则指令 MOV AL,PORTA 与指令 MOV AL,80H 等价。 二、标识符 在编程时建立的有特定意义的字符序列,标识符 可用作符号常量、名字、变量和标号等。
相关主题