4

誰かが NASAM アセンブリ言語で While ループを記述する方法を説明してください。どのレジスタが関与しているか、どの mov 操作が必要で、どのようにカウンタが保持されているか、私はアセンブリを把握しようとしていますが、最初は少し難しいです.. .

みんなありがとう

ところで:私は取っているコースのためにこの言語を学ぼうとしています

4

3 に答える 3

6

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
于 2012-10-16T14:48:36.500 に答える
0

ループには、開始点 (おそらく便宜上ラベルが付いています)、途中の要素 (ループ本体)、および開始点に戻るための命令が必要です。ジャンプは、特定の条件に基づいてループを終了する条件付きである場合や、別の場所にジャンプしてループを明示的に終了する何かがループ本体にある場合があります。使用するレジスタ、メモリ位置、または命令に特に制限はありませんが、一部の命令セット (x86 や x86-64 など) には、ループを簡単に記述できるように設計された特定の命令があり、ハードコードされた依存関係がある場合があります。特定のレジスタ。ただし、繰り返しになりますが、実際にそれらを使用する必要はありません。

それを除けば、あなたの質問は十分に漠然としていて、追加することはあまりありません。プログラマーが、あなたが書いているCPUの製造元(Intel、AMDなど)のマニュアルを参照していることを除けば、強く推奨される参考文献であり、通常は無料でダウンロードできます。

于 2012-10-16T14:51:22.957 に答える
0

実際、多くのマクロ アセンブラは 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 のみです。)

于 2016-09-08T11:33:46.420 に答える