初始化程序集中的字符串数组

时间:2017-04-06 09:43:55

标签: arrays assembly nasm x86-64

我想在初始化数据部分创建一个包含5个字符串的数据数组。每个字符串正好有4个字符。每个字符串都有一些初始数据,如第一个字符串为“abcd”,第二个字符串为“efgh”,依此类推。任何字符串都不需要空\0个字符。如何用汇编语言初始化字符串数组?

这是我到目前为止所能想到的:

string    db    "abcdefghijklmnopqrst"

是否有一些干净的语法或方式?

我使用nasm代码为64位代码。

1 个答案:

答案 0 :(得分:3)

首先:在汇编代码级别没有"数组"的概念,只需要由开发人员设置解释的位和字节。

为您的示例实现数组的最直接的方法是将字符串分解为自己的块:

string1: db "abcd"
string2: db "efgh"
string3: db "ijkl"
string4: db "mnop"
string5: db "qrst"

您现在已经创建了单独的字符串块,可以单独作为一个单元引用。最后一步是声明"数组"通过一个新的数据元素,它包含5个字符串中每个字符串的起始地址:

string_array: dq string1, string2, string3, string4, string5

上面现在有5个地址(每个占64位)。

将数组的地址放入代码段中的某个寄存器中。以下是遍历数组并获取每个字符串的相当残酷的方法:

xor rdx, rdx            ; Starting at offset zero
lea rdi, [string_array] ; RDI now has the address of the array 
mov rsi, [rdi+rdx]      ; Get the address of string1

; Process String1
; Get next string

add rdx, 8              ; Get the next offset which is 64 bits
mov rsi, [rdi+rdx]      ; Get the address of string2

; Process String2
; etc.

不知道你在使用数组做什么,你的代码方法可能会有所不同。