![]() |
|
|
![]()
|
|
| Compositum |
|
|||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Доброго времени суток.
Читаю Питера Абеля. Фрагмент кода:
Абель пишет, что после ASSUME обязательно нужно присваивать регистру DS нужный адрес сегмента данных (вторая и третья строчки кода). Я не понял этого... Мы ведь в ASSUME уже присвоили регистрам CS, DS и SS нужные адреса (насколько я понял)... Тогда для чего выполнять повторное присваивание регистру DS? Мы ведь для CS и SS этого не делаем. Чем так выделился DS? Best Regards Это сообщение отредактировал(а) Compositum - 14.3.2012, 09:50 |
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
потому что он норкоман
заголовок ехе файла (мсдос часть) выглядит так
Как мы видим значения cs, ss,sp определены там, а ds после запуска может содержать что угодно, поэтому его нужно явно указывать. -------------------- |
|||
|
||||
| Compositum |
|
|||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
т.е. для dos приложений наличие в ASSUME выражения "DS:DATA" попросту игнорируется?
|
|||
|
||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
это не команда ассемблера а макрос компилятора который намекает линковщику какие значения засунуть в заголовок файла. -------------------- |
|||
|
||||
| LeonidPr |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
Цитата с citforum-а из доки по MASM
Я так понимаю, что директива ASSUME указывает, какой сегментный регистр будет использоваться для доступа к переменным, объявленным в сегменте с указанным именем Например:
если бы в список ASSUME не было внесено es:data2, то ассемблер бы не знал, через какой сегментный регистр адресоваться к переменной x2. Мы же ему явно указываем - через ES --------------------
pkunzip.zip |
||||
|
|||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
смотря чем компилять )
-------------------- |
|||
|
||||
| LeonidPr |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
Ну я так понял (по примеру кода и по книге), что человек пользуется TASM или MASM.
Там это актуально.
Я так понимаю это FASM? Год назад чуток поковырялся в нем (KolibriOS заинтересовала). Насколько я понимаю, директива ASSUME имеет предписательный характер (предписывает ассемблеру вносить префикс сегмента перед инструкцией, обращающейся к данным внутри него), хотя за обращение к данным, расположенным в сегменте, не упомянутом в ASSUME, вы в TASM/MASM получите сообщение об ошибке. Видимо разработчики FASM возложили обязанность следить за тем, через какой сегментный регистр обращаться к данным на плечи программиста. Т.е. мой пример выглядел бы как-то так:
--------------------
pkunzip.zip |
||||
|
|||||
| Compositum |
|
||||||||||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
В книге описывается работа с 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. Проверил листинг - вроде ошибок нет... Если кто-нить может помочь - буду весьма признателен. Подробность справки оставляет желать лучшего:
Спасибо. Это сообщение отредактировал(а) Compositum - 14.3.2012, 21:47 |
||||||||||
|
|||||||||||
| LeonidPr |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
Вот им и надо пользоваться, можно версию поновее поискать. Я не слежу за изданиями Абеля, о вроде все его книги - о программировании под DOS. Ваша программа то же под DOS. нельзя её собирать в Visual Studio, эта IDE не предназначена для создания DOS приложений. Вот в этой ветке я давал ссылку, где можно скачать masm. Попробуйте им попользоваться. Можете скачать TASM, Borland C 3.1, Turbo Pascal 7.0. В любой их этих пакетов входит ассемблер TASM. Мне кажется, любой из примеров из вашей книги он соберет. Хотя лучше всего конечно найти MASM 6.1 (тот, который описывается в книге), не нужно будет тогда отвлекаться на всякие различия в ассемблерах, а сконцентрироваться на изучении языка и архитектуры ЭВМ. Это сообщение отредактировал(а) LeonidPr - 15.3.2012, 07:13 --------------------
pkunzip.zip |
|||
|
||||
| Compositum |
|
|||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Дело в том, что я бы хотел пользоваться такими инструментами, которые пригодились бы мне в работе. Можно конечно по книгам писать под DOS, но ведь в реальной жизни мне придётся писать под Windows, Linux, Mac OS. Книг на русском, в котором бы программирование на ассемблере рассматривалось бы на Yasm/Fasm под указаные мною ОС я не видел (за исключением этой, но для меня, как для новичка, Абель излагает материал гораздо понятней и подробней).
|
|||
|
||||
| LeonidPr |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 17.2.2012 Где: г. Чебоксары Репутация: нет Всего: 1 |
У каждого инструмента есть свое назначение. Использование его не по назначению приведет к тому, что либо вы вообще ничего не сможете сделать этим инструментом, либо сделаете, но через одно место.
Тогда почему вы читаете книгу, в которой говорится как писать под DOS?
Абель предлагает примеры программ под DOS. Эти программы не предполагают какого-либо использования возможностей, предоставляемых вам со стороны Windows. Да, их можно запустить в Windows, но от этого они не становятся полноценными Windows приложениями. Вы противоречите сами себе. Говорите, что хотите писать под Windows, Linux, Mac OS, но при этом читаете книгу по программированию в DOS. Во-первых, в разделе ASM есть тема, в которой обсуждаются книги по ассемблеру. Поищите там, может найдете что-нибудь более подходящее чем Абель (могу предложить книгу Юрова, вернее обе книги - учебник и практикум). Во-вторых, если вы все же хотите учиться по Абелю, тогда готовьтесь, что вам придется какое-то время поучиться программировать под DOS. ИМХО, в чем-то полезный опыт. Когда более-менее поймете что к чему, сможете ориентироваться в ассемблере и понимать более сложные книжки, перейдете к их изучению. --------------------
pkunzip.zip |
||||||
|
|||||||
| 500mhz |
|
|||
![]() шайтан ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1017 Регистрация: 5.5.2008 Где: Киев / Italy Репутация: 1 Всего: 14 |
для программирования на асме под винду и вообще есть прекрасный ресурс wasm.ru
-------------------- |
|||
|
||||
| Compositum |
|
|||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
спасибо, буду изучать. |
|||
|
||||
![]()
|
| Правила форума "Asm для начинающих" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Asm для начинающих | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |