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

str2num、scan、2つのマクロは最終的にこうなった。」記事へのコメント

  • いや、最終版に落ちるの早すぎ。もっと努力せよ。

    str2num macro string:REQ
    K/ecode>
    というこれを
    <ecode>
    str2num macro string:REQ, base:=10
    K/ecode>
    と書き直す。その上で
    <ecode>
                ; resに10をかける
                mov eax, res
                mov ebx, 10

    という部分を

                ; resに 底 をかける
                mov eax, res
                mov ebx, base

    --
    fjの教祖様
    • >str2num macro string:REQ, base:=10

      str2num macro string:REQ, base:=<10>
      じゃないとダメかも。
      もしかしたら、バージョンによってエラーは出ないのかもしれませんが、とりあえず<>で囲んでおいたほうが良いかと。


      >実は MASM で base が 2,3,4,5,6,7,8,9,10 のどれかであることをチェックするのは意外と面倒なので省略。

      あまり気にしたこと無いけど、10 で進数取れませんかね?

      .IF eax >= 10

      と書くと、eax が現在の .RADIX で一桁で表現できる数値の範囲外か判定できるかと。
      (ただ、ASSUME eax:SDWORD されていると (DWORD PTR eax) >= 10 と書かないとダメですが)
      • .RADIX は値を設定したり開放したりが面倒ですよね。
        いままでn進数だったのを一時的に16進数でチェックして、再びn進数に戻す…なんてことができない。

        そのニーズが出た段階で、私はcygwin の m4 + as + gcc -mingw に逃げてしまいます(^^;)。
        # MASM より古いけれど、m4 の方がマクロとして高機能。
        # m4 があるなら MASMよりも「マクロ機能のない」asの方が快適。

        --
        fjの教祖様
        • いや、っていうか、なぜ、.RADIX で変更したものを戻したりとかする必要があるのか良く分からないのですが…
          そもそも、.RADIX を変更するシーンってどういうものですか?
          • うーわー、面倒な質問を初心者の日記で…。

            以下の説明に出てくる文法の多くは MASM には存在しない文法です。
            という注意書きを最初に書かなくちゃいけないじゃないか。

            というわけで、MASMにはない文法のお話。MASMでは実装できません。

            .

            たとえば。Express_RADIX()という命令があるとしましょう。Express_RADIX(val, base)のように使い、val は「数値表現」、base は基数を『現在の基数で』表したものとします。
            # つまり val はマクロにとっては文字列であって、『現在の基数』の影響を受けない。

            compare_2_order   macro   val:REQ, base:=<10>
                 .IF val

            --
            fjの教祖様
            • いや、そもそもアセンブラ上のリテラルとして登場する数値の進数は、BやらOやらTやらHやらを付けて混合表現できるわけで…

              それに .RADIX で変更しなくても、特定数字列を任意真数の数値に変換するマクロを書けば良いし、そんなのとても簡単ですよ?
              それをわざわざ不適合な記法の例で MASM はだめだというのなら、他の言語だって同じですよね?
              親コメント

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

処理中...