私の教授は議会が私のコースのほんの一部ですので、我々は技術的に多くのにもらっていない モジュラス
int k = 0, S = 0;
for (k=0; k<100; k++)
{
if (k%2 == 0)
S += k;
else
S -= k;
}
アセンブリコードには、このCコードを変換するために私に割り当てを与えました部品。私が持っている唯一の問題は、モジュラス部分にあります。私たちは分裂をしただけで、モジュラスの使い方を学んだことはありませんでした。 これは私の知る限り、私の仕事に
MOV CX, 0; counter
MOV AX, 0; This represents S, we haven't learned how to declare variables in assembly, so we use registers instead)
Loop1:
CMP [Haven't done the modulus condition]
JE iftrue
JNE ifwrong
iftrue:
ADD AX, CX
INC CX
CMP CX, 99
JL Loop1
ifwrong:
SUB AX, CX
INC CX
CMP CX, 99
JL Loop1
を持っているとして、あなたは私が第一条件に記入助けることはできますか?比較でモジュラスを使用し、残りが0かどうかをチェックするにはどうすればよいですか?
P.S.私はループ内で条件を行う方法も学んでいないので、iftrue/ifwrongの部分は私の最後の即興の即興です。効率的かどうかはわかりません。その部分をより良い形で行うことができますか?
問題の核心は、 '%2'は'&1'と言うだけでは効率が悪いことです。 =) –
あなたは本当に指示参照を見てください。残りの部分がレジスタに格納されていることがわかります。残りはモジュラスである。 –
ありがとう、しかし私が言ったように、アセンブリは私のコースのほんの一部です。私たちはわずかに3-4のレジスタについてしか教えていません。残りの部分を直接使用することは、私の教授が私のクラスで教えてくれたものではありません。もし私がそれを使うならば、おそらくそれを間違ったものとしてマークするでしょう。ありがたいことに、これは約%2なので、偶数か奇数かを調べるだけです。 Mikeの答えは、私がこの問題に対する許容可能なアプローチを見つけ出すのを助けました。 – Axel1212