【发布时间】:2011-03-18 22:13:50
【问题描述】:
我正在尝试编写一个简单的 NASM 程序,但我似乎不知道如何在其中编写一个 for 循环。使用以下代码,我得到一个分段错误。下面的代码应该打印出“Hello world!”后面是从 1 到 100 的所有数字。
section .data
message: db 'Hello world!', 10
messageLength: equ $-message
section .text
global _start
_start:
mov eax, 4
mov ebx, 1
mov ecx, message
mov edx, messageLength
int 80h
mov ecx, 0
jmp loop
mov eax, 1
mov ebx, 0
int 80h
loop:
mov eax, 4
mov ebx, 1
mov edx, 1
int 80h
add ecx, 1
cmp ecx, 100
jl loop
【问题讨论】:
-
你试过在 gdb 下单步执行吗?
-
问题可能不在循环中,而在里面的打印语句中。确保您可以打印“Hello world!”和 1 在循环之前。 (我无法在没有参考的情况下阅读汇编,所以尽其所能:))
-
@Paul 我不知道怎么做,所以没有。 @Eugene 我尝试打印出 1,它给了我一个分段错误
-
在深入编程之前学习如何使用 gdb 可能是个好主意 - 正如您现在看到的,即使是非常简单的程序也需要调试。只需输入
gdb ./my_program即可开始使用(当然,my_program是您的可执行文件的名称)。