by shigemk2

当面は技術的なことしか書かない

C言語のプログラムをアセンブル→オブジェクトファイル出力→リンクで実行する

適当な概要

gccでアセンブラを出力しそれを実行ファイルにする

inc・dec命令

# アセンブリ出力
$ gcc -S translate.c
# アセンブル      
$ as -o translate.o translate.s
# リンク
$ gcc -o translate translate.o 
$ ./translate 

実行環境は、x86_64のFedora20

何がしたいかというと、アセンブラを見たかった。それだけ。

なお、Oで最適化、gでデバッグ情報の付与。

逆アセなどしてみて機械語を眺めてみたりしての感想

translate.c

$ gcc -g -c translate.c -o translate.o
$ objdump -d -M intel translate.o 
movsxd rdx,eax
movzx  edx,BYTE PTR [rdx+0x0]
add    edx,0x1
cdqe   
mov    BYTE PTR [rax+0x0],dl
mov    eax,DWORD PTR [rip+0x0]

こいつをinc命令1つで処理してのけるアセンブリに対する知識と技量がなかった。 そもそもこれを1行でまとめるのがincなのかどうかもわからなかった。

糖衣構文

プログラミング言語において、読み書きのしやすさのために導入される構文

スケーラブルで関数型でオブジェクト指向なScala入門(2):Scalaプログラミングで知っておきたい基本構文まとめ (2/2) - @IT

scala> a2(1) //値の取得
res31: Int = 2
 
scala> a2.apply(1) //値の取得
res32: Int = 2
 
scala> a2(1) = 10 //値の設定
 
scala> a2.update(1,10) //値の設定

applyやらupdateが()で書けたりできる。これがシンタックスシュガー。