2012-04-13 7 views
0

Ich habe ein Problem mit der x86-Baugruppe (AT & T).Assembler-Segmentierungsfehler auf der Dereferenzierungsregisteradresse

Da ich eine Array-Suche in Assembler implementieren muss ich im Register% ebx das erste Element des Arrays (sagen arr [0]) und um auf arr [1] zum Beispiel zu schreiben, schrieb ich:

mov -4(%ebx), %eax 

Das Problem ist, habe ich einen Segmentation Fault, wenn ich versuche, die ebx Adresse zu bekommen, was sehr seltsam ist, weil ich EBX Wert bekommen kann (der Wert von arr [0]) ohne Probleme .. Einige Ratschläge?

EDIT: Ok, ich glaube, ich habe den Fehler verstanden. Wenn ich erkläre die Array Ich habe arr die Adresse des ersten Elements auf die Variable setzen:

mov -4(%ecx), %eax 

Aber mit dieser Anweisung habe ich den Wert nicht die Adresse. Also wie kann ich die Adresse setzen?

+0

Können Sie den umgebenden Code zeigen? Ich denke, Sie verstehen etwas falsch, wie Register funktionieren. – DCoder

Antwort

0

arr[1] ist eigentlich eher unwahrscheinlich bei -4[%ebx] zu sein, ist es viel wahrscheinlicher, bei +4 zu sein.

Aber basierend auf Ihrer Frage, ich bin mir nicht sicher, dass Sie verstehen. Das funktioniert nur, wenn %ebx die Adresse des ersten Elements im Array ist. Ihr Text scheint anzuzeigen, dass Sie den Wert von arr[0] in ebx geladen haben. In diesem Fall gibt es keine Möglichkeit, von dort auf die anderen Elemente zuzugreifen.

Möglicherweise müssen Sie etwas mehr Code posten, damit wir sehen können, was Sie eigentlich tun möchten. Code übertrumpft im Allgemeinen beschreibenden Text für Programmierprobleme :-)

Verwandte Themen