2010-03-09 9 views
8

Heyo,Se está quedando sin nombres de etiqueta en el ensamblado

Mi clase en la universidad nos tiene escribiendo programas en ensamblaje. Nunca he apreciado realmente la facilidad de C hasta ahora.

Ahora, cuando programa en el montaje, que a menudo tienen que hacer mientras/para/si bucles y condicionales con etiquetas, por ejemplo:

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

Por lo tanto, en este bucle while (ejemplo) he utilizado 1 etiqueta para la subrutina y 2 más para el bucle en sí. Me he quedado sin nombres de buena etiqueta para todos los bucles y ramas que estoy haciendo en el montaje, ¿qué hacen ustedes para mantenerlo variado y descriptivo?

Respuesta

11

La mayoría de los ensambladores permiten locales etiquetas:

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

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

o etiquetas anónimas donde se puede reutilizar el mismo nombre de marca y referencia "más cercano hacia atrás" o "hacia adelante más cercano":

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

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

(b para al revés)

Si ni se admite en el ensamblador, supongo que se podría prefijar todas las etiquetas locales con la etiqueta de la rutina en cuestión:

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

En muchos ensambladores puede hacer varias etiquetas con el mismo nombre (generalmente numérico). Esa característica le permite reutilizar etiquetas para sus bucles, usando jmp 1f para avanzar a la etiqueta más cercana 1 o jmp 1b para retroceder a la etiqueta más cercana 1.

+0

Eso estaría bien, pero mi ensamblador es un principiantes uno (LC3), de modo que ganaron no funciona Pero supongo que puedo usar nombres genéricos yo mismo 'while1' 'wend1' 'if1' 'ifend2' etc etc ... – user289293

+0

Estaba tratando de averiguar qué significan estos sufijos 'b' y' f'. Pasé casi una hora para hacer eso. Finalmente, recibí mi respuesta aquí. Muchas gracias :) – dirtybit

Cuestiones relacionadas