| Zeile 139: | Zeile 139: | ||
4: e4 71 in $0x71,%al | 4: e4 71 in $0x71,%al | ||
6: c3 retq </pre> | 6: c3 retq </pre> | ||
| + | |||
| + | :''Nächster Beitrag:'' Ich weiß nicht, wieso ich antworte. Vermutlich bin ich sehr anfällig für Flamewars. Vielleicht möchte ich auch nur ein paar Sachen klarstellen, falls irgendein unglücklicher Anfänger das hier zufälligerweise liest und für bare Münze nimmt. Hast du den C-Code mal kompiliert? Vermutlich nicht. Ich schon. Leider hat taljeth das auch gemacht. Also lasse ich die erste Hälfte von meinem Beitrag einfach mal weg. Hinzuzufügen wäre noch, dass man bei neueren GCCs ja auch -flto benutzen kann, dann wird die Funktion readCMOS sogar dann direkt eingebunden, wenn sie sich in einer anderen Datei befindet. Aus | ||
| + | <c>int _start(void) | ||
| + | { | ||
| + | return readCMOS(42); | ||
| + | }</c> | ||
| + | :wird dann | ||
| + | <asm>00000000 <_start>: | ||
| + | _start(): | ||
| + | 0000000: b8 2a 00 00 00 mov eax,0x2a | ||
| + | 0000005: e6 70 out 0x70,al | ||
| + | 0000007: e4 71 in al,0x71 | ||
| + | 0000009: 0f b6 c0 movzx eax,al | ||
| + | 000000c: c3 ret</asm> | ||
| + | :Ich sehe da rein gar keinen Geschwindigkeitsnachteil zu deinem handoptimierten Assembler. Im Gegenteil, der gcc spart sich sogar den Funktionsaufruf und macht alles über Register. | ||
| + | :Zu dem OS-Kommentar sag ich einfach mal nichts, das ist wirklich Geschmackssache. Und wenn vielleicht irgendwann alle Rechner mit ARM laufen, braucht man IN und OUT ja sowieso nicht mehr (braucht man bei moderner Hardware außerdem überhaupt kaum noch, vielleicht mal zum Initialisieren, aber die ganzen Datenstrukturen liegen im Speicher und werden mit PCI-DMA abgearbeitet). —[[Benutzer:XanClic|Clici McXan]] 12:10, 20. Apr. 2011 (CEST) | ||