このCコードをアセンブリ言語に翻訳するのには助けが必要ですが、シンプルに見えますが、翻訳には苦労しました。 (のような基本的な手順を使用して:MOVを、ADD、SUBを、INC、12月、NEG)そのようなアセンブリ言語へのCコード
int k = 0, S = 0;
while (k <= 500)
{
S += k;
k += 5;
}
このCコードをアセンブリ言語に翻訳するのには助けが必要ですが、シンプルに見えますが、翻訳には苦労しました。 (のような基本的な手順を使用して:MOVを、ADD、SUBを、INC、12月、NEG)そのようなアセンブリ言語へのCコード
int k = 0, S = 0;
while (k <= 500)
{
S += k;
k += 5;
}
mov ax,0
mov bx,0
z:
add bx,ax
add ax,5
cmp ax,500
jle z
何かを
これは正しい翻訳ではありません。あなたが書いたのは、** do while **ループです。 OPの質問は** whileループです! –
@SepRolandこれは少なくとも1回は実行されるwhileループでしたので、これを格付けしていればおそらく私はこの完全な信用を与えていました。 – harold
すべてのr値は最初のチェック時の定数です –
あなたは、ヘルプのどのような種類が必要ですか?それのどの部分に問題がありますか?また、どのようなアセンブリ言語ですか?腕? x86-64?ループを維持する必要がありますか、まともなCコンパイラのように '5 * 500'をレジスタに移動できますか? asmの試行を[mcve]として投稿した場合、誰かがあなたのデバッグを手助けするかもしれません。 –
@PeterCordesは25250になるでしょうね。 – harold
ああ、私はそれが 'S + = k'であることを忘れてしまったので、実際にシリーズを合計しています。しかし、まだクローズドフォームの式があります。 https://nzmaths.co.nz/gauss-trick-staff-セミナー。したがって、2つの定数を2つのレジスタに格納する2つのmov即時命令が最善の答えです。 –