[ASM] Porownianie znakow

0

Potrzebuje porownac znak z lancucha z danym znakiem ( konkretnie chodzi mi o $ ),
Tylko jak to zrobic ??

[ tutaj byly brednie i glupoty :( ]

Z gory dziekuje za pomoc
Assassin.

Do postu ponizej:

Mam jeszcze pytanie, czy zamiast napisac:

cmp WORD PTR [si + 1], '$'

moge zinkrementowac po prostu rejest si ??

0
Assassin napisał(a)

porwnianie w stylu:
cmp WORD PTR [si], '$'
porwnuje caly ciag( chyba )

Fajny ten asembler. Potrafi w jednej instrukcji porównać cały łańcuch ;)

A tak poważnie.

Jeżeli w si masz wskaźnik na pierwszy znak łańcucha (czyli typowy łańcuch), to:
cmp WORD PTR [si], '$'
porówna pierwszy znak z łańcucha z '$'.
cmp WORD PTR [si + 1], '$'
porówna drugi znak
cmp WORD PTR [si + 2], '$'
trzeci itp.

Jeżeli potrzebujesz sprawdzić na jakiej pozycji w łańcuchu jest '$' to odsyłam do scas i kuzynów.

0

oczywiście, że można, jeżeli zamykasz to w pętli - nawet trzeba.
A tak przy okazji - czy np. MOV AL, DS:[SI] wykonuje się krócej niż MOV AL, DS:[SI+1]?

0
V-tec napisał(a)

oczywiście, że można, jeżeli zamykasz to w pętli - nawet trzeba.
A tak przy okazji - czy np. MOV AL, DS:[SI] wykonuje się krócej niż MOV AL, DS:[SI+1]?

W procesorach Intela nie ma to znaczenia. Obydwa to są adresowania indeksowe, z tym, że drugi jeszcze ma dodatkowy bajt przesunięcia, jednak i tak wczytane zostanie wczytane w jednym cyklu (przynajmniej od Pentium).

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