| Zeile 105: | Zeile 105: | ||
Zum Thema UNIX ist zu bemerken, das ein Gerät nunmal keine Datei ist, also ein Linux/Windows Programmierer sich nicht zwangsweise mit Hardware- und BIOS-zugriff auskennt. (Ich habe - im Ernst - mal in einem Linux forum gelesen, dass einer nicht weis wofür die Befehle IN und OUT sind). Viel wichtiger ist es sich mit DOS auszukennen, denn da arbeitet man ständig mit BIOS und Hardwarezugriffen, und weis auch wie man zum Beispiel erkennt ob und was für Geräte angeschlossen sind. Und das ist genau dass, was die Klicki-Bunti-Objekti-Hochsprachi-Programmierer eben nicht können. | Zum Thema UNIX ist zu bemerken, das ein Gerät nunmal keine Datei ist, also ein Linux/Windows Programmierer sich nicht zwangsweise mit Hardware- und BIOS-zugriff auskennt. (Ich habe - im Ernst - mal in einem Linux forum gelesen, dass einer nicht weis wofür die Befehle IN und OUT sind). Viel wichtiger ist es sich mit DOS auszukennen, denn da arbeitet man ständig mit BIOS und Hardwarezugriffen, und weis auch wie man zum Beispiel erkennt ob und was für Geräte angeschlossen sind. Und das ist genau dass, was die Klicki-Bunti-Objekti-Hochsprachi-Programmierer eben nicht können. | ||
| + | |||
| + | : Diese C-vs.-Assembler-Diskussion gab es mehr als einmal und Assembler hat immer den kürzeren gezogen (weil zeitaufwendig und fehleranfällig). Wenn du ernsthaft daran interessiert bist, such dir im Forum die passenden Threads raus und lies sie. Wenn nicht, troll bitte woanders weiter. | ||
| + | |||
| + | <pre>static inline void outportb(short port, char value) | ||
| + | { | ||
| + | asm volatile("outb %0, %1" : : "a" (value), "Nd" (port)); | ||
| + | } | ||
| + | |||
| + | static inline char inportb(short port) | ||
| + | { | ||
| + | char value; | ||
| + | asm volatile("inb %1, %0" : "=a" (value) : "Nd" (port)); | ||
| + | return value; | ||
| + | } | ||
| + | |||
| + | unsigned char readCMOS (unsigned char a) | ||
| + | { | ||
| + | outportb(0x70,a); | ||
| + | return inportb(0x71); | ||
| + | } | ||
| + | kwolf@dhcp-5-188:/tmp/c$ gcc -O2 -c cmos.c | ||
| + | kwolf@dhcp-5-188:/tmp/c$ objdump -d cmos.o | ||
| + | |||
| + | cmos.o: file format elf64-x86-64 | ||
| + | |||
| + | |||
| + | Disassembly of section .text: | ||
| + | |||
| + | 0000000000000000 <readCMOS>: | ||
| + | 0: 89 f8 mov %edi,%eax | ||
| + | 2: e6 70 out %al,$0x70 | ||
| + | 4: e4 71 in $0x71,%al | ||
| + | 6: c3 retq <pre> | ||