none
Как ОС ЭВМ выполняет Ассемблер RRS feed

  • Вопрос

  • Доброй ночи!

    Подскажите, пожалуйста, чем машинные коды и язык ассемблера отличаются при выполнении в ОС, и почему есть и то, и другое, чем ограничено выполнение таких программ в ОС, как ОС выполняет ассемблерную программу, и где почитать об этом подробнее свежую информацию по архитектуре x64? Насколько я понимаю, IL преобразуется в ассемблер.

    Заранее благодарен.

Ответы

  • Ассемблер это просто мнемоники для машинных кодов, он существует для удобства человека который пишет программу.

    Мнемоники транслируются программой ассемблера в машинные коды которые и выполняются процессором. Собственно, любые программы на совершенно любых языках так или иначе транслируется в машинные коды, ведь процессор может выполнять только их. Эта трансляция может быть как практически 1:1 в случае ассемблера, так и весьма запутанной, сложной и многоуровневой как например в случае C#. Но, в конечном итоге, все закончится машинными кодами.

    Таким образом процессор не выполняет ассемблерных программ, он всегда выполняет машинные коды. Точно так же IL транслируется в машинные кода которые и выполняет процессор. 

    Машинные коды можно восстановить в ассемблерные мнемоники, это называется дисассемблированием. Их можно увидеть при отладке ПО вместе с машинными кодами.

    Чтоб понять как работает процессор начините с чего нибудь попроще чем x64, тем более что за последние ~60 лет основы не изменились. Я рекомендую прочитать либо про 8080, либо про PDP-11. Эти архитектуры были скопированы в СССР и существует множество книг и изданий со всеми подробностями. Несложно найти и симуляторы для практической проверки знаний. Система команд PDP-11 является одной из немногих где можно при определенной практике писать машинные коды.

    Возможно, следует начать с ознакомления из чего собственно сделаны компьютеры... Один из самых простых описан в журналах "Радио" начиная 4/1986. А в номере 4/1987 рассмотрены основы программирования и дан пример программы на ассемблере с подробным описанием и машинными кодами. Думаю несложно найти данную литературу... 



    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа Энтомолог 13 мая 2019 г. 3:09
    Модератор
  • Здравствуйте.

    В дополнение к ответу хотелось бы добавить, что программы на ассемблере обладают 2-мя преимуществами против языков высокого уровня. Это размер исполняемого файла и быстродействие. Ну и ещё - возможность обращения к железу напрямую. А вот всё остальное - недостатки. И главный недостаток - это сложность в освоении. Загуглите <"Hello,World!" на ассемблере> и сравните исходный код с этим же C#. Ну и сопутствующие этому ошибки и т.д. То есть новичку очень и очень долго придётся учится, прежде чем он начнет разрабатывать "нормальные" приложения на ассемблере. Тем более - под Windows.


    Alexandr_Smirnoff

    • Помечено в качестве ответа Энтомолог 15 мая 2019 г. 21:15

Все ответы

  • Ассемблер это просто мнемоники для машинных кодов, он существует для удобства человека который пишет программу.

    Мнемоники транслируются программой ассемблера в машинные коды которые и выполняются процессором. Собственно, любые программы на совершенно любых языках так или иначе транслируется в машинные коды, ведь процессор может выполнять только их. Эта трансляция может быть как практически 1:1 в случае ассемблера, так и весьма запутанной, сложной и многоуровневой как например в случае C#. Но, в конечном итоге, все закончится машинными кодами.

    Таким образом процессор не выполняет ассемблерных программ, он всегда выполняет машинные коды. Точно так же IL транслируется в машинные кода которые и выполняет процессор. 

    Машинные коды можно восстановить в ассемблерные мнемоники, это называется дисассемблированием. Их можно увидеть при отладке ПО вместе с машинными кодами.

    Чтоб понять как работает процессор начините с чего нибудь попроще чем x64, тем более что за последние ~60 лет основы не изменились. Я рекомендую прочитать либо про 8080, либо про PDP-11. Эти архитектуры были скопированы в СССР и существует множество книг и изданий со всеми подробностями. Несложно найти и симуляторы для практической проверки знаний. Система команд PDP-11 является одной из немногих где можно при определенной практике писать машинные коды.

    Возможно, следует начать с ознакомления из чего собственно сделаны компьютеры... Один из самых простых описан в журналах "Радио" начиная 4/1986. А в номере 4/1987 рассмотрены основы программирования и дан пример программы на ассемблере с подробным описанием и машинными кодами. Думаю несложно найти данную литературу... 



    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа Энтомолог 13 мая 2019 г. 3:09
    Модератор
  • Здравствуйте.

    В дополнение к ответу хотелось бы добавить, что программы на ассемблере обладают 2-мя преимуществами против языков высокого уровня. Это размер исполняемого файла и быстродействие. Ну и ещё - возможность обращения к железу напрямую. А вот всё остальное - недостатки. И главный недостаток - это сложность в освоении. Загуглите <"Hello,World!" на ассемблере> и сравните исходный код с этим же C#. Ну и сопутствующие этому ошибки и т.д. То есть новичку очень и очень долго придётся учится, прежде чем он начнет разрабатывать "нормальные" приложения на ассемблере. Тем более - под Windows.


    Alexandr_Smirnoff

    • Помечено в качестве ответа Энтомолог 15 мая 2019 г. 21:15
  • Здравствуйте.

    В дополнение к ответу хотелось бы добавить, что программы на ассемблере обладают 2-мя преимуществами против языков высокого уровня. Это размер исполняемого файла и быстродействие. Ну и ещё - возможность обращения к железу напрямую. А вот всё остальное - недостатки. И главный недостаток - это сложность в освоении. Загуглите <"Hello,World!" на ассемблере> и сравните исходный код с этим же C#. Ну и сопутствующие этому ошибки и т.д. То есть новичку очень и очень долго придётся учится, прежде чем он начнет разрабатывать "нормальные" приложения на ассемблере. Тем более - под Windows.


    Alexandr_Smirnoff

    Быстродействие давно уже определяется в основном алгоритмом, а не языком. Да и ручная оптимизация на современных процессорах практически невозможна.

    K железу можно обращаться из совершенно любых языков. Даже Basic часто имел для этого нужные операторы, например PEEK/POKE или аналогичные. Другое дело что ОС такого давно не позволяют. 



    This posting is provided "AS IS" with no warranties, and confers no rights.

    Модератор
  • Да, согласен, что на современных машинах преимущеста ассемблера уже давно неактуальны. Насчет ОС - это смотря какую использовать.:) Но и здесь согласен с Вами. Кому сейчас нужны древние DOS и Win 3.хх...

    Alexandr_Smirnoff