アカウント名:
パスワード:
str2num "54321"
は、
5*10000 + 4*(10000/10) + 3*(1000/10) + 2*(100/10) + 1*(10/10)
という計算している?普通は、
((((0*10 + 5)*10 + 4)*10 + 3)*10 + 2)*10 + 1
とするんだけどなぁ。Cで書けば、
int res = 0;char* s = var;while (*s) { res = res * 10 + (*s - '0'); ++s;}
movzxというニモニックがあったんですね。[]という演算子も初耳でした。こちらの勉強不足でした。ご指摘ありがとうございます。
今後も懲りずにここにいろいろなコードを書くと思いますので、その時もどなたかよろしくお願いします。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall
割り算はいらない。 (スコア:0)
は、
という計算している?普通は、
とするんだけどなぁ。Cで書けば、
Re:割り算はいらない。 (スコア:1)
それに付け加えて、マクロなのに、どうしてリテラルとして文字列を渡してランタイム変換するのか謎です。
単に、
str2num MACRO str:REQ
lea ecx, str
xor eax, eax
.WHILE 1
movzx edx, BYTE PTR [ecx]
inc ecx
.BREAK .IF edx == 0
lea eax, [eax * 4 + eax]
lea eax, [eax * 2 + edx - 30H]
.ENDW
ENDM
で良いのでは?(上のコメントのC言語のコードと同様です)
または、.BREAK の行を、.BREAK .IF (edx < 30H) || (edx > 39H) にしても良いと思います。
"~"形式でも引数を渡したければ、マクロに
IFIDN @SubStr( str, 1, 1 ), <">
mov eax, @SubStr( str, 2, (@SizeStr(str)-2) )
ELSE
~
ENDIF
を追加すれば良いのでは?
(このコードではエラーチェックは甘いですが)
Re:割り算はいらない。 (スコア:1)
movzxというニモニックがあったんですね。[]という演算子も初耳でした。
こちらの勉強不足でした。
ご指摘ありがとうございます。
今後も懲りずにここにいろいろなコードを書くと思いますので、
その時もどなたかよろしくお願いします。
By KMY