teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

独自コメントをつけてコードを追記

2018/03/04 16:37

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -73,4 +73,23 @@
73
73
  mov wMargine, eax // wMargine = width % 4;
74
74
  jz no_margin // if (eax == 0) goto no_margin;
75
75
  ```
76
- このような「無駄」はアセンブリ言語に限った事ではありません。言い換えれば、漫然とコードを書くなら、どんな言語を使っても無駄な計算をしたり効率が悪かったりするという戒めになるでしょう。
76
+ このような「無駄」はアセンブリ言語に限った事ではありません。言い換えれば、漫然とコードを書くなら、どんな言語を使っても無駄な計算をしたり効率が悪かったりするという戒めになるでしょう。
77
+
78
+ ---
79
+ > wMargine = 4 - ((width * 3) % 4); // この計算は何か?
80
+
81
+ 念の為、この部分はどういうコードであったか。C言語風コメントをつけておきます。
82
+ ```
83
+ xor edx, edx // edx = 0; (削除可能な命令)
84
+
85
+ mov eax, width // eax = width;
86
+ mov ebx, 3 // ebx = 3;
87
+ mul ebx // edx:eax = eax * ebx; 即ち edx:eax = width * 3;
88
+
89
+ and eax, 3 // eax &= 3; は eax %= 4; と同じ
90
+
91
+ mov ebx, 4 // ebx = 4;
92
+ sub ebx, eax // ebx -= eax; 即ち ebx = 4 - ((width * 3) % 4);
93
+
94
+ mov wMargine, ebx // wMargine = ebx;
95
+ ```