NASM - 循环中的分段错误

时间:2014-02-26 14:08:02

标签: assembly segmentation-fault nasm

我有两个类似的循环,其中我写一个地址到eax然后从eax写入数据段。第一个循环正在工作,第二个循环返回段错误。为什么第二个循环错误而第一个不错!?

section .data
n1: db 1
n2: db 1

[...]

n_1_1:
mov eax,one
mov [n1],eax
jmp DIG2

 n_2_1:
 mov eax,one
 mov [n2],eax        ; segfault
 jmp DISP2

1 个答案:

答案 0 :(得分:2)

db声明字节(8位),这不足以容纳eax(32位)。声明每个变量,使其有足够的空间来容纳您尝试写入/读取的最大值。

例如:

; declare n1 and n2 as doublewords with initial values of 1
n1: dd 1
n2: dd 1   

至于为什么其中一个崩溃而另一个没有崩溃;从您已经展示的代码中可以很难说并且不了解执行环境。但是第二次写入会将1个字节进一步覆盖到未分配的空间(通过它的外观),这可能足以使它崩溃,即使第一次写入没有导致崩溃。