汇编-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位程序则指定了
复制代码

 

 

 

 

 

  

 

posted @   天子骄龙  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2021-11-16 opencv-log绝对值的自然对数
2020-11-16 Arduino--光感应模块--模拟输入
2020-11-16 Arduino---按钮
2020-11-16 Arduino--PWM引脚
2019-11-16 python--UUID唯一标识符
点击右上角即可分享
微信分享提示

目录导航