全局变量在什么地方定义?
.data和.data?
格式如下:
变量名 类型 初始值1,初始值2...
变量名 类型 重复数 dup(初始值1,初始值2,...)
变量名 类型 ?
类型有哪些?
字节 byte/db 字 word/dw 双字dword/dd 三字fword/df 四字qword/dq 十字节 tbyte/dt 有符号字节 sbyte 单精度浮点 real4
val db ? ;定义变量
buffer dw 64 dup(0) ;定义64个字的缓冲区
szText db 'abc123',0dh,0ah ;定义字符串 ASCII字符串加回车换行
注意:定义字节和字在内存中存放的区别
内存以字为存储单位,低位在前,高位在后;
LIST |
10 | VAL | 34H | |
LIST+1 | 20 | VAL+1 | 12H | |
LIST+2 | 30 | VAL+2 | 78H | |
LIST+3 | 40 | VAL+3 | 56H |
list db 10,20,30,40
mov al,list
mov bl,list+1
mov cl,list+2
mov dl,list+3
val dw 1234h,5678h
mov ax,val ;ax=1234h
mov bx,val+2
mov dx,word ptr val+1
mov eax,dword ptr val
疑问?
注:单引号和双引号的区别,可以相互定义对应的字符,比如:
"aaa'a'" -> 输出结果:aaa'a'
'aaa"a"' -> 输出结果:aaa"a"
局部变量
作用域在单个子程序,属于堆栈变量,伪指令 LOCAL
LOCAL 变量名1[重复数量]:[类型],...
test proc
LOCAL @val:dword ;@定义一个局部变量,便于区分,
LOCAL @buffer[1024]:btye
LOCAL @wnd:WNDCLASS ;定义一个WNDCLASS数据结构
mov eax,0FFFFFFFFH
mov @val,eax
test endp