어셈블리 언어에서 those video tutorials을 팔로우하고 있습니다. 기본적으로 "hello world"예제를 사용하려고합니다.간단한 어셈블리 syscall이 작동하지 않습니다.
이.data
str:
.ascii "Hello World"
.text
.globl _start
_start:
movl $4, %eax
movl $1, %ebx
movl $str, %ecx
movl $11, %edx
int $0x80
movl $1, %eax
movl $0, %ebx
int $0x80
이 잘 컴파일하지만 난 그것을 실행하면 텍스트가 터미널에 인쇄되지 않은 : 여기 내가있어 것입니다. 나는 내가 뭘 잘못하고 있는지 전혀 모른다. ecx 레지스터에 어떤 값을 지정해도 아무런 차이가 없지만 아무 일도 일어나지 않습니다.
또 다른 질문, int 0x80 명령어를 호출 할 때 syscall이 어떻게 작동합니까? 일부 데이터는 레지스터로 옮겨졌지만 시스템 콜이되면 그 값을 "사용"하지 않습니다. 그것은 그것의 자신에 그 기록기에 이동 된 무슨 얻고 가는가 얻는가? 도움이 될 수
일부 시스템 정보 :
[email protected] ~/dev/asm/tutorial > uname -a
FreeBSD freebsd-9 5.5-RELEASE FreeBSD 5.5-RELEASE #0: Tue May 23 14:58:27 UTC 2006 [email protected]:/usr/obj/usr/src/sys/GENERIC i386
필자의 개인적인 견해는 "hello world", 협약 및 기타 OS 종속 기능을 학습하여 어셈블리를 시작하는 것이 좋지 않다는 것입니다. 필자는 일반적으로 디버거 사용법을 배우고 작은 배열을 요약하는 등 단일 단계로 수행 할 수있는 자체 포함 된 asm 프로그램을 작성하는 것을 권장합니다. 일단 기본 지침에 만족하고 어셈블리가 끝나면 다양한 다른 것들을 쉽게 배울 수 있으므로 시스템 호출이 유용하지 않을 수도 있습니다. 하지만 그건 내 미친 생각이야 :) – Jester