Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.03.2010, 18:49   #11
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

Ну тогда могу сказать следующее. Это сегментные регистры. В реальном режиме хранят сегментные адреса начал сегментов данных (es-указывает на доп сегмент данных), 16 разрядные. Сегментнй адрес=физ. адрес/16.
В звщищенном режиме хранят селокторы дескрипторов, грубо говоря порядковый номер дескриптора в таблицах, также 16 битные, но младшие 3 бита используются для
0-1 RPL
2-местоположение дескрипотора, если 0 в GDT если 1 в LDT

Если формат программы ex, то значене регистра ds нужно настраивать так
mov ax,@data
mov ds,ax
@data-сегментное смещение начала сегмента данных, относительно начала сегмента кода в выравненом файле.
В com программах настройка идет при помощи команды org 100h

Вот что помню из курса аппараток
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 17.03.2010, 22:55   #12
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

Цитата:
Сообщение от Sparky Посмотреть сообщение
В com программах настройка идет при помощи команды org 100h
в этом Вы заблуждаетесь
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 18.03.2010, 16:43   #13
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию

насколько знаю в самом начале сом программы регистры cs,ds,es указывают на начало PSP, для того что бы настроить регистры используется команда org 100h, вроде как-то так
Единственное, что ограничивает полет мысли программиста-компилятор
Sparky вне форума Ответить с цитированием
Старый 18.03.2010, 17:20   #14
Ivan_32
somewhere else
Участник клуба
 
Аватар для Ivan_32
 
Регистрация: 17.07.2008
Сообщений: 1,409
По умолчанию

ORG всего указывает на начальный адрес программы, дабы все прыжки относительно меток были правильными. Скажем есть некая подпрограмма:
mov cx,0x200 ;3 байта
cmp word[ecx],0xAA55 ; 3 байта.
jne someLabel ;3 байта.
ret ; 1 байт.
someLabel: ; следовательно эта метка указывает на адрес 0xA
mov eax,4
ret
Если поставить в начале этой подпрограммы ORG 0x55 то получится что метка будет указывать на адрес 0x55+A=0x5F.

Для чего это собственно сделано. По дефолту любой приличный компилятор будет проставлять нулевое смещение - т.е. отсчет будет с нуля. Это вполне валидно если ваша программа загружается с нуля, но что делать когда это не так? Вот собственно для этого и существует эта директива препроцессора. Конечно всегда можно загрузить в CS эквивалентный сегмент и прыгнуть к нужному смещению.

А что касается настройки CS DS ES - то загрузчик DOS загружает эти регистры из MZ-заголовка.
PS: Sparky, не обижайтесь, эти данные не для вас,а для новичков которые сюда заглянут : )
"Тяжело в учении, легко в бою" - А.В. Суворов

Последний раз редактировалось Ivan_32; 18.03.2010 в 17:23.
Ivan_32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Assembler cold-hands Помощь студентам 1 07.11.2009 19:56