某大学生命科学科の僕ですが、今学期は初めて、他学科の授業をひとつだけ受けています。それは何かと言うと、アセンブリ言語。
「エキスパートCプログラミング」などの書籍は読んでいたので、C言語がアセンブリ言語に翻訳されるとき、どのように置き換えられるのか、少々の理解はあるつもりでしたが、実際自分で書いてみるとなると、全く難しい限りです。
やっぱりプログラミング言語の習得なんて、どんなクダらんプログラムであろうと、自分でとりあえず書いてみてナンボですね。
とりあえず、最低限の四則演算の仕方は把握したつもりです。
でも、何か手元で参照するものがなければ全然書けません。
なんとなく書いてみたものを載せてみます。
(9+6)*3/9を計算して、最終的にeaxレジスタに保存。
それを、スタックポインタ上に関数コールの為のスタックフレームを作成した後で、おなじみのprintf関数に渡して出力するコードです。
ふぅ。。。お酒を飲んで疲れたので寝よう。。。
.data L_fmt: .ascii "%d\n\0" .text .globl _main _main: movl $9, %eax # (9 + 6) * 3 / 9 = addl $6, %eax imull $3, %eax movl $9, %ecx idivl %ecx pushl %ebp movl %esp, %ebp subl $8, %esp subl $8, %esp pushl %eax pushl $L_fmt call _printf leave ret