KDOC 145: 見てわかるGoアセンブリの違い

この文書のステータス

  • 作成
    • 2024-05-01 貴島
  • レビュー
    • 2024-05-06 貴島

概要

Cが出力するアセンブリはだいたいわかってきた。自信がついてきたので、以前全然わからなかったGoアセンブリも読んでみたところ、ぜんぜん読めなかった。違うと気づいた部分をまとめる。疑問点のメモで、とくに解決はしない。

違い

少なくとも、試したコードから見える違い。

↓Goの、RISC-V向けアセンブリ。

  • 命令が大文字
  • 見慣れない中点記号
  • ラベル(main: みたいな)がない
  • LEAF|NOFRAME|ABIInternal といった謎の文字がつく
  • FUNCDATA の行は謎
  • $0-8 は引数のようだ
  • 関数は TEXT, FUNCDATA で始まる形に置き換えられる
  • レジスタは X10, X0, X1 とか。伝統的なレジスタ名は出てこない
  • このコード例だからだろうが、計算結果しかアセンブリに現れない。乗算命令 mul は出てこない。先に計算してそう
  • 馴染みのあるのは MOV くらい

関連

Backlinks