アセンブリ超入門
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

アセンブリ超入門

2013-12-25 22:08
  • 2

Cって結局アセンブリだろうから、

インラインで書いてあろうが、.cと.asm混合だろうが、
読めるようになりたいよね? ね!?


という訳で軽くアセンブリ入門したのでメモ。
本当に初心者で、まだアセンブリわかんなくて興味ある程度の人向け。


有名な2大?アセンブリ言語にGASとNASMってのがあるらしい。
GASは拡張子.sでこれはgccでCをビルドする時に生成されているアセンブリそのまんまらしく、

gcc -S hello.c

でCで書いたコードのアセンブリバージョンが出力される。

#include <stdio.h>

void main(){
printf("HELLO \n");
}


.file "hello.c"
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "HELLO \12\0"
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
LFB7:
.cfi_startproc....※続く


しっ知ってたし。。(゚o゚;;、すっ、すごくなんかないし。。



Windows用バイナリのビルド方法(gccインスコ済、win7homepresp1-64bit環境で確認)

as -o hello.o hello.s
gcc hello.o
a
↑(実行)


NASMは拡張し.asmで、インテル系に特化した感じな模様
CPU最適化の処理が書きたかったら、
mmx/sseとかはNASM、ARMはGASで、みたいな対応かな。
global _main
extern _printf

section .text
_main:
push message
call _printf
add esp, 4
ret
message:
db 'Hello, World', 10, 0

Windows用バイナリのビルドは

nasm -fwin32 helloworld.asm
gcc helloworld.obj
a
↑(実行)

サンプルコードがあるサイトは多いけど、
MS-DOSとか、古かったり、リンクをldコマンドでやったりしているのを試したけど、
どうしてもうまくいかなかった。
意外とメンドカッタ


で、GASをCと混合でビルドするには、C側で関数をextern宣言しておく必要があったり、NASMはプロトタイプ宣言?的な記述が必要。

あとeclipse+CDT環境でのビルドを考えないと、
また追々やろう。




広告
×
何だか全然チンプンカンプンだけど、とりあえずメリークリスマス♪
45ヶ月前
×
ご無沙汰していまっしゅ。コメありです~。

すっかりクリスマスなんて事を忘れていましたwww。
メソクソです!!
45ヶ月前
コメントを書く
コメントをするには、
ログインして下さい。