![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 01.03.2015
Сообщений: 118
|
![]()
Здравствуйте, объясните какая роль у Selector(сегментные регистры),кроме того что DS:для данных, CS:кода и SS:стек, что конкретно можно с ними делать, желательно пример если можно.MASM. Спасибо.
Последний раз редактировалось Sterben; 27.06.2016 в 17:51. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
..да мало-ли чего? Нужно понять, что регистры CS/DS/ES/SS юзаются только под досом, т.е. только в сегментной модели памяти. Под вынью они лишены смысла, т.к. в плоской модели памяти винды нет сегментов, а есть только одни смещения. Адресация у них такая:
- для доса: 0000:0000h (seg ![]() - для винд: 0x00000000h (offset) FFFFFFFFh = 4.294.967.295 байт = 4 Gb Под досом, они предназначены для адресации к различным сегментам памяти. Допустим, нам нужно считать/записать какие-нить данные с "чужого" сегмента, например считать вектор с таблицы прерываний, или записать данные напрямую в видеобуфер. Таблица прерываний лежит по адресу 0000:0000h, видео/буфер в текст.режиме начинается с B800:0000h, а дос загрузил тело нашей программы по адресу: Код:
Код:
Ещё один пример можно привести с использованием их в строковых командах. Имена сегментных регистров жёстко привязаны к некоторым операциям, типа LODSB/STOSB: - LODSB читает байт в регистр AL, из ячейки памяти DS:SI - STOSB пишет значение байта AL, в ячейку памяти ES:DI На практике, чтоб загнать текстовую строку расположенную в сегменте данных нашей программы в тот-же сегмент видеобуфера будет выглядеть так.. (к слову, он организован как в дампе выше: символ(4D) + его атрибут(07), что даёт возможность выводить цветные строки): Код:
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
#3 | |
Участник клуба
Регистрация: 11.01.2010
Сообщений: 1,139
|
![]()
Привет, R71MT!
Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 16.06.2011
Сообщений: 1,428
|
![]()
Mikl___, спасибо!
Честно сказать - не знал. Всегда применял, как и описывают в манах..
Нашедшего выход - затаптывают первым..
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Адрессация | paralon | Помощь студентам | 1 | 10.06.2014 08:16 |
сегментные регистры | Dimarik | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 10 | 05.09.2011 13:29 |
pascal сегментные часы | world12_tk | Помощь студентам | 9 | 03.06.2009 22:20 |
Регистры | Elm0 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 13 | 10.02.2008 19:49 |