アセンブリで世界のナベアツを実装した話

はじめに

Advent Calender

この記事はSPC同好会 Advent Calendar 2017の2日目の記事です。

adventar.org

うちのとある講義のお話

うちの学校のとある講義で今年から、プログラミング初心者とそれ以外を分ける任意課題として、世界のナベアツ(カウントをして3の倍数と3のつく文字がカウントされたらボケる)を実装するという課題が出ました。

それに対して自分は…

私はPythonで書いて提出したのですが、後にネタが欲しい(切実)という理由と、アセンブリの勉強が欲しいという理由で、アセンブリ(nasm)でコードを書くことにしました。

やったこと

大体のことはコミットログを見るとわかると思います。

Hello Worldを出力する

アセンブリから直接?

最初はアセンブリから直接、hello worldを表示させるスクリプトを以下の文献を参考に作りました。 dqn.sakusakutto.jp

printf関数を使う

数値と文字を同時に表示させたかったので、printf関数を使うことにしました。 その時のメモを以下のQiitaにまとめています。

qiita.com

カウントをする

次にカウントを実装しました。 その時のメモもQiitaにまとめています。

qiita.com

3の倍数と3の付く数字でボケるところを実装する

次にボケるかの判定と、ボケるところを実装しました。

完成品

github.com

結果・感想

結果・感想は以下の通りです。

  • アセンブリ初心者でも書けた
  • printf関数を自分で実装したかった
  • もっと効率化できなかったのだろうか…

最後に

とりあえず、作品として未実装な改善点が出てくるものの、学習として考えれば、GDBアセンブリと仲良く慣れた良かったのではないかと思います。

これからアセンブリしたい方!ナベアツ書くといいですよ!