Ich möchte den maximalen Wert aus dem Array berechnen. Ich habe nur mit Registern gemacht, aber jetzt habe ich Probleme beim Manipulieren von Variablen im Speicher. Am Anfang möchte ich die erste Zahl den maximalen Wert machen. Ich habe movl array(, %edi, 4), &max
es gibt Fehler, ungültige Char '&'. Was ist der richtige Weg? Ich habe ein ähnliches Problem mit der decl &n
Anweisung.ungültiges Zeichen '&' Variablen im Speicher manipulieren
Im Code verwende ich% edi für den Index und% eax für den aktuellen Wert.
.data
array:
.int 31, 9, 42, 18, 40
n:
.int 5
max:
.int 0
.text
.globl _start
_start:
movl $0, %edi
movl array(, %edi, 4), &max
start_loop:
incl %edi
decl &n
cmpl $0, n
je exit_loop
movl array(, %edi, 4), %eax
cmpl max, %eax
jle start_loop
movl %eax, &max
jmp start_loop
exit_loop:
movl $1, %eax
movl &max, %ebx
int $0x80
Was wollen Sie, dass magische '&' zu tun? Sie benötigen es nicht, um auf Variablen zuzugreifen. – Jester
Sie verwenden '' '' nicht, um eine Adresse anzugeben. 'max' _IS_ die Adresse des Etiketts. Ihr zweites Problem besteht darin, dass auf Intel x86-Anweisungen zwei Speicheroperanden nicht verwendet werden können. Sie müssten es in zwei Anweisungen unter Verwendung eines Zwischenregisters aufteilen. –
Und die Zeile, die ich meine, du müsstest brechen, ist 'movl array (,% edi, 4), & max'. Ein Beispiel wäre 'movl array (,% edi, 4),% eax'' movl% eax, max' –