Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS
PTR: 指定要操作的數(shù)據(jù)尺寸
------------------------------------------------------------------------------------------------------------------------------------------
.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 只能用于調(diào)用函數(shù)(invoke)時(shí), 不能用于賦值操作;
3、addr 面對(duì)局部變量時(shí)會(huì)轉(zhuǎn)換為 lea 等指令, addr 面對(duì)全局變量時(shí)則直接調(diào)用 offset;
4、在 invoke 中應(yīng)盡量使用 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 可讓當(dāng)前變量和下一個(gè)變量同址
??? 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
--------------------------------------------------------------------------------------------------------------------
同址異名
總結(jié)
以上是生活随笔為你收集整理的Win32ASM学习[6]: PTR、OFFSET、ADDR、THIS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 照胃镜要多少钱啊?
- 下一篇: Win32汇编学习[7]: 定义符号常量