2015-07-03 18 views
5

Jestem nowy w zespole i staram się zrozumieć Linux 0.01 kod bootloadera, ale utknąłem w tej części (przy bardzo początek :)):powtarzając instrukcja mov x86

.globl begtext, begdata, begbss, endtext, enddata, endbss 
.text 
begtext: 
.data 
begdata: 
.bss 
begbss: 
.text 

BOOTSEG = 0x07c0 
INITSEG = 0x9000 
SYSSEG = 0x1000   | system loaded at 0x10000 (65536). 
ENDSEG = SYSSEG + SYSSIZE 

entry start 
start: 
    mov ax,#BOOTSEG 
    mov ds,ax 
    mov ax,#INITSEG 
    mov es,ax 
    mov cx,#256 
    sub si,si 
    sub di,di 
    rep 
    movw 
    jmpi go,INITSEG 

Kod ten (jak wyjaśniono w kopie komentarzy źródłowych) bootloader do nowej lokalizacji i kontynuuje wykonywanie od go. rep, po którym następuje movs powinien to zrobić (kopiowanie), ale zamiast tego użyto instrukcji mov {w}.

rep 
movw 

W każdej książce odniesienia dla x86 Spojrzałem rep jest używany z instrukcją smyczkowych.

Czy rep może być używany z wszystkimi instrukcjami przesyłania danych lub tylko z ciągami znaków, a jeśli tak, dlaczego nie jest wymieniony w podręcznikach referencyjnych?

Odpowiedz

4

Jest to najprawdopodobniej sposób, w jaki konkretny asembler, dla którego napisano kod, implementuje tę instrukcję, chociaż jest ona wprawdzie dziwna. Częściej jest to oznaczane jako movsb, movsw lub movsl, ponieważ movs jest notacją z Intela.

W rzeczywistości jest to przenoszenie "ciągu znaków", chociaż jest to po prostu zestaw arbitralnych bajtów. Dokładniej, może zauważyłeś, że poprzednia była mov cx,256. Ten kod operacji to movw, który przesunie 16-bitowe słowo, wydajniej przesuwając sektor rozruchowy o 512 bajtach.

Aktualizacja:

Twoje pytanie mnie strasznie ciekawy, ponieważ nie mam natknąć instrukcją kodowanego w ten sposób. Co ciekawe, znalazłem forum entry, który wydaje się wskazywać, że rep movw jest w formacie AS86 i faktycznie składa się na rep movsw.

+0

Tak więc podczas montażu _rep movw_ zostanie przetłumaczone na kod fabryczny _rep movws_? –

+0

'rep movsw'. Jednak, znowu, jest to naprawdę dziwaczna notacja (ta w oryginalnym pytaniu). Czy wiesz, który asembler jest napisany? –