| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Asm для начинающих > Повторная инициализация DS |
| Автор: Compositum 14.3.2012, 09:48 | ||
| Доброго времени суток. Читаю Питера Абеля. Фрагмент кода:
Абель пишет, что после ASSUME обязательно нужно присваивать регистру DS нужный адрес сегмента данных (вторая и третья строчки кода). Я не понял этого... Мы ведь в ASSUME уже присвоили регистрам CS, DS и SS нужные адреса (насколько я понял)... Тогда для чего выполнять повторное присваивание регистру DS? Мы ведь для CS и SS этого не делаем. Чем так выделился DS? Best Regards |
| Автор: 500mhz 14.3.2012, 10:13 | ||
| потому что он норкоман заголовок ехе файла (мсдос часть) выглядит так
Как мы видим значения cs, ss,sp определены там, а ds после запуска может содержать что угодно, поэтому его нужно явно указывать. |
| Автор: Compositum 14.3.2012, 10:20 |
| т.е. для dos приложений наличие в ASSUME выражения "DS:DATA" попросту игнорируется? |
| Автор: 500mhz 14.3.2012, 12:16 | ||
это не команда ассемблера а макрос компилятора который намекает линковщику какие значения засунуть в заголовок файла. |
| Автор: LeonidPr 14.3.2012, 16:02 | ||||
Цитата с citforum-а из доки по MASM
Я так понимаю, что директива ASSUME указывает, какой сегментный регистр будет использоваться для доступа к переменным, объявленным в сегменте с указанным именем Например:
если бы в список ASSUME не было внесено es:data2, то ассемблер бы не знал, через какой сегментный регистр адресоваться к переменной x2. Мы же ему явно указываем - через ES |
| Автор: 500mhz 14.3.2012, 17:01 | ||
смотря чем компилять )
|
| Автор: LeonidPr 14.3.2012, 19:39 | ||||
| Ну я так понял (по примеру кода и по книге), что человек пользуется TASM или MASM. Там это актуально.
Я так понимаю это FASM? Год назад чуток поковырялся в нем (KolibriOS заинтересовала). Насколько я понимаю, директива ASSUME имеет предписательный характер (предписывает ассемблеру вносить префикс сегмента перед инструкцией, обращающейся к данным внутри него), хотя за обращение к данным, расположенным в сегменте, не упомянутом в ASSUME, вы в TASM/MASM получите сообщение об ошибке. Видимо разработчики FASM возложили обязанность следить за тем, через какой сегментный регистр обращаться к данным на плечи программиста. Т.е. мой пример выглядел бы как-то так:
|
| Автор: Compositum 14.3.2012, 21:44 | ||||||||||
| В книге описывается работа с MASM 6.1. У меня на руках Windows XP SP3 x86 с установленной на ней MS Visual Studio 2010. Соответственно хочу воспользоваться ассемблером, который присутствует в составе этой IDE - Macro Assembler Version 10.00.40219.01. В указанной мною книге имеется такой код:
Данный код я хочу сначала оттранслировать, затем скомпоновать. Запускаю командную консоль MS Visual Studio 2010:
задаю такую команду:
Однако получаю следующий результат:
Я так понял, что по какой-то причине не был создан файл A04ASM1.obj. Проверил листинг - вроде ошибок нет... Если кто-нить может помочь - буду весьма признателен. Подробность справки оставляет желать лучшего:
Спасибо. |
| Автор: LeonidPr 15.3.2012, 07:12 | ||
Вот им и надо пользоваться, можно версию поновее поискать. Я не слежу за изданиями Абеля, о вроде все его книги - о программировании под DOS. Ваша программа то же под DOS. нельзя её собирать в Visual Studio, эта IDE не предназначена для создания DOS приложений. http://forum.vingrad.ru/forum/topic-348043/hl/masm32/index.html я давал ссылку, где можно скачать masm. Попробуйте им попользоваться. Можете скачать TASM, Borland C 3.1, Turbo Pascal 7.0. В любой их этих пакетов входит ассемблер TASM. Мне кажется, любой из примеров из вашей книги он соберет. Хотя лучше всего конечно найти MASM 6.1 (тот, который описывается в книге), не нужно будет тогда отвлекаться на всякие различия в ассемблерах, а сконцентрироваться на изучении языка и архитектуры ЭВМ. |
| Автор: Compositum 15.3.2012, 10:17 |
| Дело в том, что я бы хотел пользоваться такими инструментами, которые пригодились бы мне в работе. Можно конечно по книгам писать под DOS, но ведь в реальной жизни мне придётся писать под Windows, Linux, Mac OS. Книг на русском, в котором бы программирование на ассемблере рассматривалось бы на Yasm/Fasm под указаные мною ОС я не видел (за исключением http://assembler-x86-64.ru/, но для меня, как для новичка, Абель излагает материал гораздо понятней и подробней). |
| Автор: LeonidPr 15.3.2012, 11:55 | ||||||
У каждого инструмента есть свое назначение. Использование его не по назначению приведет к тому, что либо вы вообще ничего не сможете сделать этим инструментом, либо сделаете, но через одно место.
Тогда почему вы читаете книгу, в которой говорится как писать под DOS?
Абель предлагает примеры программ под DOS. Эти программы не предполагают какого-либо использования возможностей, предоставляемых вам со стороны Windows. Да, их можно запустить в Windows, но от этого они не становятся полноценными Windows приложениями. Вы противоречите сами себе. Говорите, что хотите писать под Windows, Linux, Mac OS, но при этом читаете книгу по программированию в DOS. Во-первых, в разделе ASM есть тема, в которой обсуждаются книги по ассемблеру. Поищите там, может найдете что-нибудь более подходящее чем Абель (могу предложить книгу Юрова, вернее обе книги - учебник и практикум). Во-вторых, если вы все же хотите учиться по Абелю, тогда готовьтесь, что вам придется какое-то время поучиться программировать под DOS. ИМХО, в чем-то полезный опыт. Когда более-менее поймете что к чему, сможете ориентироваться в ассемблере и понимать более сложные книжки, перейдете к их изучению. |
| Автор: 500mhz 15.3.2012, 20:36 |
| для программирования на асме под винду и вообще есть прекрасный ресурс wasm.ru |
| Автор: Compositum 15.3.2012, 20:41 | ||
спасибо, буду изучать. |