Lazarusで学べるx86アセンブラ
作ったプログラムのデバッグをするとき、アセンブラが読めると便利です。 少しだけ高速化したい時 ObjectPascalで表現出来ない数式がある時 インラインアセンブラは強力な武器になります。そんな目的に実はDelphiやFreePascalは便利です。デバッガーもサポートしてくれます。単体のアセンブラで試すのは色々と事前準備から必要ですからね。アセンブラの表記や機械語そのものの知識は検索すれば得られるので検索に必要な用語を学ぶ程度のお話となります。逆アセンブラを見る1 見たいソースのブレークポイントを設定します。 ⇒行番号表示の左側をマウスクリックするか F52 実行した後そこでブレークして表示されないなら 表示→デバッグ表示→アセンブラ 試しに pascalには shr はあるのに asrが無いので 除算で代用したのでInt32((Int64(x) * Int64(y)) div $1000000)のアセンブラ結果 movslq -0x8(%rbp),%rax ;//32bit>64bit符号拡張
movslq -0x10(%rbp),%rdx ;
imul %rdx,%rax ;//64bitx64bit->rAX+(rDX shl 64)
mov %rax,%rdx ;
sar $0x3f,%rdx ;//MSBで63bitを埋める
and $0xffffff,%rdx ;//結果、負数の時だけ $ffffff
add
0