アセンブリ コードを使用したプログラミングに近いハードウェアは初めてです。それで私はそれについての本を読んで、NASM アセンブラーのこのサンプル コードを見つけました。
segment .text ;code segment
global main ;must be declared for linker
main: ;tell linker entry point
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
segment .data ;data segment
msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string
そのため、次のコマンドでコンパイルしました。
nasm -f elf64 helloworld.asm
ld -s -o helloworld.exe helloworld.o
アセンブラは問題なくアセンブルでき、エラーも発生しませんが、プログラムは即座にクラッシュします。さまざまなアセンブリ言語について読みましたが、ポイントは、オペレーティング システムではなく、コンパイラごとにアセンブリ コードが異なるということです。