アセンブラを勉強しよう
■ このスレッドは過去ログ倉庫に格納されています
0650結論は最後にw
2009/01/17(土) 09:26:4816進数に慣れておく必要があるな。
11はb(16)となる。
つまり、mov bx, bで11を代入しているわけだ。
他を見てないのだけど、一応C風に書き直すとこうなる。
ax = 0;
bx = 11;
do {
ax += bx;
ax += bx;
--ax;
--bx;
} while (bx != 0);
これを更に書き直すとこう。
ax = 0;
bx = 11;
do {
ax += 2 * bx - 1;
--bx;
} while (bx != 0);
これを展開すると、
ax = (2 * 11 - 1) + (2 * 10 - 1) + ... + (2 * 1 - 1);
となって、
ax = 21 + 19 + ... + 1;
となり、これは当然121になる。
つまり、奇数列の初項からの部分和が平方数になることを利用しているわけだ。
要は8の2乗にしたいのなら、単純にmov bx, 8でいい。
■ このスレッドは過去ログ倉庫に格納されています