インラインアセンブラがよくわからない

仕事中、耳がかゆくなって、内視鏡付き耳掻き という話があったなと思い出す。あらためて検索してみると、イヤスコープ 8,800円 というものが 楽天で売っている。こちらからも 同じ値段で買えるようだけど、どちらも 注文殺到につき、納期 4週間程度だそうだ。うーむ、欲しい気もする。

夕方、テニススクールに行く。レッスン後のゲームが白熱し大満足。夜は今日も、H8/Tinyのプログラムと戯れる。gccのh8/300用インラインアセンブラの書き方がよくわからない。

#define save_flags(x)     asm("stc.b ccr,r2l\n" "\tmov.w r2,%0": "=r" (x))
#define restore_flags(x)  asm("mov.w %0,r2\n" "\tldc.w r2l,ccr" :: "r"  (x))

とか書いてみる。本当は asm(“stc.b ccr,%0″:”=r” (x))と書きたいのだけれど、%0にワードのレジスタが入ってアセンブラでエラーになってしまう。バイトのレジスタにする制約文字(“=r”の部分)がわからない。アセンブラを出力させて調べると、ちゃんと動きそうだけど、r2とか使っていいのだろうか? わからん。夜中の12時過ぎなのに、近所で電動丸のこで木を切っている音がする。うちは、大してうるさくないが、近くの人は大変じゃなかろうか?家でも作ってるのか? 夜中に?U城さんより、イヤースコープは太くて奥までとどかないし、ちょっと暗いという情報がとどく。scope eyeにしようか…とか考える。

Leave a Reply

メールアドレスが公開されることはありません。