の呟きは 13
- (UPD ) #
RustのClippyさんがイラっとくる指摘をしてきた
clippy::map_entryというやつ
mutable borrowがあるから
わざわざcontains_keyとinsertを分離して書いてるのにentry使えとか言ってくる
言われたままentryを使うとmutable borrowd激おこしてくる
イラっとくるcontains_keyの結果をletバインドしてからifでくくってやると何も言わなくなるの草
さて、問題は
キャスル2で
文字列から整数への変換処理のコードが
脳内にないことだがATOI START
XOR GR0,GR0 ; 戻り値 GR0
RET
SLEN DC 5
SBUF DC '-1234'
END
さて、、1文字目が符号かどうかのチェックが必要
+か-か- (UPD ) #
シフトではオーバーフロー検知できないんだよね・・・送り出された最後のビットがOFに入るから、2以上のシフトで溢れても最後のビットがたまたま0だったら、検知できない・・・
10倍は
3ビットシフトと1ビットシフトの和だから
上位3ビットのいずれかが立ってれば3ビットシフト時にオーバーフロー?
まぁその後の和でもオーバーフローしうるけど上位3ビットに対してANDした上で
JNZでオーバーフローは検知できそう、か?- (UPD ) #
上位3ビットにビットが立ってる
は言い換えると、0x1FFF より大きい数字、なのでCPLが使えて
仮に
GR0 これまで読み込んだ数値の上位桁分
GR1 読み込んだ数字を数値にしたもの (GR2 - '0')
として
CPL GR0,=#1FFF
JPL OVERFLOW
LD GR3,GR0
SLL GR3,=3
ADDL GR3,GR0
JOV OVERFLOW
ADDL GR3,GR0
JOV OVERFLOW
ADDL GR3,GR1
JOV OVERFLOW
LD GR0,GR3
または
CPL GR0,=#1FFF
JPL OVERFLOW
LD GR3,GR0
SLL GR3,=3
LD GR4,GR0
SLL GR4,=1
ADDL GR3,GR4
JNZ OVERFLOW
ADDL GR3,GR1
JNZ OVERFLOW
LD GR0,GR3
こんな感じ?結構な行数になるから
キャスル2のコード自体をparseできるようにしないと
全部を内部形式で記述するのはしんどすぎるparseを書くのがしんどすぎる
(omitted)
すごい人はすごいんだなあ・・・と感じた
shower time