>>277
アセンブラの話の前に
A0が2.5V以下になるとリセットされるのはRSTDSBLヒューズがプログラムされてないだろ
そもそもGPIOポートじゃなくてマイコンのRESETピンになったままだ
Digisparkは専用ブートローダーが入ってるから書込みにRESETピンを必要としないし
ヒューズでRESETピンは殺されてGPIOになっているはずだ、純正品ならね
基板だけパクってブートローダーだけ書いてヒューズが適当なのは中華クローンの特徴
きさまクローンを使っているな!?(別に悪い事じゃないがw)
ICSPライタ(別のArduinoでも良いしUSBシリアルでもいい)でヒューズ設定をちゃんとすれば中華クローンでもA0もちゃんと使えるぞ

んでアセンブラの話
sbi A,bはIOレジスタの任意ビットを1にする命令でAがアドレスでbがビットでどっちも即値
これのビット位置がレジスタに入ってるとすると、その値が例えばsbiのbで4だったらレジスタの値が4(0x04)なのか0b00010000(0x10)なのかでちょっと変わるが
基本的には対象のIOレジスタの値を汎用レジスタに読込してORで該当部分を1にしてIOレジスタに書き戻すっていう処理になる
sbiが使えるアドレス相手なら命令的には in → or → out で出来る
もし↑で書いたビット位置を示す十進の値がレジスタに入ってるならORする前にビット位置にしてやらんといかんが…

注意するべきなのは汎用レジスタってのは有限で色んな事に使われてるし使い方にある程度のルールがある
in命令で読み込む先の汎用レジスタがそのタイミングで使っていいものかどうかをよく確認しないとそれ以降のプログラムがめちゃくちゃになる可能性がある
基本的にはコンパイラは最低限のレジスタしか確保しないし(当然だが)その後即値が入るとか演算結果が入るとかで値が上書きされる奴を使う事になる
レジスタの使用状況が一切わからないもしくは汎用レジスタの値どれも破壊したくない場合は
inの前にpushを入れてoutのあとにpopを入れてもともとの値を保存・復帰してやったりしないといけない(一時的にスタックメモリ(=RAM)に送る動作)