如何访问 .data 中的特定数据

How to acces specific data in .data

我很确定这是可能的,但我找不到如何访问 .data 部分中的某些数据,当它们被这样声明时(在 nasm 中):

msg: db 0xEA, 0xBA, 0x35, 0xB4, 0x88, 0x24, 0x14, 0x2C, 0xA1, 0x97, 0x5F, 0x1B, 0x56, 0xFA, 0xA3

例如,如果我想将第 4 个移动到寄存器,我该怎么做?

非常简单。这是它的英特尔符号:

 mov al, [msg+3]

为了解决这个答案的评论中的后续问题,您可以像这样迭代数组,假设一个 16 位模型(对于 32 位模型,使用 ebx 等)(还要注意我已经在你的数组末尾添加了 0xFF。还有很多其他方法可以做到这一点,这只是其中一种):

     mov bx, msg
 next:
     mov al, [bx]
     cmp al, 0xff
     je  done
     call printAL
     inc bx
     jump next
 done:
     ret

 msg: db 0xEA, 0xBA, 0x35, 0xB4, 0x88, 0x24, 0x14, 0x2C, 0xA1, 0x97, 0x5F, 0x1B, 0x56, 0xFA, 0xA3, 0xFF

此代码假定您已经定义了一个引用为 printAL 的函数来对 al 执行某些操作,并且您已经从其他地方调用了此代码(因此是 ret)。