簡體   English   中英

linux nasm代碼什么也不顯示

[英]linux nasm code displays nothing

我正在編寫一個程序,用戶在其中輸入數字,並打印出從零到數字的所有數字。 它可以很好地進行編譯,鏈接並且可以在運行時不返回任何錯誤,但它絕對不會輸出任何內容。 這是代碼:

SECTION .data 
len   EQU 32

SECTION .bss 
other resd len
data  resd len

SECTION .text

GLOBAL _start
_start:
nop

input:                  ; This section gets the integer from the user
mov eax, 3          ; }
mov ebx, 1          ; }
mov ecx, data       ; } System_read call
mov edx, len        ; }
int 80h             ; }

mov ebp, 1

setup:                  ; This section sets up the registers ready for looping 
mov [other], ebp

loop:                   ; This section loops, printing out from zero to the number given
mov eax, 4
mov ebx, 1
mov ecx, [other]
mov edx, len
int 80h

exit:                   ; Exits the program
mov eax, 1          ; }
mov ebx, 0          ; } System_exit call
int 80h             ; }

當我在KDBG上逐步執行它時,它會返回一些錯誤。 它接收到中斷和分段錯誤,盡管我不知道在哪里。 我不確定為什么會這樣,因為當我在Geany中運行它時,它最后會返回0值,並且運行時不會出錯。 為什么不起作用?

提前致謝

注意:此代碼不會循環。 還沒結束 它所要做的就是打印數字1。

當您打印時,您正在調用mov ecx, [other] 這將查看存儲在其他地址中的地址,並跟隨該地址獲取存儲在該地址中的所有內容。 問題在於此系統調用期望ecx中的地址,而不是值。

如果您叫mov ecx, other則調用mov ecx, other ,則ecx將擁有other的地址,並且能夠轉到該地址並打印其中的內容。

您這里還有另一個問題:當您打印存儲在other的數字時,它將把它轉換為ascii值。 因此,例如,當您嘗試打印1而不是打印數字1時,它將打印ascii 1(它恰好是標題字符的開始;您不想打印的內容)。 如果要打印數字,請添加'0' (字符“ 0”)。

編輯:另一件事,當您閱讀時,您正在將1傳遞給ebx。 1是STDOUT。 您想要的是STDIN為0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM