verweisen, wenn die Anweisung KompilierungGas: Zu viele Speicher
movl 4(%ebp), 8(%ebp)
i ‚zu viele Speicher referene‘ bekam, was mit ihm los ist ??
verweisen, wenn die Anweisung KompilierungGas: Zu viele Speicher
movl 4(%ebp), 8(%ebp)
i ‚zu viele Speicher referene‘ bekam, was mit ihm los ist ??
Die Zahl vor der Klammer ist ein Byte-Offset (wodurch eine Speicherreferenz verursacht wird), und Sie können nicht zwei davon mit movl
haben. Sie müssen den Wert zunächst vorübergehend in ein Register verschieben.
movl 4(%ebp), %ecx
movl %ecx, 8(%ebp)
Es ist keine rechtliche Anweisung. Bei den meisten Befehlen, die auf den Speicher verweisen, müssen Sie sie in/aus einem Register verschieben.
movl
nicht zu Speicher-Speicher bewegt, müssen Sie über ein Register gehen (also mit zwei movl
Anweisungen).
danke, aber warum? ist die CPU Architektur, die dies oder etwas anderes begrenzen? – freenight
Ja, es ist eine Einschränkung in der CPU. MOVS ist der einzige Speicher-zu-Speicher-Befehl. –
Yeah, Speicher-zu-Speicher kann nur nicht so effizient implementiert werden (Nicht-x86-CPUs neigen dazu, dass alle Anweisungen nur zur Registrierung registriert sind, mit Laden/Speichern als einzige Register-zu-Speicher). –