[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[OSASK 00055] nask バグ報告


このメールは、以下のOSASK-ML投稿フォームから書き込まれた内容です。
http://osask.marokun.net/form/


お名前: nika

 こんばんは、nikaです。

 先日、naskでのアセンブルで妙な現象の発生を確認したので
報告したいと思います。
  使用しているnask.exeは以下のものです。
ファイルサイズ: 27648
タイムスタンプ: 2004/05/06 17:23

 cmp     byte [ebx + 0], "M"
という命令をアセンブルすると
 80 3B 4D
というバイナリになりますが、定数0を宣言して使うと
違うバイナリが生成されてしまうようです。
場合によってはラベルが宣言されてしまうバグもあるようで
内部が不安定になってしまうようです。
 
  _mcb    equ     0
 cmp     byte [ebx + _mcb], "M"
という命令をアセンブルすると"M"の値が無視されて、
 80 3B 31
というバイナリになってしまいます。
 naskのアセンブル時のその行周辺の.lstを引用します。
いくつかの行が消えているのも分かります。
   309                                          [SECTION .text]
   310 00000207                                         global  _OsaskMain
   311  = 00000000                              _m      equ     0
   312  = 00000000                              _d      equ     0
   313 00000207 80 3B 4D                                cmp     byte [ebx + 0], "M"
   314 0000020A 80 3B 31                                cmp     byte [ebx + _m], "M"
   315 0000020D 80 3B 31 000029F7 80 7B 01 4D                    cmp byte [ebx + _d], "Z"
   316 000029FB 80 7B 01 4D                             cmp     byte [ebx + 1 + _m], "M"
   317 000029FF 80 3B 5A                                cmp     byte [ebx + _m + _d], "Z"
   318 00002A02 80 3B 31                                cmp     byte [ebx + _m], "M"
   319 00002A05 80 3B 31 000015F7 90                             cmp byte [ebx + _d], "Z"
   320 000015F8                                 
   321 000015F8                                 getsignalw: ; シグナルの取得(ウェイト有)

以下は上記のアセンブルソースです。
[SECTION .text]
        global  _OsaskMain
_m      equ     0
_d      equ     0
        cmp     byte [ebx + 0], "M"
        cmp     byte [ebx + _m], "M"
        cmp     byte [ebx + _d], "Z"
        cmp     byte [ebx + 1], "M"
        cmp     byte [ebx + 1 + _m], "M"
        cmp     byte [ebx + _m + _d], "Z"
        cmp     byte [ebx + _m], "M"
        cmp     byte [ebx + _d], "Z"
        nop

getsignalw:	; シグナルの取得(ウェイト有)
(以下省略)


 この場合は定数0を使わなければ問題無いバイナリにアセンブル
されているので、cpp0を通して数値に#defineして使用しています
が、気づかずに使用している方がいるかも知れません。

 それでは。

一覧(今月):     投稿順     スレッド順