汇编语言¶
整数常量与整数表达式¶
整数常量(与C++不同): 采取基数后缀的方式表示:
10(默认没有后缀是十进制),10d(十进制),10o/q(八进制),0A0(十六进制),10b(二进制)
- 以字母开头的十六进制常量前面加0才有效
整数表达式:包含整数值和算术运算符的数学表达式,表达式的结果不能超出32bits的范围
实数常量¶
字符常量¶
符号常量¶
符号常量(或符号定义),将标识符与整数表达式或者文本联系起来
- 符号常量不占用存储空间,但是变量占用存储空间
保留字¶
- 指令助记符:MOV,ADD
- 伪指令:INCLUDE、PROC
- 属性: Byte,WORD
- 预定义符号:$、?
$:存储当前语句的地址偏移值 - 计算数组或者字符串的大小
- 计算字符串的大小
str_hello BYTE "Hello World"
标识符¶
- 包含1~127个字符
- 第一个字符必须是字母、下划线、@和?和$,第一个字符不能是数字
- 对大小写不敏感
指令¶
标号¶
充当指令或者数据位置标记的标识符
- 数据标号:标识变量的地址
- 代码标号:表示代码的地址
指令助记符¶
是一个简单的单词,用来表示一个指令
操作数¶
操作数是指令执行的操作最对象
操作数可以来自于寄存器、内存、常量、I/O窗口
| Operation | Meanings |
|---|---|
[inc eax] |
inc eax,acx寄存器值加法后只剩1km |
[{expression};save result to count] |
注释代码 |
NOP¶
伪指令¶
- 定义变量
my_var DWORD 100h; DWROD 伪指令
mov eax,my_var; mov指令
- 定义段
.data .code .stack
- 定义过程
PROC ENDP
- 允许或者禁止汇编器中的某些特性
.386 OPTION .MODEL
| 伪指令 | 例子 | 功能 |
|---|---|---|
| DUP | BYTE 4DUP("Hello"),BYTE 20DUP(0) |
为字符串或者数组分配内存空间 |
| = | COUNT = 500 mov eax, COUNT |
等号伪指令将符号名和整数表达式联系起来,易于阅读以及维护 |
内部数据结构¶
MASM内部以数据位的个数定义了多种数据结构
- BYTE,db,8位
- WORD,dw,16位
- DWORD,dd,32位
- QWORD,dq,64位
提醒:MASM默认情况下对大小写不敏感
- 0Ah,0Dh 是换行回车的ASCII编码,字符串的结尾是0
数据定义语句:
[变量名]数据定义伪指令 初始值
;数字数据类型定义
.data
dw_var1 DWORD 0
.data?
dw_var2 DWORD ?
;字符串类型数据的定义
str_hello BYTE "Hello world",0Dh,0Ah
BYTE "I don't love assembly language"
BYTE 0Dh,0AH,0