|
4 / 3 / 0
Регистрация: 03.05.2009
Сообщений: 82
|
|
До слез Хочу научится Ассемблеру!!!03.05.2009, 19:25. Показов 48664. Ответов 112
Метки нет (Все метки)
Хочу научится Ассемблеру!!! С чего начать? Пока читаю Калашникова но не умею работать на МАСМе там всё на английском. Есть ли русская версия или руссификатор?
Английский у меня не очень... у калашникова говорится что надо умет шарит на DOS и на Нортоне а где взять их Я все учебники самоучители скачала со всех библиотек в интернете но пока о нортоне ничего не нашла кроме как на Википедии Прошу помоч разобратся.
0
|
|
| 03.05.2009, 19:25 | |
|
Ответы с готовыми решениями:
112
Хочу научится программированию Хочу научится программировать Хочу научится веб дизайну |
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 17.07.2009, 14:00 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Сообщение было отмечено как решение
Решение
Ёрик, у тебя, как и у многих других на форуме, закомых с ассемблером,
какое-то неправильное мнение о нём. В вашем понятии ассемблер - это нечто божественное, владея которым мужно управлять миром Ассемблер - это некое средство, позволяющее писать машинные команды на более понятном для человека языке. И не более того. Многие считают, что "знают ассемблер" или "выучили ассемблер". Но эти понятия можно ставить наравне с "выучил словарь английского языка". Ты можешь наизусть знать все слова, но это не даёт тебе того, что ты можешь свободно переводить в обе стороны. Может быть какие-то примитивные фразы, но не более того В качестве подтверждения могу привести свой пост - до сих пор на него никто даже ответить не попытался https://www.cyberforum.ru/post213232.html Потому как "выучить ассемблер" тут точно недостаточно, надо знать, как машина работает
это ещё не знание компьютера
Шестнадцатиричный формат можно понимать и без знаний ассемблера
работая из-под компилятора? Хотя на этот вопрос я сам отвечу - в билдерах это всё слишком скрыто от пользователя, хотя народ утверждает, что работая на MSVS нужно в этом что-то понимать.
стандартными interrupt'ами (что по сути не отличается от использования библиотечных процедур при работе на языках программирования высокогого уровня)
не динамический загрзчик и т.п.) ни разу не пришлось копаться в ассемблерном коде. Опять-таки может это потому, что работаю под юниксами, а не под виндами
======================================== ======================== По поводу всяких слов, что мол типа программа на ассемблере занимает мало места. Когда слышу эти слова, то мне кажется, что люди считают, что программа занимает мало места, потому что на ассемблере написана. Но это не так. Просто в этом случае обращения к системе идут напрямую в коде, а не через библиотечные прокладки, как это делается на языках высокого уровня. При этом современная библиотечная поддержка имеет тенденцию очень сильно распухать. В последних версиях линуха, например, glibc вдоль и поперёк прошита поддержкой многопоточности. Следствием этого является распухание кода, но бонусом такого подхода является более быстрая работа в многопточных режимах (меньше накладных расходов). Когда знаешь, как работает вся система, когда понимаешь, как работает компилятор и всё, что от него растёт (ассемблер, линкер, бибилиотеки), то можно точно так же писать маленький код и на Си Попробую показать на конкретном примере. Те примеры, что я привожу в начале - я экспериментировал на linux'ах несколькилетней давности, потому как знаю их получше, и glibc там не такая домороченная. Мы ставим себе условную цель написать прграмму, которая бы занимала мало места (а соотвественно, работала быстро и эффективно). Для начала возьмём обычный пример hello world Что мы имеем, работая целиком на языке:
что нас не устраивает, ибо зависит от внешних библиотек
И следствием этого является универсальность библиотек. Принципы, по которым работает статическая линковка, рассказывать сейчас не хочется (много времени займёт, да и не все поймут). Реально из этих полутора мегабайт в процессе работы мы пройдёмся по очень оганиченному куску кода, т.е. в коде мы имеем слишком много балласта (мёртвого кода) Что есть программирование на ассемблере под MS-DOS для данного примера. Это написание кода, который по очереди дёрнет несколько стандартных interrupt'ов (печать текста на экран и завершение задачи). Всё то же самое можно сделать и на языке, оформив эти примитивы в виде отдельных блоков. А в linux'е реализация всего этого есть даже в стандартной поставке. Но начнём с процедур-прокладок, реализующих системные вызовы (так называется в линуксе то, что для MS-DOS я назваол interrupt'ами)
низкоуровневые процедуры-прокладки, которые обращаются непосредственно к системным вызовам. При этом код пока переносимый на разные платформы. Код стал меньше, но незначительно. Потому как очень многорастёт из кода инициализации glibc. Обойдём это дело, путём ручного запуска линкера. С этого момента код на современных линуксах компилиться не будет из-за причины, которую указал выше: из-за поддержки многопточности они очень сильно прошили системную библиотеку. После неких манипуляций я сведу код к тому состоянию, когда он будет запускаться на современных линуксах
большинстве современных систем является точкой входа для приложения. Если это не так, то это имя всегда можно задавать через опцию линкера. На текущий момент код всё ещё переносимый: я проверял на i386-linux и sparc-linux.
при "честной" работе с компиляторм) Но в данном случае мы всё равно дёргаем некие функции, находящиеся в glibc, а потому к нам подцепился всякий мусорный код по отработке ошибок системного вызова. Плюс сами коды по осуществлению вызова функции, которую компилятор просто не может про'inline'ить Теперь делаем финт ушами, который есть только в linux'е и работает только из-под компилятора gcc. Далее опять-таки покажу, что можно это сделать и для других систем
я вставлю непосредственно потроха этих макросов. В станадртном варианте эти макросы устанавливают значение errno, которая находится в glibc, а потому библиотеку пока ещё нужно линковать. Что важно, что этот код по прежнему работает и на sparc-linux и на i386-linux. gcc выдаёт warning по поводу exit'а, на который можно не обращать внимания, потому как мы делаем собственную static реализацию exit'а, чтобы компилятор весь этот код мог про'inline'ить:
Теперь тот момент, о ктором я говорил. В линуксе как-то реализация макросов _syscal* немного плавает, а поэтому затащим её к себе, чтобы уже не зависеть от инклюдов, установленных на системе. Плюс выкинем код по отработке кода ошибки (а в дальнейшей реализации его нужно обрабатывать только там, где надо и как надо). В итоге теперь мы имеем исходник плюс набор *.h файлов, которые отличаются для i386 и sparc. Но это различие нужно отписать только один раз. Дальнейшее развитие программы будет архитектурно-независимым (насколько это возможно)
и прочие воспомогательные секции в бинарном файле тоже не нужны, поэтому их удалим утилитой strip. Ещё подадим в компилятор опцию -fno-builtin, чтобы не возникал по поводу exit'а (компилятор считает, что exit должен быть в библиотеке)
минимум, меньше которого исполняемый файл не может быть в принципе, потому как в файле есть некое описание формата, которое никуда не денется. Формат elf в современных unix'ах условно соответствует формату .exe под DOS/Windows (не не .com)
исключили системные инклюды и библиотеки Таким образом можно работать на низком уровне, но использовать при этом компилятор. Конечно это не панацея, т.к. вручную зачастую удастся получше сделать распределение регистров или ещё чего-то, но на языке писать гораздо удобнее. Не говоря уж о том, что здесь можно сделать переносимую версию. Но при этом нужно реализовать системные функции. И если реализацию накрыть стандартным интерфейсом через файл syscall.h, то эту программу можно заставить работать и под дркгими ОС, а не только под линуксом
8
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Матроскин
|
|
| 17.07.2009, 14:00 | |
|
короче всё понятно! Спасибо всем!
|
|
|
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
|||||||||
| 17.07.2009, 19:48 | |||||||||
Я не очень хорошо знаю С, но даже мне заметно, что для получения простого результата, нужно было приложить не так и мало усилий, хотя это и язык более высокого уровня. Вот код программы на асме, который выведет hello, world в любой ос(не зависит от нее) реального режима, будучи загруженым и выполненым по любому аддресу. Сочинил только что, так что извини, если что не так работает, хотел показать принцип.
2
|
|||||||||
|
|
|||||||
| 18.07.2009, 00:54 | |||||||
|
0
|
|||||||
|
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
|
||
| 18.07.2009, 10:01 | ||
|
Добавлено через 21 минуту 51 секунду
Evg,если кто-то не ответил на твою задачу,это не значит,что никто не знает ассемблер,просто многим неохота это делать,потому что занимает очень много времени написание программы.А твоя программа не так уж и сложна.Программа несложная,только муторная,гораздо сложнее векторы отлавлива
0
|
||
|
|
|||||||
| 18.07.2009, 10:46 | |||||||
|
Добавлено через 10 минут 23 секунды Вот ещё. В мире много людей, которые хорошо понимают аппаратуру, приницпы её работы, принципы работы ОС, но при этом являются очень плохими программистами. Потому что мышление у них аппаратное, а не программное. Такие люди как правило не в состоянии писать код на ассемблере. Но вот в таком варианте на Си они "хоть как-то" код смогут написать. Т.е. они будут как конструктор собирать код из отдельных макро-блоков (в моём случае макроблоками являются write и exit)
0
|
|||||||
|
2537 / 833 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
||||||||
| 18.07.2009, 12:19 | ||||||||
|
Собственно говорить в одном контексте об переносимости и об ассемблере, как минимум просто не стоит, он не для этого используется.
Хорошо. Вот такой вариант, как я понял, должен работать из под любого i386 linux'a.
0
|
||||||||
|
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
|
|
| 18.07.2009, 12:33 | |
|
Понимаешь,программа должна быть такой,чтобы в ней видно,что ты пытаешься сделать,и речь не о том,что кто-то не понимает,а втом,чтобы тратить время на чтение программы и понятие,как она работает. Когда напишем на ассемблере(сделаем вставку),то понятно что откуда и куда,а когда такой код из-за того,чтобы исключить системные инклюды и библиотеки. Программист, который пишет дополнения к твоей программе,посмотрит на жуть,и скажет,я-то разберусь 100%,но мне на это тратить огромное время?
Еще один момент: мы хотим сделать парсер,напр,есть какой-н. файл большой текстовый в компании,не буду фантазировать,что мы хотим найти(информацию о email-,телефонные номера и т.п.), и он весит порядка 100-300 мб, и если ты потратишь 15 сек на написание программы на С,программма будет выполняться довольно долго,а на ассемблере мало того,что com файл будет весить меньше 500 байт,так еще и выполняться быстре,чем программа,код которой написан на Perl. Evg,понимаю ,что разговарию с профи,поэтому не хочу долго спорить. На этом дискуссию хотелось бы закончить.
0
|
|
|
|
|||||||||
| 18.07.2009, 18:46 | |||||||||
|
Хотелось показать, что не надо зацикливаться на "знании ассемблера". Особенно там, где это на практике не нужно. Оптимальный результат нужно получать комбинируя язык и ассемблер ![]() Добавлено через 7 минут 18 секунд Вот так же и мне хочется начинающим показать вид на эту проблему под другим углом. Поскольку ты всё равно не понял, о чём я говорю, значит я плохо объяснил. Или повторяю стандартную ошибку преподавателей - не могу (или не пытаюсь) понять, а что же именно ты не понял (или не захотел понять). Я не ставлю себе цель во что бы то ни было тебя переспорить. Цель моя - объяснить тебе. Если ты считаешь, что дискуссию пора сворачивать (потому как ты в ней уже не видишь для себя ничего интересного) - давай свернём. Без обид и нареканий. При этом буду надеяться, что когда-нибудь ты всё-таки осознаешь, о чём я пытался втолковать. Даже если к тому времени ты уже 10 раз забудешь, о чём мы тут говорили. Ибо вот так устроен мозг: информация где-то в глубинах мозга откладывается, а потом начинает осваиваться
0
|
|||||||||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 18.07.2009, 19:12 | |
|
Evg, извиняюсь, а как, собственно, связь между "я хочу научиться ассемблеру до слез" и никому ненужным копипастом кода сискола в хеадер? Я смысла и связи проследить не могу...
Добавлено через 2 минуты 52 секунды Ааа...вижу это ты про "мало места" писал. Вопрос отпал. Хых. Забавно. После этого кто-нибудь точно подумает, что ассемблер - бог Скажет: йопти, как он "сишный" код "ужал".
0
|
|
|
47 / 47 / 3
Регистрация: 07.01.2009
Сообщений: 297
|
|
| 18.07.2009, 19:18 | |
|
Evg,я вижу что с профи разговариваю,поэтому не хочу тупо быть настырным и упертым козлом,поэтому и решил прервать дикуссию,а не потому,что не итнтересно
0
|
|
|
|
||
| 18.07.2009, 19:22 | ||
|
По крайней мере я увидел свою собственную проблему - не смог доступным языком объяснить сложную вещь. Проблему та же, что и у преподавателей - я попытался объяснить так, как удобно мне, а не так, как понятно людям. А людям было бы понятно, если бы они это самое смогли повторить под DOS/Windows, но я в этих системах не разбираюсь, а разобраться на уровне данных примеров было лениво (да и на работе виндов нету)
По поводу никому не нужного копипаста. Грубо говоря, если взять оригинальный системный, т.е. без выхеривания ernno, то получится плохо. errno это как правило "#define errno *(__errno_location())", который тянет за собой целый паравоз ненужных вещей, в какой-то момент это цепляет потоковую часть, котороая реализуется на механизмах unwind'а, который в свою очередь со стороны компилятора требует поддержки personality. В итоге получается бесконечная кишка. Копипаст совсем маленький, так что считаю, что в данном случае он был оправдан. Добавлено через 3 минуты 9 секунд
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 18.07.2009, 19:26 | |
|
А каком еррно ты говоришь?
Добавлено через 1 минуту 9 секунд Ты имел ввиду, что __сискол_ретурн убрал?
0
|
|
|
|
||
| 18.07.2009, 19:30 | ||
|
Да и по поводу "профи" и "новичков" вообще. Во мне нет такого, что с новичками надо общаться с позиции "я начальник, ты дурак". Тем более у молодых более свежий взгляд на вещи и более широкое мышление.
Недавно у нас студент предложил решение проблемы, которую мы волынили уже несколько лет: вроде бы оно нужно, но решения настолько геморойные, что выходило, что затраты и усилия не соотвествовали результату. Так вот предложение студента диктовалось недостатком опыта работы и было настолько бредовым, что решили его проверить, потому как реализовывалось это просто. Когда заработало сразу же, без какой-либо дополнительной отладки, то мы сразу же начали искать ошибки в реализации, ибо казалось, что развалиться должно было почти сразу. Но этот бред работает и работает хорошо. Добавлено через 2 минуты 13 секунд
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 18.07.2009, 19:41 | |
|
Evg, да, у int 80h оверхед немалый.
Можно еще вызывать без использования самого прерывания. У нас по систем.мапу вызывали ядерный vsyscall, чтоб поближе к точке sysenter. Тоже оптимизнуть нужно было прогу. Для 99% прог это, конечно, лишнее.
0
|
|
|
|
||
| 18.07.2009, 20:01 | ||
|
0
|
||
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
| 18.07.2009, 21:40 | |
|
Evg, в итоге, ты бы, все равно, не ушел ниже драйвера. Даже не одного. Минимум файловой системы и физического устройства. Тут только тту.
Добавлено через 1 минуту 15 секунд Это я к тому, что смысла в этом всем особого нет.
0
|
|
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
||
| 19.07.2009, 00:48 | ||
|
Evg, по вопросу в теме - вообще ни на кой.
Добавлено через 4 минуты 33 секунды
. Я просто не могу уследить, как нить привела к тому, что пришлось это объяснять. Да, и если человек поработает с прерываниями дос, потом попрерывает линукс, поймет, что в общем-то все похоже. Как я понимаю, автор темы еще этим не занимается.И по моему скромному мнению, это уже больше относится не к самому ассемблеру, сколько к архитектуре платформы.
0
|
||
|
|
|||
| 19.07.2009, 01:20 | |||
|
0
|
|||
| 19.07.2009, 01:20 | |
|
Хочу научится писать парсеры. С чего начать? Хочу научится программировать но не знаю с чего начать Хочу научится программировать микроконтроллеры, но не знаю с чего начать Помогите научится!!!! Как научится ООПэшить? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|