In C ist _AX ein Pseudoregister. Und wenn Sie AX=1000
tun, ist dieser Wert 1000
aus dem Speicher entnommen wird
Aber es kann nicht wie erwartet in GCC Compiler
Compile und Führen Sie das folgende Programm in Turbo C, werden Sie 35 als Ausgabe erhalten. Es funktioniert möglicherweise nicht in anderen Compilern.
#include<stdio.h>
int main()
{
int a = 0;
a = 35;
printf("%d");
return 0;
}
Angenommen, die Adresse eines = 1200. Angenommen, die Adresse des Videospeichers = 5500;
MOV AH, 35
MOV [1200], AH
MOV [5500], AH // prints on the screen.
Dies ist die Art der Ausführung findet statt. Nach dem Kopieren des Wertes 35 auf den Speicherplatz 1200 behält AH den Wert 35.
Dann versucht printf("%d")
, den Wert von AH abzurufen und sendet es an den Videospeicher, um es auf dem Bildschirm anzuzeigen.
Wenn wir printf("%d %d", age, salary)
verwenden, wird der Wert des Alters auf AH übertragen, bevor dieser Wert zum Senden an den Videospeicher verwendet wird. Dann wird der Wert des Gehalts nach AH verschoben und dann an den Videospeicher gesendet.
Angenommen, Adresse des Alters = 1200; Adresse des Gehalts = 1202; Adresse des Videospeichers = XXXX; (Es wird nach nicht verändert. Von Zeichen auf dem Bildschirm gedruckt, denk nicht viel über diese Adresse Wert)
MOV AH, [1200]
MOV [XXXX], AH
MOV AH, [1202]
MOV [XXXX], AH
Ich hoffe, das wird helfen, die Lösung für das gegebene Programm zu verstehen.
die Syntax wird nicht funktionieren, aber das Konzept funktioniert ... –