# # 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)
#