Память компьютера. (Сегмент, смещение и т.д.) - 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 Кб). Переменные в коде:
- DS - сегмент данных, содержит 1111 1111 1111 1111
- SI - сегментный индекс источника, также содержит 1111 1111 1111 1111
- ES - дополнительный сегмент, также содержит 1111 1111 1111 1111
- CS:IP - сегментный адрес кода и смещение в коде, используются для выполнения команд процессора
- SS:SP - сегментный адрес стека и смещение в стеке, используются для хранения и извлечения данных из стека Список действий в коде:
- Объявить переменные DS, SI, ES, CS:IP, SS:SP
- Присвоить DS, SI, ES значение 1111 1111 1111 1111
- Присвоить CS:IP значение DS:SI
- Присвоить SS:SP значение DS:SI Следует отметить, что данный код не является полным и может не работать в контексте программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д