# # 1 "uebung1.c" # # # 1 "/usr/include/stdio.h" # # 6 # # # 1 "/usr/include/sys/stdsyms.h" # # 131 # # # 7 "/usr/include/stdio.h" # # 137 # # # 22 # typedef struct { # int __cnt; # unsigned char *__ptr; # unsigned char *__base; # unsigned short __flag; # unsigned char __fileL; # unsigned char __fileH; # } FILE; # # typedef struct { # int __cnt; # unsigned char *__ptr; # unsigned char *__base; # unsigned short __flag; # unsigned char __fileL; # unsigned char __fileH; # unsigned char *__bufendp; # unsigned char __smbuf[ 8 ]; # } _FILEX; # # 171 # # # 65 # typedef unsigned int size_t; # # # typedef long int fpos_t; # # # typedef char *__va_list; # # 202 # # # 102 # extern FILE __iob[]; # # # extern int remove(const char *); # extern int rename(const char *, const char *); # extern FILE *tmpfile(void); # extern char *tmpnam(char *); # extern int fclose(FILE *); # extern int fflush(FILE *); # extern FILE *fopen(const char *, const char *); # extern FILE *freopen(const char *, const char *, FILE *); # extern void setbuf(FILE *, char *); # extern int setvbuf(FILE *, char *, int, size_t); # extern int fprintf(FILE *, const char *, ...); # extern int fscanf(FILE *, const char *,...); # extern int printf(const char *,...); # extern int scanf(const char *,...); # extern int sprintf(char *, const char *,...); # extern int sscanf(const char *, const char *,...); # extern int vprintf(const char *, __va_list); # extern int vfprintf(FILE *, const char *, __va_list); # extern int vsprintf(char *, const char *, __va_list); # extern int fgetc(FILE *); # extern char *fgets(char *, int, FILE *); # extern int fputc(int, FILE *); # extern int fputs(const char *, FILE *); # extern int getc(FILE *); # extern int getchar(void); # extern char *gets(char *); # extern int putc(int, FILE *); # extern int putchar(int); # extern int puts(const char *); # extern int ungetc(int, FILE *); # extern int fgetpos(FILE *, fpos_t *); # extern int fseek(FILE *, long int, int); # extern int fsetpos(FILE *, const fpos_t *); # extern long int ftell(FILE *); # extern void rewind(FILE *); # extern void clearerr(FILE *); # extern int feof(FILE *); # extern int ferror(FILE *); # extern void perror(const char *); # # 274 # # # 191 # extern size_t fread(void *, size_t, size_t, FILE *); # extern size_t fwrite(const void *, size_t, size_t, FILE *); # # 323 # # # 207 # extern int __flsbuf(unsigned char, FILE *); # extern int __filbuf(FILE *); # # 300 # # # 2 "uebung1.c" # main() #9 global _main _main: link.l %a6,&LF1 # Lege den Inhalt von A6 auf den Stack # und reserviere 808 Bytes auf dem # Stack movm.l &LS1,(%sp) # Speichere die Konstante LS1 # in das Langwort, auf das der Stapel- # zeiger zeigt [Indirekte Adressierung] fmovm.x &LSF1,LFF1(%a6) # Speichere die Konstante LSF1 # ab der Adresse auf die a6 zeigt # [Indirekte Addressierung mit # Erweiterung] # { clr.l -4(%a6) # Loesche das Langwort im Speicher, # das 4 Bytes vor der Adresse steht, # auf die a6 zeigt # int i=0; # int fd[10][20]; lea -804(%a6),%a0 # Ziehe 804 von der Adresse ab, die in # a6 steht und schreibe das Ergebnis # nach a0 mov.l %a0,-808(%a6) # Schreibe a0 in die Speicherstelle, # die 808 Bytes vor derjenigen steht # auf die A6 zeigt # int *zeiger=(int *)fd; L58: # do mov.l -4(%a6),%d0 # Schreibe den Inhalt der Speicher- # stelle, die 4 Bytes vor der Stelle # liegt, auf die A6 zeigt, nach d0 mov.l -808(%a6),%a0 # Ziehe 808 von der Adresse ab, die in # a6 steht und schreibe das Ergebnis # nach a0 movq &10,%d1 # Lade d1 mit dem Wert 10 # [Umittelbar schnelle Adressierung # (mit Erweiterung des Operanden auf # Langwort)] mov.l %d1,(%a0,%d0.l*4) # Schreibe d1 in die Speicherstelle, # deren Adresse durch Addition von a0 # und d0 gebildet wird # [Indirekte Adressierung mit Index # und Erweiterung (Erweiterung # hier = 0)] add.l &20,-4(%a6) # Addiere 20 zu der Adresse, die 4 # Bytes vor der Adresse liegt, auf # die a6 zeigt # {*(zeiger + i)=10; i += 20;} L57: cmp.l -4(%a6),&200 # Vergleiche die Speicherstelle, die # 4 Bytes vor der Adresse liegt, auf # die a6 zeigt, mit dem Wert 200 bne.l L58 # Wenn ungleich, dann springe nach # L58 (Branch on not equal) L56: # while (i != 200); mov.l -808(%a6),%a0 # Ziehe 808 von der Adresse ab, die # in a6 steht und schreibe das # Ergebnis nach a0 mov.l (%a0),%d0 # Lese die Speicheradresse, auf die # a0 zeigt, und schreibe ihren Inhalt # nach d0 add.l &10,%d0 # Addiere 10 zu d0 mov.l %d0,-84(%a6) # Schreibe d0 in die Speicherstelle, # die 84 Bytes vor derjenigen steht # auf die A6 zeigt # fd[9][0]=*zeiger +10; mov.l -84(%a6),-(%sp) # Lege den Inhalt der Speicherstelle, # die 84 Bytes vor der Stelle liegt, # auf die A6 zeigt, auf den Stack mov.l -804(%a6),-(%sp) # Lege den Inhalt der Speicherstelle, # die 804 Bytes vor der Stelle liegt, # auf die A6 zeigt, auf den Stack pea L59 # Lege die Adresse, ab der die Daten # (mit dem Label L59) stehen, auf den Stack jsr _printf # Rufe die Funktion _printf auf lea 12(%sp),%sp # Gibt 3 Langwoerter auf dem Stack # frei # printf("%i %i \n", fd[0][0], fd[9][0]); L55: unlk %a6 # Gib den reservierten Speicherbereich # auf dem Stack frei und schreibe # vorherigen Wert in A6 zurueck rts # Ruecksprung in aufrufendes Programm # (Return from subroutine) set LF1,-808 # Weise der Konstanten LF1 -808 zu set LS1,0 # Weise der Konstanten LS1 0 zu set LFF1,-808 # Weise der Konstanten LFF1 -808 zu set LSF1,0 # Weise der Konstanten LSF1 0 zu # } data L59: byte 37,105,32,37,105,32,10,0 version 2 # # Indirekte Adressierung: # Es wird der Operand von/zu der Adresse uebertragen, die das Adress- # register angibt. # # Indirekte Adressierung mit Erweiterung: # Wie indirekte Adressierung, jedoch wird, bevor der Operand uebertragen # wird, die Erweiterung (das ist eine Konstante) zur Adresse addiert # # Indirekte Adressierung mit Index und Erweiterung: # Wie indirekte Adressierung mit Erweiterung, jedoch wird, bevor der Operand # uebretragen wird, das Indexregister zur Adresse addiert # # Unmittelbar schnelle Adressierung: # Der Quelloperand ist im Opcode enthalten. Daher ist eine sehr schnelle Ab- # arbeitung desb Befehls moeglich. Der Quelloperand wird dabei immer auf # Langwortlaenge erweitert (mit Nullen) #