为了好玩,我正尝试编写一个简单的 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
最佳答案
在跳转到循环之前,您将 0 分配给 ECX...
这意味着您的程序将尝试打印位于内存地址 0 的字符串,您不拥有该字符串,因此出现段错误...
请记住,您正在处理内存地址。 将 10 分配给寄存器值实际上不会打印 10,在 ASCII 中...这只是意味着您正在获取内存地址 10...
关于linux - 尝试在 Linux 上的 NASM 中编写 for 循环时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5358355/