Menu
Coddy logo textTech

Syscallとは?

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

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

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

syscallとは何ですか?

syscall(システムコール)は、プログラムからオペレーティングシステムへのリクエストです。これは、OSに何かを実行するように依頼する方法です。

システムコールが必要な理由:

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

システムコールの仕組み:

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

比喩:

システムコール(syscall)を、役所に電話をかけるようなものだと考えてみましょう。

ステップ比喩アセンブリでは
1必要なサービスを決めるシステムコール番号を選択する(raxに入れる)
2書類に記入する引数をレジスタに入れる
3申請書を提出するsyscallを実行する
4役所が処理を行うOSカーネルが作業を行う
5結果を受け取るプログラムが続行される

このコースで学習するシステムコール:

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

現時点で最も重要なシステムコール:<strong>exit</strong>

exit がないと、プログラムは永遠に実行され続けるか、クラッシュしてしまいます。作成するすべてのプログラムは、exit システムコールで終了する必要があります。

mov rax, 60    ; 終了用のシステムコール番号
mov rdi, 0     ; 終了コード (0 = 成功)
syscall        ; OSに終了を要求する

自分で試してみよう

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

quiz icon腕試し

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

基礎のすべてのレッスン