我正在嘗試做一個非常簡單的彙編程序運行,但是我似乎無論我做什麼都會出現段錯誤。NASM:MOV上的SegFault ECX
這裏是我的代碼(應打印「A」在Linux機器上)
section .data
buffer times 50 db 97
pointer db 0
section .text
global _start
_start:
mov ECX , pointer
mov EDX , [buffer + ECX]
mov EAX , 4
mov EBX , 1
mov ECX , EDX
mov EDX , 1
int 0x80
它會導致第一MOV段錯誤,但它似乎明顯,我認爲它應該工作。
我把它減少到幾乎沒有,它仍然segfault。
section .data
msg db "hello"
section .text
global _start
_start:
mov EAX,1
我碰到這樣成功地:
section .text
global _start
_start:
mov ax, 0b
dec ax
sub ax, 11111111b
mov bx, 97
add ax, bx
mov [INVENTORY], ax ; put a in first inventory pos
mov eax, 4
mov ebx, 1
mov ecx, INVENTORY
mov edx, 1
int 0x80
mov ax, [INVENTORY]
add ax, 1
mov [INVENTORY + 1], ax ; put b in second inventory pos
mov [VAR], ax
mov eax, 4
mov ebx, 1
mov ecx, VAR
mov edx, 1
int 0x80
mov eax, 4
mov ebx, 1
mov ecx, '\n'
mov edx, 1
int 0x80
mov eax,1
int 0x80
_newline:
section .data
VAR DW 0
INVENTORY TIMES 8 DW 0
是否有可能,已與我用新行或製表符符號呢?我生成從Java的組件和我使用的標籤和\ n作爲新行(和空格\ t所以它看起來並不太壞
我使用NASM,我在這裏運行它。 https://www.tutorialspoint.com/compile_assembly_online.php
謝謝
在您的簡單示例中,您必須調用_EXIT_ syscall來離開程序。 –
我確實添加了一個EXIT系統調用,無效 –
我使用我的帖子中的鏈接進行編譯和運行,我不確定什麼確切的操作系統,但它是一個Linux機器。 –