Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler, MASM, TASM

Войти
Регистрация
Восстановить пароль
 
JohnyWalker
189 / 77 / 8
Регистрация: 15.11.2010
Сообщений: 472
#1

Библиотеки ввода-вывода для ассемблера - Assembler

27.10.2016, 19:15. Просмотров 922. Ответов 6
Метки нет (Все метки)

Здравствуйте, форумчане!

Помогите мне, пожалуйста, разобраться с таким вопросом.

Существуют ли для популярных ассемблеров, таких как MASM, NASM и другие известные продукты, библиотеки ввода-вывода, содержащие все необходимые макросы и процедуры ввода-вывода? В данный момент меня интересуют такие библиотеки для Windows и всяких Unix-подобных операционных систем (Linux, FreeBSD, Solaris и пр.). Если назовёте мне библиотеки этого рода для DOS, буду признателен, но под DOS в 16-битном режиме программировать я не буду, так как время таких систем всё равно уже прошло.

Я понимаю, что ввод-вывод можно сделать и самому через системные вызовы Unix или Win API, если программа пишется для Windows. Это не так и сложно, но не хочется этим постоянно заниматься, создавая подпрограммы считывания и записи строки в консоль, перевода числа из алфавитного представления в машинное и обратно, в общем, выполняя рутинную и бессмысленную работу. Я и хотел поэтому узнать, есть ли признанные и завоевавшие популярность библиотеки ввода-вывода для известных диалектов ассемблера под платформу x86? Или же ничего такого нет и обычно все программисты, много и серьёзно пишущие на ассемблере, просто цепляют через линкер к своим программам стандартную библиотеку языка C libc или что-то ей подобное, разобравшись предварительно с соглашениями вызова функций, принятыми в C?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2016, 19:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Библиотеки ввода-вывода для ассемблера (Assembler):

Программа для ввода-вывода символа (ПС286 по COM-порту) - Assembler
Добрый день!Хотелось бы получить советы или рекомендации по давно мучающему меня вопросу. Есть следующая проблема: установка через свой...

Написать программу с использованием функций 3Fh и 40h для ввода и вывода строк на экран. - Assembler
Написать программу с использованием функций 3Fh и 40h для ввода и вывода строк на экран. Символы копировать через стек с помощью команд...

Программирование ввода-вывода - Assembler
Прошу написать код для двух заданий из двух частей: 1)Прокрутить 10 строк вверх(строка 05-15,столбец 00-09).Атрибут-красный,нормальный ...

Работа с портами ввода вывода - Программирование
Всем привет! Такой вопрос, неужели под виндой при наличии стандартных драйверов нет возможности чтения портов клавиатуры, мыши и прочих...

Программирование на уровне портов ввода-вывода - Assembler
Здравствуйте! Помогите кто чем может! На входном языке Ассемблер разработать программу, которая выводит текущую дату используя информацию...

Функции ввода/вывода текстовой информации - Assembler
Помогите решить задачку. Ввести строку из 12 символов. Из введенной строки удалить символ ‘о’.

6
Ol44
702 / 83 / 15
Регистрация: 10.07.2016
Сообщений: 140
28.10.2016, 01:23 #2
Работать с консолью это архаизм, а если в окошках, то например GetDlgItemInt/SetDlgItemInt. Но даже писать под окошки становится несколько старовато, всё переходит в сеть или как сейчас модно говорить в облако. Там ввод/вывод тоже осуществляется через вызовы подпрограмм, серверная часть на асме, клиентская разумеется html/css/javascript.
Подключать библиотеки C возможно, но нужно ли? Лично мне ни разу не пришлось.
0
JohnyWalker
189 / 77 / 8
Регистрация: 15.11.2010
Сообщений: 472
28.10.2016, 07:18  [ТС] #3
Цитата Сообщение от Ol44 Посмотреть сообщение
Работать с консолью это архаизм, а если в окошках, то например GetDlgItemInt/SetDlgItemInt. Но даже писать под окошки становится несколько старовато, всё переходит в сеть или как сейчас модно говорить в облако. Там ввод/вывод тоже осуществляется через вызовы подпрограмм, серверная часть на асме, клиентская разумеется html/css/javascript.
Подключать библиотеки C возможно, но нужно ли? Лично мне ни разу не пришлось.
Работать с асмом сейчас тоже архаизм (особенно если речь идёт о написании прикладных программ для настольных систем), но ведь работают же некоторые.

Консоль мне нужна — с консолью работать планирую.

Для работы с окошками, как я понимаю, лучше всего подойдёт стандартный WinAPI с оконной функцией и очередью сообщений. Но и там классические функции ввода-вывода, насколько я понимаю, не помешают, например, для перевода числа в строковое символьное представление, что-то вроде функций atoi(), strtod(), sprintf(), wsprintf() и т. д. Эти функции понадобятся для формирования строки перед выводом её на экран уже функцией WinAPI, поскольку сам WinAPI функций, позволяющих сформировать строку, не содержит, насколько я знаю. Имея лишь WinAPI, придётся, допустим, преобразование числа из алфавитной строковой формы в машинную и наоборот писать на ассемблере самому. Это совсем не сложно, но является изобретением велосипеда. Поэтому классическая удобная библиотека ввода-вывода полезна как при работе с консолью, так и при работе с WinAPI в оконном режиме.

С облаком не работал и работать не собираюсь, тем более писать клиент-серверное приложение с браузерным интерфейсом.

Так что вопрос по-прежнему актуален. Ищу удобную универсальную библиотеку ввода-вывода для какого-нибудь из популярных ассемблеров - MASM, NASM и т. д.
0
Ol44
702 / 83 / 15
Регистрация: 10.07.2016
Сообщений: 140
28.10.2016, 17:49 #4
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Работать с асмом сейчас тоже архаизм (особенно если речь идёт о написании прикладных программ для настольных систем), но ведь работают же некоторые.
Если использовать аналогии, то асм это как нанотехнологии, которые нужны только в высокотехнологичных производствах и далеко не везде, но там без них ни как. Заменить там асм нечем и поэтому говорить об архаизме это показывать неграмотность.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
что-то вроде функций atoi(), strtod(), sprintf(), wsprintf()
Если есть желание использовать именно их, длл вам в руки.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
С облаком не работал и работать не собираюсь, тем более писать клиент-серверное приложение с браузерным интерфейсом.
А зря, если быть "в теме" это не сложней и не дольше, чем в консоли что-то делать. Там можно сказать тоже своего рода консоль, но более продвинутая, в которой нужно использовать штмл теги и в результате "за 5 минут" можно получить красивый и продвинутый интерфейс для ввода/вывода.
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Так что вопрос по-прежнему актуален. Ищу удобную универсальную библиотеку ввода-вывода для какого-нибудь из популярных ассемблеров - MASM, NASM и т. д.
Обычно все под себя изобретают такие велосипеды и используют их направо налево годами, а начинают тоже с wsprintf и подобного.
0
JohnyWalker
189 / 77 / 8
Регистрация: 15.11.2010
Сообщений: 472
29.10.2016, 10:34  [ТС] #5
Ol44, ты совершил одну большую ошибку. Вместо того чтобы чётко и понятно ответить на поставленный мною вопрос, ты зачем-то стал убеждать меня в неверности избранного мною пути и начал рассказывать мне про правильный подход в программировании. В общем, как говорят попы в церкви, стал наставлять меня на путь истинный. Ol44, как бы это помягче сказать... Это ведь показатель недалёкости.

Ну, смотри. В стартовом сообщении мной был задан вопрос, существуют ли для разных версий языка ассемблера библиотеки ввода-вывода, что-то вроде сишных stdio.h, string.h, stdlib.h и. т. д. Чётко, ясно, понятно. Вместо того чтобы дать квалифицированный и такой же чёткий ответ, ты ударился в философствования о том, что консоль де это уже не модно, она устарела, окошки тоже не соответствуют духу времени, а сейчас лучшие программисты мира пишут интерфейсы к своим программам на html, а облака — это наше светлое будущее. Прямо как у того героя — "Васюки переименуют в Нью-Москву, Москву переименуют в Нью-Васюки". К слову сказать, язык гипертекстовой разметки известен уже почти 30 лет — тоже мне "суперсовременная" технология. Но меня вся эта философская муть нисколько не интересовала. Меня волновал простой приземлённый вопрос. А если бы я хотел обсудить здесь проблему проектирования интерфейсов к прикладным программам, я бы задал вопрос совсем в другой форме. В общем, в твоих ответах для меня содержится 0 бит полезной информации.

Теперь я всё же попробую прокомментировать твой последний пост...

Добавлено через 4 часа 4 минуты
Цитата Сообщение от Ol44 Посмотреть сообщение
Если использовать аналогии, то асм это как нанотехнологии, которые нужны только в высокотехнологичных производствах и далеко не везде, но там без них ни как. Заменить там асм нечем и поэтому говорить об архаизме это показывать неграмотность.
Про нанотехнологии я ничего не скажу, это вопрос сложный, по нему лучше обращаться к господину Чубайсу — он у нас нанотехнолог всея Руси. Если же говорить серьёзно, ассемблер как язык программирования, как средство написания программ сейчас очень редко где используется. Причина этого трудоёмкость и большая затратность по времени, плюс непереносимость получившихся программ. Тем не менее, есть несколько областей, где его до сих пор иногда применяют.

1. Оптимизация программ по скорости выполнения. Обычно для этой цели на ассемблере переписывают небольшие куски программы, в основном, это циклы, тело которых многократно повторяется в процессе вычисления. Чтобы добиться серьёзного прироста производительности, нужно обладать довольно глубокими и специфическими знаниями о внутреннем устройстве процессора. Надо знать, как примерно работают ALU и FPU, и сколько тактов они затрачивают на исполнение той или иной арифметической команды, чтобы определить, какую из нескольких альтернативных равнозначных последовательностей операций, приводящих к одному и тому же результату, использовать в программе. Надо иметь какое-то представление об организации суперскалярного процессора — сколько у него конвейеров, сколько у него ALU и FPU, чтобы составить последовательность команд таким образом, чтобы они равномерно раскидывались по конвейерам суперскалярника, чтобы как можно больше устройств процессора было загружено одновременно и выполняло полезную работу. Чтобы не было так, что, допустим, все команды в потоке обращаются к устройству одного и того же типа, а потому не могут быть хорошо распараллелены, в то время, как остальные устройства процессора в это время простаивают. Плюс встаёт вопрос пропускной способности шин кэшей разного уровня и эффективного использования самих кэшей. В общем, низкоуровневая оптимизация программы — штука сложная, мало кто её знает, она для каждого поколения процессоров имеет свои отличия. Да и, если верить литературе, редко когда удаётся ускорить выполнение программы таким путём больше чем в 2 — 3 раза. И то это очень много, не всегда это удаётся, как я понимаю. А если просто взять и переписать программу с C/C++ на ассемблер, не учитывая всех этих тонких вещей, вряд ли получишь прирост производительности больше, чем на 20% - 30%, максимум 40%. Оно больно кому нужно?

2. Оптимизация программ путём использования векторных расширений процессора. Это, как я понимаю, в случае x86 всякие MMX, SSE, AVX. RISC-процессоры (всякие SPARC'и, MIPS'ы и прочие) тоже имеют свои векторные наборы инструкций, подобные таковым у Intel. Тут действительно можно достичь хорошего прироста быстродействия по сравнению с использованием языка высокого уровня, т. к. ни C, ни C++, ни иные языки такого набора операций не имеют, а компиляторы, если верить попадавшимся мне источникам, толком пользоваться этими инструкциями и преобразовывать обычные скалярные операции в векторные не умеют. Тут нужна большая "интеллектуальная" способность компиляторов, которой они сейчас не обладают. Поэтому векторные наборы инструкций созданы для того, чтобы пользоваться ими через ассемблер напрямую. Так что на этом пути, переписав обычную "скалярную" программу как векторную, можно достичь больших успехов. Тут быстродействие без особых проблем можно поднять раза в 3 — 4. Правда, хорошо всё это для определённого класса задач — численные математические задачи, игры и т. д., т. е. там, где проводятся однородные расчёты над большими однородными массивами данных. В других случаях векторные расширения системы команд эффективно использовать вряд ли удастся.

3. Написание низкоуровневой части ядра операционной системы. Процедуры, отвечающие за формирование страниц виртуальной памяти, переход между разными кольцами защиты процессора, установка разных бит psw в нужные значения. Тут или ассемблер, или смесь ассемблера с C — других вариантов просто нет. Не исключено, что низкоуровневая инициализация шинных контроллеров тоже пишется на ассемблере. Но это всё очень маленькая, хоть и важная, часть ядра ОС, ассемблерный код там занимает меньше 1%.

4. Некоторые базовые драйвера пишутся с использованием ассемблера.

5. Для написания компилятора высокоуровневого языка необходимо знать ассемблер. Тут без него никак. Но здесь нужно даже более глубокое знание машины — необходимо знать формат машинной команды на уровне двоичных кодов. Плюс, здесь нужно знать формат ELF или COFF-файла.

Случай 1. и 2. используют лишь тогда, когда по каким-то причинам хотят выжать из машины всё до предела. Случаи 3., 4. и 5. — это системное низкоуровневое программирование, но и там это не такая большая часть от всего кода проекта.

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

Далее, по поводу консоли...

Писать, что она устарела и консольные программки никому не нужны, это какая-то глупость. Просто всему своё место. Для небольшой расчётной программы, не содержащей обилия опций, функций, настроек, консоль прекрасно подходит. Пишется просто, быстро, не содержит никаких ненужных отвлекающих частей в коде, не нужно рисовать её интерфейс при помощи мастеров в какой-нибудь Visual Studio и т. п. Такие программы, благодаря своей минималистичности, работают чётко, они очень удобны для автоматизации при помощи скриптов. Как ты будешь автоматизировать скриптами работу GUI-приложений? Для таких задач консольные программы прекрасно подходят. Потом их можно легко и эффективно встроить в GUI-приложение, используя механизм пайпов (или анонимных каналов в случае Windows). До сих пор все компиляторы пишут как консольные программы, встраивая их во всевозможные студии и IDE. Или, по-твоему, их авторы идиоты? Такие программы, как grep, diff, sed, awk, тоже имеют интерфейс командной строки. И что — кто-то из их пользователей испытывает серьёзные неудобства? И понятно, что никому в здравом уме такое чисто пользовательское приложение, как Word или Photoshop, не придёт в голову делать в консоли. Всему своё место, везде ищут какой-то здравый смысл. Где удобнее консоль и командная строка — пользуются ею, где удобнее и проще GUI - пользуются им.

А зря, если быть "в теме" это не сложней и не дольше, чем в консоли что-то делать. Там можно сказать тоже своего рода консоль, но более продвинутая, в которой нужно использовать штмл теги и в результате "за 5 минут" можно получить красивый и продвинутый интерфейс для ввода/вывода.
Ну не нужны мне браузерные интерфейсы, не интересуют, и всё, хотя не осуждаю тех, кто ими пользуется. Что же до т. н. облачных вычислений, моё мнение, это всего лишь мода. Она сойдёт, как снег весной. Это попытка IT-компаний придумать новую искусственную нишу, в которую запихать всех пользователей и стричь с них бабло. Где распределённые вычисления полезны (да хоть те же научные расчёты), они найдут своё применение. Но глупо делать облачную версию Word'а, Excel'я, Photoshop'а или какой-то видеоигры (если это только не сетевая игра с живыми соперниками).

Обычно все под себя изобретают такие велосипеды и используют их направо налево годами, а начинают тоже с wsprintf и подобного.
И опять ты ошибаешься, Ol44! Все бы их и изобретали, если бы не существовало подходящих наборов макросов и процедур в разных поставках. Но даже поверхностное изучение документации MASM32 показывает, что данный продукт содержит весьма обширную библиотеку функций. Из них немалую часть составляют именно функции ввода-вывода. Вот тебе примеры — прямо из документации.

StdIn proc lpszBuffer : DWORD, bLen : DWORD


Description

StdIn receives text input from the console and places it in the buffer required as a parameter. The function terminates when Enter is pressed.


Parameters

1. lpszBuffer The buffer to receive the text input from the console.
2. bLen The length of the buffer.


Есть такая же процедура StdOut.

Дальше. Открываем справочник MASM32 под названием "MASM32 Macro High Level Reference". Заходим через оглавление в раздел "Console Mode Macros". Там находим такие интересные макрокоманды, как getkey, input, print, printc и printf.
Последний макрос, судя по описанию, данному в этой справке, почти полностью соответствует аналогичной функции языка C. И так как это макрос, им можно пользоваться в сишной нотации, с открывающей и закрывающей круглой скобкой, не прибегая к встроенной макрокоманде invoke.

Далее, заходим из оглавления в раздел справки "File IO Macros". Там находим такие макросы, как fcreate, fopen, fread, fwrite, fprint и много других.

Получается, что MASM32 снабжён довольно богатой библиотекой ввода-вывода, не сильно уступающей таковой у C. А ты, Ol44, мне рассказывал сказки по то, что каждый программист на ассемблере пишет такие процедуры себе сам. Это сказки старой бабушки.

Да нет, я конечно смогу перевести целое число из машинной формы в строковую. Я знаю, что для этого достаточно число в цикле поделить на десять, сохранить остатки в массиве, а потом эти остатки переписать в обратном порядке в другой массив, предварительно прибавив к ним 30h (или 48 в десятичной системе) — это код нуля. Это отличная задача для обучения программированию на ассемблере начинающего программиста. Но заниматься разработкой процедур ввода-вывода всё время, когда хочется разобрать и другие примеры, согласись, довольно глупо.

Вот и получается, что форум (по крайней мере, форум российского разлива) совсем не нужен. Проку от него — ноль. Потратив вчера пару часов на изучение справки MASM32 SDK, я выудил гораздо больше полезной информации, чем здесь. А тут я потратил гораздо больше времени на споры и пустые философствования с тобой. При том, что по интересовавшей меня теме ни ты, ни кто-либо другой, не сообщил мне ничего полезного
1
Ol44
702 / 83 / 15
Регистрация: 10.07.2016
Сообщений: 140
29.10.2016, 16:54 #6
JohnyWalker, ты чего агришся то? Черепная коробка ничего не жмёт? Это форум и здесь каждый волен высказать своё мнение - не нравится не читай, я мельком пробежал по твоему посту, увидел много лишних букв и желания самоутвердится. Реализация ввода/вывода осуществляется быстрей, чем написание таких огромных ответов как у тебя и изучение справки пару часов это жесть.
Если ты не увидел нужного в моих постах - твои проблемы, эк тебя бомбануло
Сейчас в самом деле инфы просто навалом и получить нужный ответ от гугла/яндекса намного проще, чем на форуме. И как бы там ни было получается я тебя подтолкнул к изучению справки и даже для тебя форум не был бесполезен, а ты считаешь, что
Цитата Сообщение от JohnyWalker Посмотреть сообщение
Проку от него — ноль
0
JohnyWalker
189 / 77 / 8
Регистрация: 15.11.2010
Сообщений: 472
29.10.2016, 18:20  [ТС] #7
Цитата Сообщение от Ol44 Посмотреть сообщение
JohnyWalker, ты чего агришся то? Черепная коробка ничего не жмёт? Это форум и здесь каждый волен высказать своё мнение - не нравится не читай, я мельком пробежал по твоему посту, увидел много лишних букв и желания самоутвердится. Реализация ввода/вывода осуществляется быстрей, чем написание таких огромных ответов как у тебя и изучение справки пару часов это жесть.
Если ты не увидел нужного в моих постах - твои проблемы, эк тебя бомбануло
Сейчас в самом деле инфы просто навалом и получить нужный ответ от гугла/яндекса намного проще, чем на форуме. И как бы там ни было получается я тебя подтолкнул к изучению справки и даже для тебя форум не был бесполезен, а ты считаешь, что
Да не, Ol44, я когда всякий бред всевозможных фантазёров читаю на форумах, обычно прохожу мимо с улыбкой. А тут чо-то меня и вправду разнесло, и написал я тебе огромную простынь. Ты прав, не надо было этого делать, твои посты просто этого не стоили Человек всерьёз пишущий о ненужности консоли, мечтающий всех осчастливить веб-интерфейсами на html и аяксе, достоин внимания специалистов совсем другого профиля. Я на тебя совсем уже не злюсь
1
29.10.2016, 18:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2016, 18:20
Привет! Вот еще темы с ответами:

Подсистема статического дискретного ввода-вывода - Assembler
Помогите пожалуйста написать вот такую программу Цель работы: Изучение принципов построения подсистем статического дискретного вво- ...

Реализовать прерывание через порты ввода-вывода - Assembler
Функция задержки пока не будет считана клавиша в ax задержка будет продолжатся. mov ah,10h int 16h Можно ли это как-то реализовать...

IDE для ассемблера - Assembler
Ребят, подскажите новичку, есть ли какая-нибудь IDE, что все компиляторы и все что нужно было в ней, или подскажите какие программы...

IDE для ассемблера - Assembler
Ребят, кто какую среду использует для нормального человечного кодинга? Хотелось бы примерно следующее: - Поддержка MASM/TASM (или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru