Liste abarbeiten, wie am elegantesten?
Verfasst: Mi Jan 04, 2012 5:03 pm
				
				Hallo zusammen,
ich habe folgenden Code geschrieben:
Mir geht es jetzt hauptsächlich darum, wie ich die Liste mit der homologen Reihe der Alkane am besten aufrufen kann. Ist es möglich, die Namen der einzelnen Alkane in eine Art Tabelle zu erfassen, und dann mit nem Pointer aufzurufen? 
Beim AVR Assembler ist dies so in der Art möglich:
Dabei wird immer ein Byte aufgerufen, ins Register geladen und der Pointer um 1 erhöht. Ist so etwas auch in C möglich?
			ich habe folgenden Code geschrieben:
Code: Alles auswählen
#include <stdio.h>
int main(void)
{
    int c, h, atom;
    char text[]="**********************************";
    printf("\nWieviel C-Atome?");
    scanf("%i",&c);
        h=c*2+2;
        atom = c + h;
    printf("\nDas Atom bestitz %i C-Atome und %i H-Atome, insgesamt %i Atome.\n", c, h, atom);
    printf("\nSummenformel: C%iH%i\n\n",c,h);
    switch (c)
    {
        case 1: printf("\nMethan");break;
        case 2: printf("\nEthan");break;
        case 3: printf("\nPropan");break;
        case 4: printf("\nButan");break;
        case 5: printf("\nPentan");break;
        case 6: printf("\nHexan");break;
        case 7: printf("\nHeptan");break;
        case 8: printf("\nOktan");break;
        case 9: printf("\nNonan");break;
        case 10: printf("\nDecan");break;
    }
    printf("\n\n%s\n\n",text);
    return 0;
}
Beim AVR Assembler ist dies so in der Art möglich:
Code: Alles auswählen
.include "m8def.inc"
 
    ldi     R17, 40                 ; Anzahl der Werte
    ldi     R16, 0xFF
    out     DDRB, R16               ; Port B: Ausgang
 
    ldi     ZL, LOW(daten*2)        ; Low-Byte der Adresse in Z-Pointer
    ldi     ZH, HIGH(daten*2)       ; High-Byte der Adresse in Z-Pointer
 
loop:    
    lpm     R0, Z+                  ; durch Z-Pointer adressiertes Byte
                                    ; in R0 laden und Z erhöhen
    out     PORTB, R0               ; an PORTB ausgeben
    dec     R17                     ; Zähler -1
    brne    loop
ende:   
    rjmp ende                       ; Endlosschleife
 
daten:
    .db 0b11111111
    .db 0b10101010
    .db 0b01010101
    ...