我想使用特定值初始化程序集中的數組。我試着先在循環中做它,但在數組中得到垃圾。然後我嘗試手動做,並得到同樣的垃圾。我希望數組重複n 1 2次n次。以下是我嘗試的一些示例代碼。將數組初始化爲程序集中的特定值(x86)
這是我嘗試手動加載數組。第一個值加載得很好。然而,當我在GDB中檢查它時,第二個值會加載垃圾。
sub esp, 260
mov [ebp - 12], dword -1
mov [ebp - 16], byte 0
mov [ebp - 17], byte 1
mov [ebp - 18], byte 2
mov [ebp - 19], byte 0
mov [ebp - 20], byte 1
mov [ebp - 21], byte 2
mov [ebp - 22], byte 0
mov [ebp - 23], byte 1
mov [ebp - 24], byte 2
mov [ebp - 25], byte 0
這是我嘗試自動做的。
sub esp, 260
mov [ebp - 12], dword -1
again:
add [ebp - 12], dword 1
lea eax, [ebp - 16]
sub eax, [ebp - 12]
mov [eax], byte 0
add [ebp - 12], dword 1
lea eax, [ebp - 16]
sub eax, [ebp - 12]
mov [eax], byte 1
add [ebp - 12], dword 1
lea eax, [ebp - 16]
sub eax, [ebp - 12]
mov [eax], byte 2
cmp [ebp - 12], dword 255
jne again
jmp elsewhere
使用NASM,X86-32,Intel語法。
編輯:當我轉換此代碼以DWORD而不是字節存儲數組值時,這兩種方法的工作。這是爲什麼?
一個技巧:寫下你想在C到做什麼,並設置編譯器輸出組件,看看編譯器生成的並根據您的需求進行調整。 – slashmais
它做了一些非常類似於我的手動方式。我會嘗試模擬它的作用,但我不明白我的情況有什麼不同。 – frillybob
我無法複製生產線,因爲它不會因爲某種原因而編譯。但是,無論如何我都會得到同樣的垃圾。編輯當我將其轉換爲存儲dword而不是字節它可以以任何方式工作。這是爲什麼? – frillybob