PTR: 指定要操作的數據尺寸
------------------------------------------------------------------------------------------------------------------------------------------
.386
.model flat, stdcall
include??? windows.inc
include??? kernel32.inc
include??? masm32.inc
include??? debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.data
??? val db 11h, 22h, 33h, 44h, 55h, 66h, 77h, 88h
.code
main proc
??? xor eax, eax??????????????????? ;清空 EAX, 同 mov eax, 0
??? mov eax, dword ptr val?? ;
??? PrintHex eax????????????????? ?;44332211
???
??? xor eax, eax??????????????????????;
??? mov eax, dword ptr val+1 ;
??? PrintHex eax???????????????????? ?;55443322
???
??? xor eax, eax???????????? ;
??? mov ax, word ptr val???? ;
??? PrintHex eax???????????? ;00002211
???
??? xor eax, eax???????????? ;
??? mov al, byte ptr val???? ;
??? PrintHex eax???????????? ;00000011
??? ret
main endp
end main
------------------------------------------------------------------------------------------------------------------------------------------
OFFSET 和 ADDR 的異同:
1、offset 不能獲取局部變量的地址;
2、addr 只能用于調用函數(invoke)時, 不能用于賦值操作;
3、addr 面對局部變量時會轉換為 lea 等指令, addr 面對全局變量時則直接調用 offset;
4、在 invoke 中應盡量使用 addr, 其他只用 offset.
------------------------------------------------------------------------------------------------------------------------------------------
.386
.modelflat, stdcall
include?? windows.inc
include?? kernel32.inc
include?? masm32.inc
include?? debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib
.data
??? TextAddr equ this byte? ;偽指令 this 可讓當前變量和下一個變量同址
??? szText db'Asm', 0
.code
main proc
??? PrintHex offset szText? ;00403000
??? PrintHex offset TextAddr ;00403000
???
??? PrintString szText????? ;Asm
??? mov [TextAddr], 'a'???? ;給 TextAddr 賦值
??? PrintString szText????? ;asm
??? ret
main endp
end main
--------------------------------------------------------------------------------------------------------------------
同址異名