Wie erstellen Sie verschachtelte Schleifen in x86 Assembler
Ist es möglich, erstellen von verschachtelten Schleifen in x86-Assembler?
Möchte ich übersetzen dieses psedocode in die richtige x86-Assembler-code (mit MASM syntax), aber ich bin mir nicht sicher, wie Sie initialisiert werden die einzelnen loop-counter hier. Ist es auch möglich, lokale Variablen deklarieren, in x86 Assembler (wie in den meisten anderen Programmiersprachen)?
for (var i = 0; i < 10; i++){
for(var j = 0; j < 10; j++){
for(var k = 0; k < 10; k++){
mov eax, i + j + k;
}
}
}
- Diese Frage hat eine täuschend ähnliche Titel zu diesem, aber es ist meist irrelevant: stackoverflow.com/questions/15398672/...
- Auch diese Frage relevant sein könnte (auch wenn Sie haben eine große Anzahl von downvotes ohne ersichtlichen Grund): stackoverflow.com/questions/10890648/...
- Gegeben, dass Ihr C-code, der schließlich wird übersetzt in Maschinen-code, die Antwort auf beide Fragen ist ein klares ja, keine Notwendigkeit zu Fragen.
- Warum wurde diese Frage downvoted? Gibt es etwas zweideutig, und kann ich irgendetwas tun um es zu verbessern?
- Ich hatte nicht das Gefühl, genug Anstrengung gewesen gestellt in es.
- Ich denke, das ist verständlich - ich habe nur studiert assembly-Sprache, die in den letzten 3 Monaten, und das macht mich dumm Aussehen, wenn im Vergleich zum rest der Baugruppe Sprache der Gemeinschaft.
- Nicht verunglimpfen sich selbst. Noch mehr Forschung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sicher, es ist möglich. Da jeder computer-Programm-schließlich reduziert sich der Montage - es ist natürlich die mächtigste Sprache möglich (ohne direkte bit-Manipulationen).
Den eigentlichen code hängt vom Betriebssystem, compiler und Optimierungen angewendet, aber grundsätzlich sollte so etwas wie dieses (Beispiel für 2 geschachtelte Schleifen, nicht 3):
Beachten Sie, brauchen Sie nicht, lokale Variablen, Sie haben general-purpose-Register für die Verwendung, die Sie benötigen. Wenn Sie darauf bestehen, mit Variablen, die Sie verwenden können Speicher-Adressen und Lesen/schreiben mit register Zeiger.
jcc
an der Unterseite, und keinejmp
überhaupt. So fallen Sie durch und beendet die Schleife. Es tut gut zeigen, mit getrennten Registern für separate Schleifenzähler, obwohl. (und re: Martin ' s point: push/pop CX und mit einer langsamenloop
instruction ist eine 16-bit-idiom, die nicht mehr nützlich oder relevant.) Insgesamt lohnt sich ein upvote, auch ein esp für den letzten Absatz.enter
undleave
während lokale Variablen werden auf dem stack gespeichert? Natürlich tut, der Weg ist eher nicht optimierten, aber ich glaube, das sollte das Allgemeine Konzept