| Zeile 23: | Zeile 23: | ||
Zeiger sind einzigartig in C. Mit Zeigern kann man wie bei Assembler direkt auf den Arbeitsspeicher zugreifen (allerdings nicht auf Register). | Zeiger sind einzigartig in C. Mit Zeigern kann man wie bei Assembler direkt auf den Arbeitsspeicher zugreifen (allerdings nicht auf Register). | ||
Folgender Beispielcode verdeutlicht dies: | Folgender Beispielcode verdeutlicht dies: | ||
| − | + | <c> | |
| − | + | int console_attr = 7, console_x = 0, console_y = 0; | |
| − | + | ||
| − | + | void putchar(int c) | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | void | ||
{ | { | ||
| − | + | unsigned char *console = (unsigned char *)0xB8000; | |
| − | + | ||
| − | + | if ((c != '\n') && (c != '\r')) | |
| − | + | { | |
| − | + | console += (console_y * 80 + console_x) * 2; | |
| − | + | *(console++) = c; | |
| − | + | *console = console_attr; | |
| − | + | console_x++; | |
| − | + | } | |
| − | + | else if (c == '\r') | |
| − | + | { | |
| − | + | console_x = 0; | |
| − | + | } | |
| − | + | ||
| − | + | while ((console_x >= 80) || (c == '\n')) | |
| − | + | { | |
| − | + | if (console_x >= 80) | |
| − | + | { | |
| − | + | console_x -= 80; | |
| + | } | ||
| + | console_y++; | ||
| + | while (console_y >= 25) | ||
| + | { | ||
| + | console_y--; | ||
| + | memmove((void *)0xB8000, (void *)0xB80A0, 3840); | ||
| + | memset((void *)0xB8F00, 0, 160); | ||
| + | } | ||
| + | c = 0; | ||
| + | } | ||
} | } | ||
| − | <!-- Urheber ist | + | </c> |
| − | + | <!-- Urheber ist XanClic, Code steht unter der WTFPL - ungetestet! --> | |
| − | Die Zeile | + | Hierbei handelt es sich um einen Beispielcode, der zeigt, wie eine putchar()-Funktion beispielsweise aussehen könnte. |
| − | auf dem zeigende Wert verändert werden (Zeile | + | Die Zeile 5 beinhaltet einen Zeiger, der für die Textausgabe essentiell ist. Dieser Zeiger kann erhöht werden (Zeile 7) oder |
| + | auf dem zeigende Wert verändert werden (Zeile 9). In Zeile 8 wird zuerst der Wert, auf den den console zeigt, verändert und dann der Zeiger um eins erhöht.<br> | ||
== Bekannte C-Compiler == | == Bekannte C-Compiler == | ||