MASM伪指令速查表–变量
初学MASM时, 常常看不懂db, dup(?)等汇编指令的含义, 教材中也缺乏系统的解释。与机器指令不同,这些指令叫伪指令, 在编译(汇编)的时候被MASM编译器处理, 而在运行时计算机不会真正的执行这些指令。这篇文章可以系统的解决对MASM伪指令的困扰。 MASM学习到这一块才叫真正的MASM,之前学习的机器指令都属于各种汇编语言都支持的8086指令集, 而这些伪指令只有MASM有, 别的汇编语言比如NASM等是不支持这些伪指令的。
文章目录
一. 数值型参数(常量)和表达式
1. 常量(常数)定义equ或=
格式:
[常量名] equ [值]或者[常量名] = [值]举例:
myid equ 1234 numofchina =1 ;一个中国 calldos equ <int 21h> ;[值]可以是字符串, 但是字符串要拿<>括起来注意:
这里定义的是常量, 在内存中没有分配空间, 因此和高级语言(如c语言)的常量一样
myid equ myid+1这种语句是不允许的
2. 数值表达式
masm6.x支持多种运算符, 对的你没有看错, MASM还可以支持运算符, 但是仅限常量和立即数的计算(和c语言的宏同理, 就是在编译的时候算好), 不能运行时计算
| 运算符类型 | |
|---|---|
| 算术运算符 | +, -, *, /, MOD(取余) |
| 逻辑运算符 | AND, OR, XOR(异或), NOT |
| 移位运算符 | SHL(左移), SHR(右移) |
| 关系运算符 | EQ(equal相等), NE(not equal不相等), GT(greater than大于), LT(less than小于), GE(大于等于), LE(小于等于) |
| 高低分离符 | HIGH(高字节), LOW(低字节), HIGHWORD(高字), LOWWORD(低字) |
举例:
mov ax, 1*1+2 ; 等价于mov ax, 3
mov al, 0101b shl (2*2) ; 等价于 mov al, 01010000b(0101b左移四位)
mov ah, high 8765h ; 等价于 mov ah, 87h(8765h的高字节)
二. 变量定义伪指令
1. db/dw/dd/df/dq/dt
db是以字节(8比特)为单位, dw是以字为单位(16比特), dd是双字, df是三字, dq是四字, dt是十字
格式:
[变量名] db [初值表]功能: 定义以字节为单位的变量,变量的起始地址为[变量名], 值为[初值表]中每个逗号隔开的元素, [变量名]可以省略
示例:
.data X


2659

被折叠的 条评论
为什么被折叠?



