パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

MASMで、文字列を数値に置換するマクロ」記事へのコメント

  • MASM 使ったのは 20年以上前のことだから、 何が書いてあるのか分からないところがいっぱいだけど、

    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;
    }

    • 全く同感です。

      それに付け加えて、マクロなのに、どうしてリテラルとして文字列を渡してランタイム変換するのか謎です。

      単に、

      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


      で良いのでは?
      • by KMY (41075) on 2010年11月05日 7時51分 (#1853306) 日記

        movzxというニモニックがあったんですね。[]という演算子も初耳でした。
        こちらの勉強不足でした。
        ご指摘ありがとうございます。

        今後も懲りずにここにいろいろなコードを書くと思いますので、
        その時もどなたかよろしくお願いします。

        --
        By KMY
        親コメント

ナニゲにアレゲなのは、ナニゲなアレゲ -- アレゲ研究家

処理中...