如何访问 .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
)。
我很确定这是可能的,但我找不到如何访问 .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
)。