2014-02-26 52 views
0

我得到了兩個相似的循環,其中我寫了一個地址到eax,然後從eax寫入數據段。第一個循環正在工作,第二個循環返回一個段錯誤。爲什麼第二個循環錯了,第一個不是!?NASM - 循環中的分段錯誤

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 

回答

2

db聲明一個字節(8位),這是不足以容納eax(32位)。聲明每個變量,使其具有足夠的空間來保存要嘗試寫入/讀取的最大值。

例如:

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

至於爲什麼他們中的一個崩潰和其他沒有;從你展示的代碼很難說,而且不知道執行環境。但是第二次寫入會將1字節進一步覆蓋到未分配的空間中(通過它的外觀),即使第一次寫入不會導致崩潰,也足以使其崩潰。

+0

你是完全正確的!謝謝! :) – user3324099