誰かが NASAM アセンブリ言語で While ループを記述する方法を説明してください。どのレジスタが関与しているか、どの mov 操作が必要で、どのようにカウンタが保持されているか、私はアセンブリを把握しようとしていますが、最初は少し難しいです.. .
みんなありがとう
ところで:私は取っているコースのためにこの言語を学ぼうとしています
x86アセンブラーについて質問すると思いますか?アセンブラにはwhileループはありません(アセンブラによっては、そのために特別なマクロを使用できる場合があります)。あなたはあなた自身で構築しなければなりません。次のようなアセンブラコマンドを使用できます
jne, jnz, je, jz, cmp, inc, dec
またはいくつかの特別な古いコマンド
jcxz, loop
例えば:
mov ecx,255
L1:
dec ecx
jne L1
ret
この例では、レジスタecxの値を0までカウントしてから、ループを終了します。別の例ですが、上記にカウントされます。
mov ecx,0
L2:
inc ecx
cmp ecx, 255
jne L2
ret
ループには、開始点 (おそらく便宜上ラベルが付いています)、途中の要素 (ループ本体)、および開始点に戻るための命令が必要です。ジャンプは、特定の条件に基づいてループを終了する条件付きである場合や、別の場所にジャンプしてループを明示的に終了する何かがループ本体にある場合があります。使用するレジスタ、メモリ位置、または命令に特に制限はありませんが、一部の命令セット (x86 や x86-64 など) には、ループを簡単に記述できるように設計された特定の命令があり、ハードコードされた依存関係がある場合があります。特定のレジスタ。ただし、繰り返しになりますが、実際にそれらを使用する必要はありません。
それを除けば、あなたの質問は十分に漠然としていて、追加することはあまりありません。プログラマーが、あなたが書いているCPUの製造元(Intel、AMDなど)のマニュアルを参照していることを除けば、強く推奨される参考文献であり、通常は無料でダウンロードできます。
実際、多くのマクロ アセンブラは WHILE マクロをサポートしています。
http://www.oopweb.com/Assembly/Documents/ArtOfAssembly/Volume/Chapter_8/CH08-9.html#HEADING9-90
以下は、70 年代に Motorola によって作成された 6809 コードです。
WHILE B,GT,(0,Y)
ORA B,X
DECB
ENDWH
(明確にするために、そこで使用される「実際の」6809 オペコードは ORA と DECB のみです。)