2015-07-03 3 views
5

Я новичок в сборке, и я пытаюсь понять Linux 0.01 загрузчика код, но я застрял в этой части (в очень beggining :)):повторив инструкция мов 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 

Этот код (как описано в исходные комментарии копий) загрузчик в новое место и продолжает выполнение от go. rep, за которым следует movs должен сделать это (копировать часть), но вместо этого используется инструкция mov {w}.

rep 
movw 

В каждом справочнике для x86 я посмотрел респ используется с указанием строки.

Can rep можно использовать со всеми инструкциями по передаче данных или просто строчными, и если да, то почему это не упоминается в справочных руководствах?

ответ

4

Это, скорее всего, именно то, как конкретный ассемблер, написанный для этого кода, выполняет эту инструкцию, хотя это, по общему признанию, странно. Чаще всего это выглядит как movsb, movsw или movsl, так как movs - это обозначение от Intel.

Это, по сути, перемещение «строки», хотя это просто набор произвольных байтов. Более конкретно, вы, возможно, заметили mov cx,256, предшествующие этому. Этот код операции movw, который будет перемещать 16-битное слово, более эффективно перемещая загрузочный сектор размером 512 байт.

Update:

Ваш вопрос заставил меня ужасно любопытно, так как я не натыкаться инструкции, кодируемого таким образом. Интересно, что я нашел forum entry, который, как представляется, указывает, что rep movw является форматом AS86 и на самом деле собирает rep movsw.

+0

Итак, во время сборки _rep movw_ будет переведен на _rep movws_ opcode? –

+0

'rep movsw'. Хотя, опять же, это действительно причудливая нотация (та, что в вашем первоначальном вопросе). Вы знаете, на каком ассемблере написано? –

Смежные вопросы