DOS 시스템 호출을하는 16 비트 코드를 작성하는 이유는 무엇입니까? 자신의 OS에 해당하는 asm을 작성하는 방법을 알고 싶다면 일부 C 코드에서 "gcc -S
"으로 생성 된 코드를 살펴보십시오 (이 방법으로 생성 된 코드는 피연산자가 반대로되어 어셈블됩니다. nasm
대신 as
으로 표시됩니다.
이 코드의 기능을 알고 있습니까? 그것은이 같은 날에 읽는 : 나는 here를 참조 내용에 따라, exit(0)
mov bx, 15
mov ax, 4c00
int 21h
어느 :이 코드는 동일합니다 같은
ax = 5
bx = 10
ax += bx
bx = 15
ax += bx
ax = 0x4c00
int 21h
이 보인다.
bx
을 변경할 필요가 없습니다.
하지만. Mac OS X은 MS-DOS가 아니고, 도스 API에 대해 모르거나, .COM
파일을 실행할 수 없기 때문에, 심지어는 16 비트를 실행할 수 있다는 것을 알지 못했기 때문에 암호. nasm의 -f elf
옵션을보고 싶은데 ax
대신 eax
과 같은 레지스터를 사용하고 싶을 것입니다.
내가 OS X에서 어셈블리 프로그래밍을하지했지만, 당신은 이론적으로 같은 것을 할 수있는 그런 다음
extern exit
global main
main:
push dword 0
call exit
; This will never get called, but hey...
add esp, 4
xor eax, eax
ret
:이 C 라이브러리에 의존 물론
nasm -f elf foo.asm -o foo.o
ld -o foo foo.o -lc
을, 너는 그러고 싶지 않을지도 모른다. 필자는 Mac에서 syscall 인터페이스가 어떤 모습인지 모르기 때문에 "전체"버전을 생략했습니다. 많은 플랫폼에서 엔트리 포인트는 _start
이며, 시스템 콜은 int 80h
또는 sysenter
입니다.
디버깅은 ... GDB를 제안합니다. stepi
을 사용하여 단일 명령으로 진행할 수 있으며 info registers
명령은 레지스터 상태를 덤프합니다. disassemble
명령도 유용합니다.
업데이트 : Mac OS X이 ELF를 사용한다고 생각하지 않습니다. 글쎄요 ... 내가 썼던 대부분은 여전히 적용됩니다.:-)
제가 사용하는 책은 주로 DOS 용으로 작성된 것으로 생각합니다. Mac에서 어떻게 사용할 수 있는지 확인해 보았습니다. 어쨌든 덕분에 도움이되었습니다. – itsaboutcode
나는 도스 박스를 http://www.dosbox.com/와 함께 사용하는 것이 좋습니다. 도스 컴파일러와 DOS 디버거도 필요합니다. –
OS X은 elf가 아닌 mach-o 형식을 사용합니다. =) –