Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler (Ассемблер)

Выпуск № 663
от 23.01.2007, 01:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 371, Экспертов: 35
В номере:Вопросов: 4, Ответов: 8


Вопрос № 71349: Хотел вот спросить, точнее даже посоветоваться. Кто что думает. Пишу библиотеку необходимых мне процедур. И вот несколько проблем: 1. Не знаю, что лучше макросы или процедуры. С одной стороны макросы удлиняют программу, но они не компилятся ...
Вопрос № 71369: Уважаемые эксперты, подскожите ,пожалуйста,почему при запуске программы в Far и Dos Navigator'е комп-тер ругается окном типа: 16 разрадная подсистема MS-DOS Процессор NTVDM обнаружил недопустимую инструкцию. CS:0dde IP:0d0a OP: 63 07 79 ...
Вопрос № 71426: Объясните в чем есть разница(не в мощности) процессоров: 1)Intel 2)AMD 3)ARM Доплните список....???...
Вопрос № 71432: Доброго времени суток. Я вот тоже решил освоить Assembler. Накачал книжек, скачал пакет TASM 5.0, отладчик AFD pro. Но проблема в том, что у меня платформа Sociket 939, а процессор AMD 3800+ X2 Dual Core. То есть получается, что у меня два ...

< /tr>
Вопрос № 71.349
Хотел вот спросить, точнее даже посоветоваться. Кто что думает. Пишу библиотеку необходимых мне процедур.
И вот несколько проблем:
1. Не знаю, что лучше макросы или процедуры. С одной стороны макросы удлиняют программу, но они не компилятся если их не используешь. С другой стороны процедуры не повторяются в коде, но всегда приходится таскать хвост не нужных процедур (если только не переписывать их каждый раз по новой, ну или копировать из уже написанных модулей). Есть вариант оформлять каждую процедуру в отдельном inc-файле, но потом достанет include-ить все процедуры. Хочется прописать один раз include mylib.inc и все. Тут же возникает резонный вопрос, раз уж процедуры нерациональны, в чем их нерациональность? Накладные расходы при вызове. Но насколько ресурсоемок этот вызов? Поместить адрес возврата и несколько переменных в стек и выполнить прыжок потов вернуться обратно. Вроде не так уж страшно. Тогда в чем прелесть макросов. Или их использование ограничено только не повторяющимися действиями и содержащих в себе небольшое количество строк. Другими словами, если на выполнение алгоритма тратится меньше времени чем на его вызов, то нужно оформлять его как макрос. Или макросы используются в основном для создания определений типа if…else и у них немного разное предназначение.
Короче я просто хочу услышать мнение тех, кто писал что-то подобное для себя. Просто посоветуйте. Мне нужно удобство и оптимальность работы.
А теперь внимание, вопрос:
2. Что дает использование lib-файлов, если даже при сборке exe-шника он получается больше чем, если бы он был написан сразу одним файлом, а не собирался из нескольких. В чем заключается преимущество или удобство?
Отправлен: 17.01.2007, 13:58
Вопрос задал: Oxaid (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Евгений Иванов
Здравствуйте, Oxaid!

Макросы нужны для записи повторяющихся однотипных действий.
Это по большей части данные, а не код.

Библиотеки есть библиотеки. Когда будешь писать большой проект - оценишь. А сейчас, когда ты пишешь "Hallo world", тебе они не нужны.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 17.01.2007, 15:56
Оценка за ответ: 3
Комментарий оценки:
Смысл не в этом. Можно писать теже библиотеки с помощью *.inc - файлов. Я вот и хотел узнать есть ли смысл использовать *.lib. В крайнем случае можно *.obj-ектов наделать, а потом их вместе собрать.

Что значит - макросы это данные, а не код? Макросы - это подстановки кода. Мы же не подставляем данные, записанные в макросах.

Я пишу не Hello world, а библиотеку необходимых процедур: работа со строками, с памятью, с графикой, с мышкой и др. Можно конечно сказать, что я изобретаю велосипед, но тем не менее. Так что процедур будет много. Короче ни совета, ни ответа.

Отвечает: ramok
Здравствуйте, Oxaid!

1. Макросы для кода, тоже самое что inline фунции введенные в C++.
Применяют их для оптимизации, когда например у вас гиганский цикл и там
миллионы раз вызывается фунция, то там целесообразнее применить макросы,
так как при таком кол-ве вызовов call может сказыватся на производительности.

2. Библиотери обычно компануются по фунционалу: "библиотека работы со строками",
"библиртека работы с диском".... общепринятая практика. следовать ей или нет это
ваше личное дело.

3. преимущество .lib перед .inc в скорости компилирования. когда в ваших
программах будет подключатся 10-ки .inc модулей скорость компиляции существенно
упадет. а в .lib компиляция не происходит, а только линковка.

классический пример постоения своей библиотеки происходит в книге Тома Свана "Освоение Turbo Assembler" по мере прочтения книги. поискал в интеренете но ненашел Ж:-
Ответ отправил: ramok (статус: 10-ый класс)
Ответ отправлен: 18.01.2007, 03:13
Оценка за ответ: 5

Отвечает: Вiктор
Здравствуйте, Oxaid!
Я советую вам все необходимые функции компилировать в *.obj -модули, причём каждую функцию в свой модуль, а затем объединить все модули в одну *.lib-библиотеку. Насколько я помню, при использовании библиотеки будут подключаться только те модули, которые вызываются. В этом, по-моему, и заключается их удобство.
ну и ещё, в либ-файлах код уже скомпилирован. Т.е. если вы подключаете функцию в текстовом виде через inc, то она ещё будет компилироваться, а если вы подключаете её в виде *.obj (*.lib), то код уже скомпилирован, идёт уже только редактирование связей.
А вообще, мне очень хорошим вариантом представляется DLL - тут уж действительно можно использовать только то, что нужно.
(лично я за процедуры, но это только от неумения пользоватся макросами :-)
удачи!
---------
ни дня без строчки (но не получается)
Ответ отправил: Вiктор (статус: Студент)
Ответ отправлен: 18.01.2007, 16:53
Оценка за ответ: 4


Вопрос № 71.369
Уважаемые эксперты, подскожите ,пожалуйста,почему при запуске программы в Far и Dos Navigator'е комп-тер ругается окном типа:
16 разрадная подсистема MS-DOS
Процессор NTVDM обнаружил недопустимую инструкцию.
CS:0dde IP:0d0a OP: 63 07 79 07 73
(прога в приложении)
P.S.
Подскжите пожалуста что такое OP ?

Приложение:

Отправлен: 17.01.2007, 16:42
Вопрос задал: Loriendil (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Лысков Игорь Витальевич
Здравствуйте, Loriendil!
И правильно делает, что ругается!
Ты же поместил данные (db) в последовательность команд.
Отработав int 21h, процессор интерпретирует следующие байты как команды,
пытается их выполнить (а там мусор с точки зрения нормального выполнения!), и как результат залетает на ошибочный код команды (т.е. недопустимую инструкцию)
В сообщении указана последовательность байт, которая попалась процессору по адресу CS:IP, и которая не является корректной командой.
Чтобы исправить, необходимо все строки db перенести в конец, за int 20h или обходить командами jmp
---------
Удачи!
Ответ отправил: Лысков Игорь Витальевич (статус: Практикант)
Ответ отправлен: 17.01.2007, 17:27
Оценка за ответ: 5

Отвечает: Олег Владимирович
Здравствуйте, Loriendil!

CS:0DDE IP:0D0A - адрес обнаруженной инструкции
OP: 63 07 79 07 73 - сама инструкция (ARPL что-то там - применима только в защищённом режиме)

Ошибка возникла из-за того, что вы смешали код с данными: после
mov ah,9
mov dx, offset msg
int 21h
процессор пошёл выполнять инструкции, записанные далее по тексту -
db 'Press any key?$'

НО ошибка даже не здесь. При выполнении программы DS указывает не на CSEG! Его надо явно инициализировать!

Решение:
надо все данные записать после кода, см приложение.
Кстати, исправил ещё несколько неточностей.
Удачи!

Приложение:

---------
Факультет ПМ-ПУ - лучший в СПбГУ!

Ответ отправил: Олег Владимирович (статус: 10-ый класс)
Ответ отправлен: 17.01.2007, 17:32
Оценка за ответ: 5


Вопрос № 71.426
Объясните в чем есть разница(не в мощности) процессоров:
1)Intel
2)AMD
3)ARM

Доплните список....???
Отправлен: 17.01.2007, 21:35
Вопрос задал: MBO (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: ramok
Здравствуйте, MBO!

Если я правильно понял ваш вопрос, то вам нужно описание и сравнения расспространенных архитектур процессоров

введение где объяснено что такое RISC и CISC процессоры
http://www.terralab.ru/system/235190/

тут есть описание ARM, а за одно и других популярных альтернативных платформ
http://www.terralab.ru/system/235565/

история противостояния intel и amd до pentium II
http://www.3dnews.ru/editorial/amd-vs-intel/
Ответ отправил: ramok (статус: 10-ый класс)
Ответ отправлен: 18.01.2007, 04:35
Оценка за ответ: 5
Комментарий оценки:
Есть.


Вопрос № 71.432
Доброго времени суток.

Я вот тоже решил освоить Assembler. Накачал книжек, скачал пакет TASM 5.0, отладчик AFD pro. Но проблема в том, что у меня платформа Sociket 939, а процессор AMD 3800+ X2 Dual Core. То есть получается, что у меня два процессора и, как я понимаю, два набора регистров. А вопрос мой следующий: как мне работать с отладчиком? Процессоров-то два, так что я не понимаю, регистры какого из процессоров будет мониторить AFD? Мне кажется, что любая написанная мною программа, скорее всего, будет обрабатываться одним из процессоров и проблем не будет, но все-таки хотелось бы уточнить.

Заранее спасибо.
Отправлен: 17.01.2007, 22:18
Вопрос задал: Darth AmbaL (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Евгений Иванов
Здравствуйте, Darth AmbaL!

Со стороны программы будет виден только один процессор. Так что проблем не будет, не бойся.
---------
Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Россия, Нижний Новгород
Тел.: +78313145721
Организация: M2Media.ru
Адрес: Нижний Новгород, ул.Малая Ямская
WWW: Eugene Ivanov
ICQ: 214889076
----
Ответ отправлен: 17.01.2007, 22:43

Отвечает: ramok
Здравствуйте, Darth AmbaL!

Если не прилагать специальных усилий, то для вас с точки зрения программиста ничего не изменится и вы будете работать на одном процессоре и проблем не должны быть
Ответ отправил: ramok (статус: 10-ый класс)
Ответ отправлен: 17.01.2007, 22:45


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.41 beta от 19.01.2007
Яндекс Rambler's Top100

В избранное