整数常量
由一个可选前置符号、一个或多个数字以及一个指明基数的可选基数字符组成:
[{+ | -}] digits [radix]
h | 十六进制 | r | 编码实数 |
---|---|---|---|
q/o | 八进制 | t | 十进制(备用) |
d | 十进制 | y | 二进制(备用) |
b | 二进制 |
26 ;十进制
26d ;十进制
11010011b ;二进制
42o ;八进制
整形常量表达式
包含整数常量和算术运算符,计算结果必须是一个整数,并可用32位来存放。
运算符 | 名称 | 优先级 |
---|---|---|
() | 圆括号 | 1 |
+,- | 一元加、减 | 2 |
*,/ | 乘、除 | 3 |
MOD | 取模 | 3 |
+,- | 加、减 | 4 |
实数常量
用于表示一个十进制实数和编码(十六进制)实数。十进制实数包含一个可选符号,其后跟随一个整数,一个十进制小数点,一个可选的表示小数部分的整数和一个可选的指数。
[sign] integer. [integer] [exponent]
符号和指数格式如下:
sign: {+,-}
exponent: E [{+,-}] integer
2.
+3.0
-44.2E+05
26.E5
字符常量
用单引号或双引号包含的一个字符。
‘a’
“B”
字符串常量
用单引号或双引号包含的一个字符(含空格)序列。
‘ABC’
“Hello world”
保留字
默认情况下不区分大小写。
- 指令助记符,如MOV、ADD、MUL
- 寄存器名称
- 伪指令,告诉汇编器如何汇编程序
- 属性,提供变量和操作数的大小与使用信息,如BYTE和WORD
- 运算符
- 预定义符号,如@data
标识符
- 可以包含1-247个字符
- 不区分大小写
- 第一个字母必须为字母、下划线、@、?或$
- 不能与保留字相同
伪指令
- 伪指令是嵌入源代码中的命令,由汇编器识别和执行。
- 可以定义变量、宏和子程序。
- 为内存段分配名称,执行其他许多与汇编器相关的工作
- 默认不区分大小写
DWORD伪指令告诉汇编器在程序中为一个双字变量保留空间。
MOV指令在运行时执行。
myVar DWORD 26
mov eax, myVar
定义段
程序中的段具有不同的作用。
- .data:定义数据区
- .code:定义代码区
- .stack 100h:定义堆栈区并设置大小
指令
是一种语句,在程序汇编时变得可执行,汇编器将其翻译为机器语言,并在运行时由CPU加载和执行。一条指令有四个组成部分:
- 标号(可选)
- 指令助记符(必需)
- 操作数(看情况)
- 注释(可选)
1、标号:一种标识符,可以标记数据和指令的位置,分为数据标号和指令标号。
数据标号标识变量的位置,相当于变量的引用。下面的语句定义了名为count的变量。
count DWORD 100
指令标号用于标识一块程序代码区,必须用冒号结束,用于跳转和循环指令。下面的JMP指令创建了一个循环,跳转到target标识的位置。
target:
mov ax, bx
…
jmp target
2、指令助记符:标记一条指令的短单词。如MOV,ADD和SUB。
3、操作数:指令输入输出的值。操作数可以是寄存器、内存操作数、整数表达式和输入输出端口。当指令有多个操作数时,通常第一个是目的操作数,第二个是源操作数。
4、注释:通常包含下列信息:
- 程序目标的说明
- 程序创建者或修改者的名单
- 程序创建或修改的日期
- 程序实现技术的说明
注释有两种指定方法:
- 单行注释:用分号开始
- 块注释:用COMMENT伪指令和一个用户定义的符号开始,以用户定义的符号结束。
COMMENT !
This line is a comment.
This line is a comment.
!
5、NOP(空操作)指令:在程序空间中占一字节,有时被编译器和汇编器用于将代码对齐到有效的地址边界。在下面的例子中,第一条指令MOV生成了3字节的机器代码,NOP指令就把第三条指令的地址对齐到双字节边界:
00000000 66 8B C3 mov ax, bx
00000003 90 nop
00000004 8B D1 mov edx, ecx