我想在初始化的數據部分創建一個包含5個字符串的數據數組。每個字符串都有4個字符。每個字符串都有一些初始數據,如第一個字符串的「abcd」,第二個字符串的「efgh」等等。空\0
字符不需要任何字符串。我怎樣才能用匯編語言初始化字符串數組?初始化程序集中的字符串數組
這是我能想到的,到目前爲止:
string db "abcdefghijklmnopqrst"
有一些清晰的語法或方法?
我對64位代碼使用nasm
。
我想在初始化的數據部分創建一個包含5個字符串的數據數組。每個字符串都有4個字符。每個字符串都有一些初始數據,如第一個字符串的「abcd」,第二個字符串的「efgh」等等。空\0
字符不需要任何字符串。我怎樣才能用匯編語言初始化字符串數組?初始化程序集中的字符串數組
這是我能想到的,到目前爲止:
string db "abcdefghijklmnopqrst"
有一些清晰的語法或方法?
我對64位代碼使用nasm
。
第一:在彙編代碼級沒有「數組」的概念,它只是由開發人員設置解釋的位和字節。
最直接的方式來實現你的例如數組將字符串分解成自己的塊:
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.
。
我們可以使用'mov rdi,string_array'移動基地址陣列地址嗎? –
@KapilGarg - 我建議你在他們的文檔中找到你可以在nasm中執行某些操作的各種方法 - > http://www.nasm.us –
您是否爲16,32或64位編碼?你在用什麼彙編語言?更多細節將提供更準確的響應。 –
您顯示的解決方案有什麼問題?你在尋找什麼樣的「乾淨的語法」?一個數組只是一個字節序列,沒有什麼不可思議的。如果您願意,您可以選擇將該數據解釋爲字符串。 –
它只是,我的方法似乎沒有直觀地顯示我們正在初始化一串字符串。它看起來像一個單一的字符數組。 –