Strings vergleichen

studypad
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 30. Mär 2011 11:46

Strings vergleichen

Beitrag von studypad »

Hallo, ich habe mal eine Frage zum vergleichen von Strings.

b = "b"
eax = "bcd"

cmpl $b,%eax

wie vergleiche ich diese Strings? Genauer, wie vergleiche ich das erste zeichen des strings mit dem b???
Bin etwas aufgeschmissen...

Danke

downsampling
Mausschubser
Mausschubser
Beiträge: 95
Registriert: 28. Mär 2011 22:58

Re: Strings vergleichen

Beitrag von downsampling »

Ein String ist Chararray. Du kannst also problemlos byteweise mit den Dezimalwert des Chars nach Asciitabelle vergleichen.

spaci76
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 9. Mai 2009 18:27

Re: Strings vergleichen

Beitrag von spaci76 »

gude,


kann mir jemand bitte meinen Denkfehler zeigen

definiert sind:

Code: Alles auswählen

.data
M:      .byte 77
input: .string "MX"
wenn ich nun einen Vergleich machen möchte wird das M bzw die 77 nicht erkannt, obwohl beide Inhalte register sowie das Byte M bei der Ausgabe M aufweisen

Code: Alles auswählen

movl $0, %esi
movl $0, %eax
movl input(,%esi,1), %eax
cmpl M, %eax  #<<<<

auf je wird hier einfach nicht reagiert.


wenn ich mit cmpb es versuche erscheint nur ein invalid combination of opcode and operands

cu daniel

Benutzeravatar
zimpfer
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 15. Mär 2009 01:07

Re: Strings vergleichen

Beitrag von zimpfer »

spaci76 hat geschrieben:gude,


kann mir jemand bitte meinen Denkfehler zeigen

definiert sind:

Code: Alles auswählen

.data
M:      .byte 77
input: .string "MX"
wenn ich nun einen Vergleich machen möchte wird das M bzw die 77 nicht erkannt, obwohl beide Inhalte register sowie das Byte M bei der Ausgabe M aufweisen

Code: Alles auswählen

movl $0, %esi
movl $0, %eax
movl input(,%esi,1), %eax
cmpl M, %eax  #<<<<

auf je wird hier einfach nicht reagiert.


wenn ich mit cmpb es versuche erscheint nur ein invalid combination of opcode and operands

cu daniel

movb input(,%esi,1), %al
cmpb M, %al

Damit müsste es gehen

spaci76
Mausschubser
Mausschubser
Beiträge: 52
Registriert: 9. Mai 2009 18:27

Re: Strings vergleichen

Beitrag von spaci76 »

dank es funktioniert,
wenn es geht bitte ich dennoch um eine Erklärung wieso hier nur ein 8bit Register und nicht ein 32bit Register funktioniert?

cu daniel

Benutzeravatar
zimpfer
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 144
Registriert: 15. Mär 2009 01:07

Re: Strings vergleichen

Beitrag von zimpfer »

spaci76 hat geschrieben:dank es funktioniert,
wenn es geht bitte ich dennoch um eine Erklärung wieso hier nur ein 8bit Register und nicht ein 32bit Register funktioniert?

cu daniel
Da du movl benutzt wird, wird nicht das erste Byte gelesen (ab Basisadresse von input), sondern 4 Byte ab Basisadresse von Input...
%al ist nun das hinterste Byte, das heißt es wäre ein Wert, der schon garnicht mehr in input steht:

|inputByte1|inputByte2|unbekanntByte1|unbekanntByte2|

mit movl bewegst du nun diese 4 Bytes in eax und in al steht nun nicht inputByte1, wie du es bräuchtest, sondern unbekanntByte2

mike
Erstie
Erstie
Beiträge: 16
Registriert: 6. Nov 2011 13:59

Re: Strings vergleichen

Beitrag von mike »

Hi,

nach testen muss ich sagen, dass die Reihenfolge falsch ist bei deiner Erklärung:
in eax steht: |unbekanntByte|unbekanntByte|inputByte2|inputByte1|

Dass bedeuted, wenn du die oberen 2 Bytes ausblendest, per ANDL Verpnüpfung, dann hast du den eingelesenen Buchstaben.


Gruß
Mike

Antworten

Zurück zu „Archiv“