2010-03-09 99 views
8

Heyo,组装中用尽标签名称

我在大学的课程让我们在大会上编写程序。直到现在,我从未真正意识到C的易用性。

现在,当我在汇编程序,我经常做,而/为/,如果循环和条件与标签,例如:

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个循环本身。我已经用完了所有我正在组装的循环和分支的良好标签名称,你们如何保持它的多样性和描述性?

回答

11

大多数编译器允许当地标签:

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 
2

在许多汇编程序中,您可以使用相同(通常是数字)名称来制作多个标签。该功能可让您重复使用您的循环标签,使用jmp 1f跳转至最近的标签1jmp 1b,以跳回最近的标签1

+0

这将是很好的,但我的汇编器是一个初学者一(LC3),使韩元没有工作。但我想我可以只使用泛型名称'while1''wend1''if1''ifend2'等etc ... – user289293 2010-03-09 02:09:21

+0

我试图找出这些'b'和'f'后缀代表什么。我花了近一个小时来做​​到这一点。最后,我在这里得到了我的答案。非常感谢 :) – dirtybit 2012-03-26 02:47:42