質問: 以下のURL先のプログラムはカラー画像をモノクロに画像に変換するためのプログラムです。 質問したいことは以下のアセンブリプログラムのダミーデータであるwMargineを求める計算部分のアセンブリプログラムに関してです。 ``` mov eax, width /* 幅 */ mov ebx, 3 /* 3 */ mul ebx /* 幅 x 3 */ and eax, 0x00000003 /* %4 */ mov ebx, 4 /* 4 */ sub ebx, eax mov wMargine, ebx ``` 以前の質問の回答`` ではダミーデータを求める計算式は4-(width*3)%4でも問題ないとのことですが、1ピクセルが3バイトでありwidth自体がRGB3バイトを含んでいるのだとしたらwidth*3と書いてしますと、RGBを含んでいるwidthと掛けたRGBが重複してしまう気がするのですが、 個人的には本を読む限り、width=(n個の横のピクセル)*(3バイト/1ピクセル)を表しているように思えます。width/4の4はRGBが3バイト故に4でバイト単位でwidthを割っており、4バイトで高速化を考えているため、widthの余りのとなった1~3バイト数のRGBはダミーデータとして扱われる。 以上のことからアセンブリプログラム内にwidthをどのように扱うか定義されていないところを見ると、 ダミーデータを求める計算式はwidth/4と書くのが正しいものであり、本に書いてある4-(width*3)%4の方はたまたま、3を掛けたらwidth/4と同じダミーデータのバイト数を得られただけだと考えています。 なので、「実は乗算も減算も不要、即ちあの部分は無駄なコードなのです」に関しては、無駄ではなく、間違ったコードなのではないかと考えています。 もしかしたら作者なりに都合よくなるようにするために書いたコードなのかもしれませんが。 皆様はどのように考えるかを解答していただけると大変ありがたいです。 どうかよろしくお願いいたします。
回答: 元質問も長文なのであまり読んでませんが、そもそもそのコードはどこからもってきたもんなんでしょうか。 それがどういう意図があるのかというのはそれこそ作者に聞いてこないと、他人がいくら議論したところで机上の空論にしかならないと思いますが。