問候, 我正在linux下編寫NASM,我遇到了以下問題:我必須編寫一個簡單的程序,用戶必須輸入字符串,並將其傳遞給函數返回它的大小:NASM分段錯誤問題
的代碼是:
%include "macros.inc"
section .data
prompt1 db "Enter string: ",0
prompt1len equ $-prompt1
prompt2 db "The size of string is: ",0
prompt2len equ $-prompt2
section .bss
string resb 20
section .text
global _start
_start: str_output prompt1len,prompt1
str_input string
mov ebx,string
call func
str_output prompt2len,prompt2
output eax
exit 0
func:
xor eax,eax
et **cmp byte [ebx],0h**
je end
inc eax
inc ebx
jmp et
end dec eax
ret
這裏是宏文件:
%macro exit 1
mov eax,1
mov ebx,%1
int 80h
%endmacro
%macro int_input 1
mov eax,3
mov ebx,0
mov ecx,%1
mov edx,1
int 80h
and eax,0Fh
mov %1,eax
%endmacro
%macro str_input 1
mov eax,3
mov ebx,1
mov ecx,%1
mov edx,20
int 80h
% endmacro
%macro output 1
mov eax,%1
or eax,30h
mov %1,eax
mov eax,4
mov ebx,1
mov ecx,%1
mov edx,1
int 80h
%endmacro
%macro str_output 2+
mov eax,4
mov ebx,1
mov ecx,%2
mov edx,%1
int 80h
%endmacro
我調試的程序,問題是在指令CMP字節[EB x],0h,因爲當我啓動程序時,會在str_input之後打印出分段錯誤。我沒有看到任何錯誤,但也許我誤以爲地址。調用func
前將
你在用ebx做什麼? [ebx]意味着訪問內存中的數據,其地址在ebx ?,我沒有看到你在ebx中加載地址..如果我錯了,請糾正我的錯誤 – Zimbabao 2011-03-27 17:36:00
你是如何編譯的?什麼命令行? – BlackBear 2011-03-27 17:37:42
@津巴布奧:是的,他在調用func之前加載ebx – BlackBear 2011-03-27 17:38:15