[c] Noch mal Frage zu inline assembler

Schnacki

Mitglied
Hallo.
Habe noch mal ne Frage zu Inline assembler.
Erstmal der Code:
Code:
char ch;
#include<stdio.h>
char getKey() {
	__asm("mov 0x00,%ah \n");
  	__asm("int $0x16 \n");	
	__asm("mov %%al,%0;"::"r"(ch));
	printf("-----\n%c\n-----",ch);
	return ch;
}
int main() {
	getKey();	
}
Dieser Doce wird vom gcc compiliert und auch ausgeführt.
Aber dennoch wird die Tastatureingabe nicht in ch abgespeichert.
Wisst ihr woran das liegt?
 
Zuletzt bearbeitet:
Dieser Doce wird vom gcc compiliert und auch ausgeführt.
Aber dennoch wird die Tastatureingabe nicht in ch abgespeichert.
Wisst ihr woran das liegt?
Und du bist dir ganz sicher, dass beim Ausführen kein Speicherzugriffsfehler auftritt? Bei der ersten Assembleranweisung versuchst du, aus der Offsetadresse 0x00 des Datensegments ein Byte zu lesen und dies in das Register %ah zu schreiben. Wenn du die Konstante 0x00 meinst, musst du diese auch als solche auszeichnen ($0x00). Als nächstes führst du einen BIOS-Interrupt aus, was im Protected Mode wohl oder übel fehlschlägt (ich gehe mal davon aus, dass dein Zielsystem nicht DOS ist).

Egal was du machen willst – auf diese Weise wirst du also keinen Erfolg haben. Möglicherweise hilft dir ja die Funktion getch() weiter (<conio.h> einbinden). Diese gehört allerdings nicht zum C-Standard.

Grüße,
Matthias
 
Zurück