Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

Assembler: AT&T Syntax

Hallo,

Ich brauche Hilfe bei meinem kleinen Programm.

int tastatur(void){
     asm("movl $00,%ah");
     asm("int $16");
}

int main(void){
     int i;
     do{
     i=quadrat();
     }
     while(i!=27);
     }

Ich benutze zum kompilieren Dev-CPP, also den gcc.
Ich bekomme folgende Meldung:

Assembler messages:
'%ah' not allowed with'movl'

Ich habe versucht mit Hilfe von dieser Seite das von  Wikibooks in AT&T Syntax umzuwandeln.
Aber das haut leider nicht hin.

Hoffe es kann mir einer helfen.

Gruß
Andre

Antworten zu Assembler: AT&T Syntax:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Ich rate mal:
movl sagt ja, dass man ein "long value" (DWORD) in das Register schiebt. AH ist aber kein "langes" Register, sondern eigentlich sind es nur die oberen 8bit des AX-Registers, das wiederum die unteren 16bit des EAX-Registers bildet, das wiederum die unteren 32bit des RAX-Registers darstellt. Du kannst also maximal ein Byte da reinschieben, was du dem mov-Befehl mit dem Suffix b mitteilst.
Also probier mal

asm( "movb $00,%ah" );

Kann aber auch sein, dass ich komplett daneben liege... Assembler ist nicht so meine Stärke...
Da stehts so drin http://sig9.com/articles/att-syntax  ;)

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

gar nicht so leicht.

Aber danke für den Link. Der hilft mir hoffentlich weiter ;D

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Sooo...also das mit movl, movb unsw. war ja ganz einfach. Das Programm geht trotzdem nicht.

Es stürzt ab. Ich kann ja ein Problembericht sende.  ::)

Ich habe also mal die Fehlersuche benutzt.
Bei beiden asm(); Funktionen bekomme ich dann eine Meldung

"Eine Zugriffsverletzung (Segemntation Fault) trat in ihrmen Programm auf."

Hmm...

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Oh ja, der gute Segfault. Das kann so ziemlich alles sein... wie sieht denn dein Programm im Moment aus?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
#include <stdio.h>


//int quadrat(void);
int tastatur(void){
     asm("movb $00,%ah");
     asm("int $16");
}

int main(void){
     int i;
     i=tastatur();
     system("pause");
}

So sieht er aus. Ist eigneltich nichts Besonderes.
Aber irgendwie machen beide Zeilen das gleiche: Segfault.

 

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Die erste Zeile funktioniert, aber bei dem Interrupt, macht er Zicken. Keine Ahnung warum.


« Programmieren lernen? Und Spaß dabei?Programm oder Tutorial zum erstellen einer eigenen Application( ganz simpel) :) »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Internet-Zugriffsprogramm
Ein Internet-Zugriffsprogramm, auch Browser genannt, stellt Internetseiten für den Benutzer dar. Am bekanntesten ist der Microsoft Internet Explorer, gefolgt vom kos...

Programm
Siehe Software...

Quellcode
Ein Quellcode, auch als Quelltext bekannt, bezeichnet den unkompilierten Programm-Code einer Software. Quell- oder Programm-Code ist der auch für Menschen lesbare Co...