movsb

Тема в разделе "WASM.BEGINNERS", создана пользователем GLEB, 9 фев 2009.

  1. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    mov si, p
    mov di, 07C00h
    mov cx,512
    rep movsb

    код копирует 512 байт с адреса переменной p по адресу 07C0h:0000h (0000h:07C00h)

    а как скопировать по адресу 2000h:0000h ?
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    эм... тебе вроде бы в сторону сегментных регистров копать надо
     
  3. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    ну а можно пример
     
  4. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Код (Text):
    1. push 2000h
    2. pop es
    3. xor di, di
    4. rep movsb
     
  5. Noga

    Noga New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    92
    -- del --
     
  6. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    censored

    не работает ((

    push 07C0h
    pop es
    xor di, di
    mov cx,512
    rep movsb
     
  7. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    А должно?
     
  8. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    а в si положить p и отрегулировать адрес в ds (push adr/pop ds)
     
  9. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    censored
    >А должно?
    я имел ввиду не работает аналогично

    mov di, 07C00h
    mov cx,512
    rep movsb
     
  10. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    а симптомы какие. экстросенсов и правидцев до пятницы не будет!
     
  11. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    а тут es куда показывает?

    вообще rep movsb производит пересылку cx байтов из буфера на который указывает ds:si в буфер, на который указывает es:di
    тоесть если надо переслать 10 байт из памяти по адресу 1000:1000 в память по адресу 500:500, то достаточно сделать
    Код (Text):
    1. mov cx,10
    2. push 1000h
    3. push 500h
    4. pop es
    5. pop ds
    6. mov di,500h
    7. mov si,1000h
    8. rep movsb
     
  12. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    в общем задача такая, ну что из буфера скопировать код в произвольный участок памяти и передать на него управление

    вот что вышло

    Код (Text):
    1. org 100h
    2. use16
    3.  
    4. jmp start
    5.  
    6. BootSector file '1.bin'
    7.  
    8. start:
    9.  
    10. cli
    11.  
    12. mov si, BootSector
    13. mov di, 7c00h
    14. mov cx, 512
    15. rep movsb
    16.  
    17. sti
    18.  
    19. jmp 7C00h
    этот код работает, но тут надо указываются физические адреса, а мне нужно указывать в формате сегмент:смещение, так как например адрес 2000h:0000h = 20000h а это уже за пределами размера регистра
     
  13. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    Или этот код вообще копируется и выполняется в пределах текущего сегмента программы? )))))))

    Блин чувствую чушь написал какую-то )))))
     
  14. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    друг, ну тебе уже показали, что надо изменить сегментные регистры. Даже показали как. Что тебе еще мешает вставить показанный код себе? Религия не позволяет?
     
  15. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    можно еще и в памяти адрес хранить, а загружать так
    Код (Text):
    1. lds si,[Source]
    2. les di,[Destination]
     
  16. GLEB

    GLEB New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    83
    вроде разобрался, только вот скажите, почему jmp 0:07C00h и jmp 07C0h:0 прыгают не в одно и тоже место?

    правка.

    опс, извиняюсь, все работает, просто org 7c00h стояло
     
  17. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Адрес кажется расчитывается так: (seg shl 4)+ofs