11

へよ、

大学での私のクラスでは、アセンブリでプログラムを作成する必要があります。私は今まで、C の使いやすさを真に評価したことはありませんでした。

さて、アセンブリでプログラムするとき、while/for/if ループと条件付きのラベルを作成する必要があることがよくあります。

SKIP:
    ...
COMP:ADD R1, R1, #0 ;Check for equality
     BRZ WHILEEND
     ...            ;code inside the while loop
     JMP COMP       ;Return to while loop
WHILEEND:
     ...

したがって、この while ループ (例) では、サブルーチンに 1 つのラベルを使用し、ループ自体にさらに 2 つのラベルを使用しました。アセンブリで実行しているすべてのループとブランチに適切なラベル名を使い果たしました。変化に富んだわかりやすいものにするために、皆さんはどうしていますか?

4

2 に答える 2

14

ほとんどのアセンブラはローカルラベルを許可します:

routine_1:
  ...
.loop:
  ...
  jne .loop

routine_2:
  ...
.loop:
  ...
  jne .loop
  ...
  jmp routine_1.loop

または、同じラベル名を再利用して「最も近い後方」または「最も近い前方」を参照できる匿名ラベル:

routine_1:
  ...
@@:
  ...
  jne @b

routine_2:
  ...
@@:
  ...
  jne @b

(後方の場合はb )

アセンブラでどちらもサポートされていない場合は、すべてのローカルラベルの前に問題のルーチンのラベルを付けることができると思います。

routine_1:
  ...
routine_1.loop:
  ...
  jne routine_1.loop
于 2010-03-09T01:57:11.047 に答える
3

多くのアセンブラでは、同じ(通常は数値の)名前で複数のラベルを作成できます。この機能を使用すると、ループのラベルを再利用jmp 1fして、最も近いラベルに前方にジャンプしたり、最も近いラベルに後方にジャンプし1たりできます。jmp 1b1

于 2010-03-09T01:51:22.153 に答える