我想讀取用戶的3個數字,我把它們存儲在一個數組,然後我告訴他們在NASM使用保羅·卡特功能這裏是我的代碼:打印整數NASM
%include "asm_io.inc"
SECTION .bss
tab resb 3
SECTION .data
msg db "Un nombre :",10
SECTION .text
global main
main:
mov esi,tab
xor ecx,ecx
get_data:
mov eax,msg
call print_string
call read_int
mov [esi+ecx],eax
inc ecx
cmp ecx,3
jne get_data
call print_nl
xor ecx,ecx
mov edi,tab
print_data:
mov eax,[edi+ecx]
call print_int
inc ecx
cmp ecx,3
jne print_data
mov eax,1 ; exit code
int 0x80 ; call exit
的問題是即不執行print_data循環並退出。
你只保留3個字節'tab'。如果你想要3個dword,你應該使用'resd 3'而不是'resb 3',並且你應該在每次迭代結束時將ecx增加4而不是1。另外,我沒有介紹'asm_io.inc'中的函數是如何實現的,但'ecx'通常是一個_caller-saved_寄存器,這意味着您不應該依賴它來保持函數調用的值。你的'msg'字符串也似乎缺少一個NUL終止字節。 – Michael
我已經修改了程序,正如你所說的那樣,期望'ecx'寄存器不被這些函數使用,但它仍然跳過該循環。 –
它不能跳過循環。但也許它不會打印你想看到的結果。順便說一下,讀取asm代碼非常困難,沒有來自編寫它的人的評論。當你在代碼中添加更改時,更新你問題中的代碼。除此之外,你需要描述你所調用的功能實際上是做什麼的。 – Blechdose