Assemblersprache, wie man mit Nullzeichen vergleicht

Kaiser Han

Ich lese ein Zeichen für ein Zeichen aus einer Eingabezeichenfolge, vertausche die Halbbytes des Zeichens und kopiere in die Ausgabezeichenfolge. Also brauche ich eine Bedingung, um die Schleife zu beenden: Meine Endbedingung ist, dass wenn ich ein NULL-Zeichen erhalte (in rdi gespeichert), das bedeutet, dass ich das Ende der Eingabezeichenfolge erreicht habe und die Schleife verlasse. Folgendes ist meine Implementierung, aber ich erhalte einen Segmentierungsfehler in dieser Zeile "cmpq 0x00, %rdi".

Hinweis: r12 ist der Eingabestring, r11 ist der Index des Strings, rdi ist der erste Eingabeparameter für die Funktion "swap", wenn rdi ein NULL-Zeichen ist, was bedeutet, dass es kein Zeichen mehr im Eingabestring gibt und ich die Schleife verlasse und rufe nicht swap an.

loop:
     movq (%r12, %r11, 1) %rdi
     
     cmpq 0x00, %rdi --> this is causing segmentation fault, why?
     je exit

     call swap

     ...

jmp loop

exit:
    leave
    ret

Kann mir jemand sagen, warum cmpq 0x00, %rdiein Segmentierungsfehler verursacht wird? Wie überprüfe ich, ob ein Zeichen NULL ist? Ich dachte, 0x00 bedeutet Nullzeichen?

Nate Eldredge

In der AT&T-Syntax bezieht sich eine schmucklose Zahl auf eine Adresse . Sie vergleichen %rdimit dem von address geholten Wert 0x0, dh Sie dereferenzieren einen Nullzeiger.

Wenn Sie eine Sofortnachricht wünschen, verwenden Sie $: cmpq $0x0, %rdi.

Allerdings , wenn Sie für eine Null suchen Zeichen (dh Null - Byte), wird der Code nicht sinnvoll , weil Sie Laden und Vergleichen einen 8-Byte qword ( %rdiist ein 64-Bit - Register). Wenn Sie ein einzelnes Byte wünschen, verwenden Sie ein 8-Bit-Register. Wenn Sie möchten %rdi, sind seine niedrigen 8 Bit das Register %dil, aber vielleicht möchten Sie %alstattdessen etwas wie . So:

movb (%r12, %r11, 1), %al
cmpb $0x00, %al
je exit

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Wie vergleicht man zwei Arrays mit Objekten?

Wie man Daten mit Django vergleicht

Wie man dict mit Zeitstempeln vergleicht

Wie man Datum mit Zeit in Orakel vergleicht

Wie man litere mit einem Array von char mit "(" vergleicht)

Wie vergleicht man Verschachtelungsstrukturen?

Wie vergleicht man ein gehashtes Passwort mit Input() in Python?

Wie man mit JMH die Kosten von '&' gegen '%' richtig vergleicht

wie man Werte mit vorherigen Werten in groupby in pandas vergleicht

Wie vergleicht man in Wörterbüchern verschachtelte Sets mit NUnit?

Wie man Elemente eines Arrays in Scala vergleicht (mit Tail rekursiv)

Wie man manuell lexikographisch mit "abcd" & "" abcde "effektiv vergleicht

Wie vergleicht man Namen mit und ohne orthographischem Akzent in Pandas?

Reagieren: Wie man aktuelle Requisiten mit neuen vergleicht

Mongodb: Wie man DB mit neuen Daten vergleicht

Wie man zwei Daten zusammen mit der Zeit in Java vergleicht

Java, wie man Strings mit String Arrays vergleicht

wie man einen Typparameter übergibt und mit dem Objekttyp vergleicht

c# Wie vergleicht man Zeichenfolgen in der Klasse mit CompareTo?

Wie man DateTime mit generischen Zeiten in Ruby vergleicht

wie man das Datum mit GETDATE() in SQL Server 2008 vergleicht

wie man zwei numpy Arrays mit ungleicher Länge vergleicht

Wie man mit FastParse genau 'n' vorgegebene Zeichen vergleicht

Wie man eine Zelle teilweise mit einer anderen Teilzelle vergleicht

Wie man zwei Objekte mit zufälligen Konstruktoren vergleicht

Wie man dict mit einer Liste in Python vergleicht

Wie vergleicht man zwei Zeitwerte mit reinem JavaScript?

Regex - wie man 'ß' mit 'ss' vergleicht und umgekehrt

Wie vergleicht man Benutzereingaben mit einer zufällig generierten Zahl?

TOP Liste

  1. 1

    So legen Sie mit dem Interface Builder unterschiedliche führende Speicherplätze für unterschiedliche Geräte fest

  2. 2

    Fügen Sie eine weitere Schaltfläche zu gwt Suggest Box hinzu

  3. 3

    Wie konvertiere ich einen Vektor von Bytes (u8) in eine Zeichenfolge?

  4. 4

    Wie kann ich in SCSS mehrere Klassen zu einer einzigen kombinieren?

  5. 5

    Wie konvertiert man einen Datenrahmen im langen Format in eine Liste mit einem geeigneten Format?

  6. 6

    Speichern Sie ein MPAndroidChart-Diagramm in einem Bild, ohne es in einer Aktivität anzuzeigen

  7. 7

    Gruppieren Sie Datenrahmenspalten nach ihrem Datum (die Spaltentitel enthalten) und fassen Sie die Instanzen von Einsen und Nullen in R . zusammen

  8. 8

    Tomcat - Leiten Sie den alten Kontextstamm zum neuen Kontextstamm um

  9. 9

    Eclipse Oxygen - Projekte verschwinden

  10. 10

    Wie wählt man Unterschiede mit drei Tabellen aus?

  11. 11

    Tic Tac Toe-Spiel im React-Reset-Button funktioniert nicht

  12. 12

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  13. 13

    ElasticSearch BulkShardRequest ist aufgrund von org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor fehlgeschlagen

  14. 14

    Wie kann ich den Kaskadenmodus global einstellen?

  15. 15

    Python: Spalten mit demselben Namen zusammenführen, wobei der Mindestwert beibehalten wird

  16. 16

    So erhalten Sie eine gleichmäßige Höhe für alle Eingabefelder

  17. 17

    Wie erstelle ich einen neuen übergeordneten Knoten außerhalb der .ref (/ path) in der Firebase-Echtzeitdatenbank mithilfe von Cloud-Funktionen (Typescript)?

  18. 18

    Was ist schneller: SUM über NULL oder über 0?

  19. 19

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  20. 20

    Kann ich ein Tkinter-Canvas erstellen, das mehrere Zeilen in einem Text-Widget umfasst?

  21. 21

    Ärgerliches Problem mit yaml, das ich nicht lösen kann

heißlabel

Archiv