Помогите разобраться с памятью...

Тема в разделе "WASM.ASSEMBLER", создана пользователем stel123, 1 дек 2004.

  1. stel123

    stel123 New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2004
    Сообщения:
    8
    Вот начало загрузчика операционной системы



    [BITS 16]

    [ORG 0]

    jmp start

    .....

    start:



    mov ax,07C0h

    mov ds,ax

    ....



    А почему 07С0? ведь логический адрес 0000:7С00?
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    stel123

    07C0h*16+0000h=0000h*16+7C00h
     
  3. stel123

    stel123 New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2004
    Сообщения:
    8
    Можешь пожалуйста написать алгоритм перевода логического адреса в физический, а то, как написано в "Испльзование Tutbo Assembler...." не совсем понятно... Там физ 000010 соответствует 0001:0000 и 0000:0010...
     
  4. ScepticWyvern

    ScepticWyvern New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2004
    Сообщения:
    5
    Адрес:
    Russia
    stel123

    В real mode процессора пара ("сегмент", "смещение") переводится в физический адрес так "сегмент" * 16 + "смещение". Собственно, Black_mirror так и показал.

    Какие выводы : к одной и той же ячейке памяти можно обращаться несколькими вариантами пар ("сегмент", "смещение"). Например 0001:0000 => 0001 * 16 + 0000 == 000010 и

    0000:0010 => 0000 * 16 + 0010 == 000010.

    Или другой вариант :

    0002:0000 => 0002 * 16 + 0000 == 000020 и

    0000:0020 => 0000 * 16 + 0020 == 000020 и

    0001:0010 => 0001 * 16 + 0010 == 000020 и т.д.
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105


    Например, чтобы загрузчик не смог младшие адреса

    потереть :)
     
  6. lis

    lis New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2004
    Сообщения:
    23
    Адрес:
    Russia
    valterg

    А какой код используешь для чтения?
     
  7. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    lis



    Это все понятно, что можно в другие сегментные

    регистры и 0 загрузить. Я просто пытался придумать

    правдоподобное об"яснение. А вопрос вызван

    совсем другим. Просто с высоты сегодняшних

    32-х и 64-х бит тяжело понять, что Интелу

    надо было с помощью 16-битных регистров

    "удобно" адресовать аж 1 Мбайт !