Menu
Coddy logo textTech

Syscallとは?

CoddyのAssemblyジャーニー「基礎」セクションの一部。レッスン 31/45。

movlea のようなアセンブリ命令を書きました。これらの命令は CPU 上で直接実行されます。しかし、画面への出力、キーボードからの読み取り、プログラムの終了など、CPU だけでは実行できないことを行う必要がある場合はどうすればよいでしょうか?

これらのタスクでは、オペレーティングシステム(このコースではLinux)が必要です。

syscallとは何ですか?

syscall(システムコール)とは、プログラムからオペレーティングシステムへの要求です。OSに何かをしてもらうための方法です。

syscalls が必要な理由:

タスクCPU だけで実行できるか?syscall が必要か?
2つの数値を加算するはいいいえ
レジスタ間でデータを移動するはいいいえ
画面にテキストを表示するいいえはい
キーボード入力を読み取るいいえはい
プログラムを終了するいいえはい
ファイルを開くいいえはい

syscall の仕組み:

  1. syscall 番号raxに入れます(何をしたいのかを OS に伝えます)
  2. 引数を他のレジスタ(rdirsirdxなど)に入れます
  3. syscall命令を実行します
  1. CPUがOSカーネルにジャンプする
  2. OSがリクエストを実行する
  3. OSがプログラムに制御を戻す

たとえ:

syscall は、政府機関に電話をかけるようなものだと考えてください:

手順たとえアセンブリでの処理
1必要なサービスを決めるsyscall 番号を選ぶ(rax に入れる)
2書類に記入するレジスタに引数を入れる
3申請を提出するsyscall を実行する
4政府機関が処理するOS カーネルが処理を行う
5結果を受け取るプログラムが続行する

このコースで学ぶシステムコール:

システムコール番号動作
exit60プログラムを終了する第4章
write1テキストを画面に表示する第5章

今のところ最も重要な syscall: <strong>exit</strong>

exit がなければ、プログラムは永遠に実行され続けるか、クラッシュしてしまいます。あなたが作成するすべてのプログラムは、exit syscall で終了しなければなりません。

mov rax, 60    ; syscall number for exit
mov rdi, 0     ; exit code (0 = success)
syscall        ; ask the OS to exit

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: Assemblyプレイグラウンド