아주 간단한 어셈블리 프로그램을 실행하려고합니다.하지만 내가하는 일이 무엇이든간에 segfaults를 얻는 것처럼 보입니다.NASM : MOV ECX의 SegFault
여기 내 코드입니다
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에 세그먼트 폴트가 발생하지만, 작동해야 나에게 분명한 것 같다 ('A'는 리눅스 시스템에서 인쇄해야합니다).
나는 그것을 거의 없애 버렸고, 여전히 세그 폴트합니다.
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
그것이 내가 줄 바꿈이나 탭에 사용하는 기호를 함께 할 수있다 가능한가 :
section .data
msg db "hello"
section .text
global _start
_start:
mov EAX,1
나는이 성공적으로 실행 한? 내가 자바에서 어셈블리를 생성하고 탭을 위해 \ t를 사용하고 새로운 라인을 위해 \ n을 사용한다. (그래서 공백이 너무 나쁘지 않다.)
나는 NASM을 사용 중이며 여기에서 실행 중이다 : https://www.tutorialspoint.com/compile_assembly_online.php
감사합니다
간단한 예제에서 프로그램을 종료하려면 _EXIT_ syscall을 호출해야합니다. –
쓸데없이 시스템 종료를 추가했습니다. –
내 게시물의 링크를 사용하여 컴파일 및 실행 중이며 정확한 OS는 무엇인지 모르지만 Linux 상자입니다. –