Память компьютера. (Сегмент, смещение и т.д.) - Assembler

Узнай цену своей работы

Формулировка задачи:

Приветствую! Вот чего-то я совсем заплутал. Разбирался по этому Потыкайте отвёрткой: 1. Память это как тетрадный лист в клетку. 2. В каждой клетке -- байт, т.е. 8 1 (единиц) или 0(нулей). 3. Параграфом мы обзываем 16 клеток подряд. И мы умеем адресоваться по параграфам: 45 клетка --- это 1 параграф+ 29 клеток или 2 параграфа+13 клеток. 4. Сегментом мы называем набор из 64 клеток подряд (0000 -- FFFF). 5. В сегменте мы умеем находить клетку по смещению из 4 байт. Итого: 2 в 16 сегментов, да в каждом 16 байт. Итого 1 мегабайт. Почему такое дно --- у нас блин в сегмент 64 ячейки, а параграф -- 16. Или у нас в одном сегменте 4 параграфа? И как происходит адресация, если вот я открываю дебаг и там есть вот что (см. ниже). Или там не совсем дотошно написано и я не понимаю или я уже совсем палестинец. Помогите, кто чем может. Спасибо. PS: Debug->R->d cs:100 1424:0160 00 00 .. 00 -- всего 16 вот таких сдвоенных нулей: "00". Тогда что же такое 1424 -- я уповаю что номер сегмента, но что же тогда такое 0160 и почему там 8 таких значений и яне могу понять почему так -- скажите позязя=). И что означают эти сдвоенные нули. Если кто-то может сказать типа 00 -- значение (напр. k- байта) в таком-то регистре с таким-то смещением и каким-то параграфом -- буду признателен. Даже не надо числа -- достаточно сказать как их вычислить. Спасибо.

Решение задачи: «Память компьютера. (Сегмент, смещение и т.д.)»

textual
Листинг программы
1111 1111 1111 1111  ---------> DS:
     |    1111 1111 1111 1111  ----> SI
     |                      |
     |<------ 20-бит ------>|
     1111 1111 1111 1111 1111  ----> адрес = DS:SI, ES:DI
                                             CS:IP, SS:SP

Объяснение кода листинга программы

В данном коде происходит инкапсуляция 16-битного адреса в 20-битный сегментный адрес. Сегментная адресация используется в процессорах x86 для доступа к памяти компьютера. В данном случае, сегментный адрес состоит из трех сегментов: DS (Data Segment), SI (Source Index), и ES (Extra Segment). Каждый сегмент содержит 16 бит, что в сумме дает 48-битный адрес. Однако, в данном коде используется только 20-битный адрес, что ограничивает доступ к памяти в 1Мб (1024 Кб). Переменные в коде:

  1. DS - сегмент данных, содержит 1111 1111 1111 1111
  2. SI - сегментный индекс источника, также содержит 1111 1111 1111 1111
  3. ES - дополнительный сегмент, также содержит 1111 1111 1111 1111
  4. CS:IP - сегментный адрес кода и смещение в коде, используются для выполнения команд процессора
  5. SS:SP - сегментный адрес стека и смещение в стеке, используются для хранения и извлечения данных из стека Список действий в коде:
  6. Объявить переменные DS, SI, ES, CS:IP, SS:SP
  7. Присвоить DS, SI, ES значение 1111 1111 1111 1111
  8. Присвоить CS:IP значение DS:SI
  9. Присвоить SS:SP значение DS:SI Следует отметить, что данный код не является полным и может не работать в контексте программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5