汇编-OFFSET地址偏移量
OFFSET操作符返回数据标号的偏移量。这个偏移量表示的是按字节计算该数据标号距离数据段起始地址的距离。
.386 .model flat,stdcall option casemap:none .data bVal BYTE ? wVal WORD ? dVal DWORD ? dVal2 DWORD ? ExitProcess PROTO,dwExitCode:DWORD .code main PROC mov eax, OFFSET bVal ;EAX = 01244000h mov ebx, OFFSET wVal ;EBX = 01244001 mov ecx, OFFSET dVal ;ECX = 01244003 mov edx, OFFSET dVal2 ;EDX = 01244007 INVOKE ExitProcess,0 main ENDP END main
.386 .model flat,stdcall .stack 4096 ExitProcess PROTO,dwExitCode:DWORD .data myArray WORD 1,2,3,4,5 .code main PROC mov eax,OFFSET myArray ;EAX = 00834000h mov ebx,OFFSET myArray+4 ;EBX = 00834004h INVOKE ExitProcess,0 main ENDP END main
64位汇编
OFFSET操作符产生64位地址, 必须用64位寄存器或变量来保存
ExitProcess PROTO ;函数的声明不需要参数 .data var DWORD 2,4,6,8,10 .code main PROC mov rsi, OFFSET var ;RSI = 00007FF788AA4000h mov ecx,0 ;结束程序 call ExitProcess ;64位版本的MASM不支持INVOKE伪指令。 main ENDP END ;END伪指令没有指定程序入口点, 而32位程序则指定了