替代 NASM32 中的@data

Mat*_*tan 1 x86 assembly nasm

我现在正在学习汇编,我意识到该符号@data未在 NASM 中定义。这是我的代码:

section .data
    var1 db 0x3
    var2 db 0x4

section .text
global main
main:
    mov eax, @data
    mov ds, eax
    
    mov eax, var1
    mov ebx, var2
    
    mov eax, 0
Run Code Online (Sandbox Code Playgroud)

我在网上搜索替代符号,但没有找到任何东西。那么有什么替代方法@data吗?谢谢你的帮助。

vit*_*oft 5

符号在某些汇编器中@data表示段的第一个字节的data段地址。另请参阅NASM 第 9 章中的 16 位 .EXE 文件示例。在DOS 或 Windows 3 的实模式 16 位程序中,在访问数据之前加载段寄存器是必不可少的。当这样的程序启动时,它的 DS 和 ES 指向程序段前缀结构,而不是data你程序的段。当段被声明时,汇编器还创建了一个具有相应名称的可重定位符号,例如@datadata,可以在您的程序中用于初始化段寄存器。其他汇编器可能使用不同的语法,例如MOV AX,PARA# [data]

当一个扁平的 32|64 位保护模式程序启动时,它的段寄存器已经预先加载了段描述符表的有效索引,你根本不必关心段寄存器。