2017-06-11 60 views
12

Innymi słowy, czy jest jakaś sprawa, że ​​potrzebuję tej instrukcji?Dlaczego istnieje instrukcja REP LODS AL?

Od Intel Instrukcji, to co instrukcja zrobić:

obciążenia (E) bajtów CX z DS: [(E) SI] do AL.

Weźmy następujący przykład w NASM:

section .data 
    src: db 0, 1, 2, 3 

section .code 
    mov esi, src 
    mov ecx, 4 
    rep lodsb ; mov al, byte[esi + ecx -1]; ecx++ 

ile dyspozycja rep lodsb realizuje, nie mam żadnej kontroli nad wartością załadowanego al. Wszystko, co mogę zrobić, to czekać, aż instrukcja zakończy się, aby uzyskać ostatnią wartość al, co oczywiście mogę uzyskać bezpośrednio, bez pętli.

To samo pytanie dotyczy całej rodziny: REP LODS AX, REP LODS EAX i REP LODS RAX.

+1

Moja starożytny Microsoft MASM „Programisty Guide” mówi, że 'LODS' jest jedynym w tej rodzinie z instrukcjami, które nie bierze powtarzania prefiks. –

+8

Istnieje, ponieważ było zbyt drogie, aby go nie było. Nie można sobie pozwolić na nicetia, gdy trzeba zbudować 16-bitowy procesor z tylko 20000 tranzystorów. –

+0

@WeatherVane, Myślę, że to nie MASM decyduje o nas, LOL –

Odpowiedz

9

Czytanie z pamięci może w niektórych przypadkach powodować skutki uboczne. Na przykład może się tak zdarzyć, jeśli pamięć jest mapowana na rejestry sprzętowe. Dokładny efekt uboczny będzie zależeć od sprzętu. Tak więc rep lodsb może być użyteczny w bardzo rzadkich przypadkach, gdy potrzebne jest wystąpienie efektu ubocznego, ale nie wymagają odczytanych wartości.

7

... czy jest jakiś przypadek, że może potrzebuję tej instrukcji?

może nie potrzeba to per se, ale kodowanie na świecie 16-bitową przestrzeń, gdzie ochrona jest ważna, mam więcej niż jeden raz preferowane

rep lodsb 

nad tym dłużej (w bajtów)

add si, cx 
mov al, [si-1] 

Oczywiście wszystko to zależy od sytuacji.

pamiętać, że instrukcja wymiana pobrać bez pętli jest faktycznie mov al, byte[esi + ecx -1]

+0

Wygląda na to, że bardzo trudno jest go potrzebować. Dziękuję również za poprawkę. –

+0

Yay, kolejna sztuczka w pasie do gry w golfa! –