ASSEMBLER CMP

0

Hejka mam taki mały problem,

mam za zadanie wypisywać na ekran pojedyncze znaki z tekstu dopóki nie natrafię na konkretny znak.
I tu moje pytanie bo w tym momencie pojawia mi się błąd (reszta część programu działa)
czy mogę to zapisać w taki sposób:

cmp [label+EBX], 36
JZ KONIEC

gdzie:
label - tam znajduje się cały tekst
EXB - incrementuje te rejestr o 1 przy każdym przejściu pętli aby sprawdzać kolejne znaki

0

A czemu jz a nie je? Chcesz skoczyć przecież kiedy są równe?
No i kwestia czy mozesz zrobić takie porównanie bezpośrednio zależy chyba trochę od asemblera którego używasz. Potrafie sobie wyobrazić że musisz jednak przepisać sobie te wartości do rejestrów i porównać rejestry. Szczególnie że teraz może być tam jakaś konfuzja w kwestii ile bajtów z tego [label+bx] porównywać. Jakiś MASM pewnie wymagałby tam byte ptr
A co do pojawia mi się błąd to może uruchomisz to pod debugerem i wykonasz po jednej instrukcji i zobaczysz co nie działa?

0

Ok dzięki za odpowiedź, jakoś sobie poradziłem, a sądziłem że JZ działa tak samo jak JE
Miałem błędne rejestry musiałem zmienić na inne i zaczęło działać ;)

0

Po pierwsze JZ i JE to ta sama instrukcja, lecz po coś mamy na to dwie mnemoniki. Użycie tu JZ nie jest oczywiste i tylko ktoś kto zna implementację CMP zrozumie czemu JZ.
Po drugie, jak wspomniano, brakuje informacji o tym ile bajtów chcesz porównać (to już zależy od assemblera, którego używasz).
Po trzecie, zacznij czytać komunikaty błędów, po coś one są. :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1