2015-07-03 10 views
5

Ich bin neu in der Montage und ich versuche, Linux 0,01 Urladercodes zu verstehen, aber ich habe an diesem Teil stecken (bei sehr beggining :)):Wiederholung mov Anweisung 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 

Dieser Code (wie im Abschnitt Quelle Kommentare kopiert) Bootloader an neuen Speicherort und setzt die Ausführung von gehen. rep gefolgt von movs sollte dies tun (Kopieren Teil), sondern stattdessen Anweisung mov {w} wird verwendet.

rep 
movw 

In jedem Nachschlagewerk für x86 sah ich rep mit String-Anweisungen verwendet wird.

Kann rep mit allen Datenübertragungsanweisungen oder nur string verwendet werden, und wenn ja, warum wird es nicht in Referenzhandbüchern erwähnt?

Antwort

4

Dies ist wahrscheinlich nur die Art und Weise, wie der jeweilige Assembler, für den der Code geschrieben wurde, diese Anweisung implementiert, obwohl sie zugegebenermaßen ungerade ist. Es ist üblich, dies als movsb, movsw oder movsl zu finden, da movs die Notation von Intel ist.

Dies ist in der Tat Verschieben einer "Zeichenfolge", obwohl es einfach eine Reihe von beliebigen Bytes ist. Genauer gesagt, haben Sie möglicherweise bemerkt, mov cx,256 vorausgegangen. Dieser Opcode ist movw, der ein 16-Bit-Wort verschiebt und den 512-Byte-Boot-Sektor effizienter bewegt.

Update:

Ihre Frage hat mich furchtbar neugierig, da ich nicht über die Anweisung auf diese Weise codiert laufen. Interessanterweise fand ich eine forum entry, die darauf hinweist, dass rep movw AS86-Format ist und tatsächlich zu rep movsw assembliert.

+0

Also, während der Montage wird _rep movw_ in _rep movws_ opcode übersetzt? –

+0

'rep movsw'. Auch das ist eine wirklich skurrile Notation (die in Ihrer ursprünglichen Frage). Weißt du, für welchen Assembler? –