Вопрос № 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. То есть получается, что у меня два ...
Вопрос № 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, а библиотеку необходимых процедур: работа со строками, с памятью, с графикой, с мышкой и др. Можно конечно сказать, что я изобретаю велосипед, но тем не менее. Так что процедур будет много. Короче ни совета, ни ответа.
<
/tr>
Отвечает: 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? Мне кажется, что любая написанная мною программа, скорее всего, будет обрабатываться одним из процессоров
и проблем не будет, но все-таки хотелось бы уточнить.
Отвечает: Евгений Иванов
Здравствуйте, 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