Пятница, 15.12.2017, 09:21
БК-0010.01. Повесть о настоящем компьютере
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Категории каталога
Введение в руководство [2]
Введение [0]
Организация БК-0010 [1]
Раздел 1. Организация БК-0010
Работа с МСД [1]
Раздел 2. Работа с МСД
Системные регистры [1]
Раздел 3. Системные регистры
Системное ПО [1]
Раздел 4. Системное программное обеспечение БК-0010
Прерывания. Приоритет ЦП [1]
Раздел 5. Система прерываний БК-0010. Приоритет процессора
Командные прерывания [1]
Раздел 6. Командные прерывания
ЕМТ БК-0010 [1]
Раздел 7. командные прерывания ЕМТ БК-0010
Коды и ассемблер. Мнемокод. [1]
Раздел 8. Коды и ассемблер. Мнемокод. Формат команды
Способы адресации [1]
Раздел 9. Способы адресации
Команды процессора БК-0010 [1]
Раздел 10. Система команд процессора БК-0010
Псевдокоманды. Метки. Комментарии [1]
Раздел 11. Псевдокоманды ассемблера. Метки. Комментарии
Программирование на ассемблере [1]
Раздел 12. Программирование на ассемблере. Начало. Трансляция программ. Ошибки
Отладка программ [1]
Раздел 13. Отладка программ. Позиционно-независимое программирование. Компановка
Подпрограммы ПЗУ БК-0010 [1]
Раздел 14. Подпрограммы ПЗУ БК-0010
Системная область ОЗУ БК-0010 [1]
Раздел 15. Системная область ОЗУ БК-0010. Некоторые секретные сведения об авторе и МП-клубе
Повышение быстродействия БК-0010 [1]
Раздел 16. Вопросы повышения быстродействия БК-0010
Об использовании ПЗУ [1]
Раздел 17. Полезная подпрограмма. Об использовании ПЗУ
Загадочные регистры [1]
Раздел 18. Загадочные регистры
Штурм системной области [1]
Раздел 19. Продолжаем штурм системной области
Об автозапуске программ [1]
Раздел 20. Об автозапуске программ
Коварные программы [1]
Раздел 21. Коварные программы
Еще о системной области [1]
Раздел 22. О пользе плагиата, или еще о системной области
О псевдокомандах и компановке [1]
Раздел 23. Еще раз о псевдокомандах, метках и компановке
Тук-тук, кто в стеке живет? [1]
Раздел 24. Тук-тук, кто в стеке живет?
Фокал с позиций ассемблера [1]
Раздел 25. Взгляд на фокал с позиций ассемблера
Наш опрос
Оцените мой сайт
Всего ответов: 47
 Каталог статей
Главная » Статьи » Коды и ассемблер. Мнемокод.

Коды и ассемблер

Нередко приходится слышать фразы: "программирование в машинных кодах, программа в кодах", и другие: "программирование на ассемблере, программа на ассемблере". Что это значит, и какая между ними разница?
Прежде всего уясним, что единственный язык, который понимает БК-0010 - это язык машинных кодов, т.е. двоично-восьмеричные числа, выраженные в виде 16-разрядных машинных слов. Поэтому выражение "программа в кодах" безусловно правильно.
Но что же значит 2-я фраза? Как правило, то же самое.
Ассемблер - это система программирования в машинных кодах, так же, как интерпретатор фокала - система программирования на языке фокал. Но между ними есть принципиальная разница.
Фокал-система - интерпретатор. Это означает, что программа, написанная на фокале, хранится в ОЗУ практически в том виде, в каком написана (небольшая модификация текста программы, происходящая при этом, непринципиальна). Если ее нужно выполнить, интерпретатор каждый раз заново переводит ее в машинные коды, причем по 1 или по несколько операторов. Недостаток этой системы очевиден: низкое быстродействие. Достоинства: простота, небольшой занимаемый текстом программы объем ОЗУ, легкость редактирования и отладки.

Ассемблер - это транслятор. Программа, написанная на языке ассемблера (отметим, что языков этих множество - каждая ЭВМ имеет свой ассемблер), переводится в коды всего 1 раз, в процессе трансляции и компановки. При этом мы получаем загрузочный модуль, т.е. Программу в машинных кодах, готовую к исполнению(или не готовую, если там есть ошибки).
Достоинства: предельное для данной ЭВМ быстродействие, отсутствие каких - либо ограничений доступа к ресурсам машины (если не считать ограничением низкий уровень знаний программиста).
недостатки: относительно более высокая сложность как самого языка, так и процесса программирования, редактирования и отладки.

Отметим здесь, что автор является решительным противником термина "компилятор". Очень многие понимают этот термин весьма произвольно - одни как транслятор, другие как интерпретатор. Зачем вносить путаницу? Вполне достаточно двух введенных терминов - транслятор и интерпретатор.

 Что представляет из себя язык ассемблера? Точно так же, как и язык высокого уровня, например, фокал, он представляет систему условных обозначений, призванных помочь программисту написать программу.
В отличие от машинных кодов, эти обозначения наглядны и легко запоминаются, поэтому носят название мнемокод.

Здесь мы подошли к ключевому моменту: как же программировать - на ассемблере или в кодах? Ни один серьезный программист не программирует непосредственно в машинных кодах. При наличии ассемблер-системы это - анахронизм, и совершенно бесполезная растрата времени. То, что ассемблер-транслятор делает за секунды - перевод мнемокода в машинные коды, у человека занимает часы. Написать сколько - нибудь серьезную программу можно только на мнемокоде (противоположного мнения придерживался бы, пожалуй, только Робинзон Крузо, будь он программистом: ему все равно нечего было делать на своем острове. Но в наше время программировать непосредственно в машинных кодах, минуя ассемблер - все равно, что, как Робинзон, вытесывать из целого дерева только 1 доску, и это при наличии рядом лесопилки!).

Итак, мы сформулировали главную для нас концепцию: только ассемблер, и только мнемокод. Значит ли это, что знать машинный код не нужно? Вовсе нет.
Это, напротив, очень полезно. Иногда, например, нужно вписать в программу, уже оттранслированную, 1-2 команды. Знание кода позволяет обойтись при этом без ассемблера, а значит, экономить время. Равным образом, это может помочь и при исправлениях в тексте программы.
Но знание машинного кода не обязательно. Желающие могут изучить машинный код по литературным источникам. Мы же будем рассматривать исключительно мнемокод и язык ассемблера, лишь в необходимых случаях ссылаясь на машинные коды.

Но как быть, если мы имеем готовую программу в машинном коде, как разобраться в ней, если мы знаем только мнемокод?
Здесь нас выручит еще одна система - деассемблер.
Это - программа, переводящая машинные коды обратно в мнемокод. Она позволяет читать текст программы в кодах так же легко, как листинг программы на фокале. Конечно, этот обратный перевод не абсолютен.
Например, текст программы в машинных кодах не содержит комментариев, там нет имен меток, а только их адреса, и т.д. Но мы всегда можем сохранить листинг программ, которые пишем, на языке ассемблера - любая ассемблер-система позволяет записать на мл текст программы. Затем мы можем по необходимости вместо диассемблирования обратиться к листингу, и продолжить работу с ним на языке ассемблера.

Из опыта работы с фокалом мы знаем, что там есть два главных компонента: оператор и переменная.
Оператор есть инструкция языка, говорящая, что и как нужно сделать с переменной, или операндом. Отметим, что в качестве операнда, или части его, может выступать и константа, или просто число. Совершенно то же мы имеем и в ассемблере. Но в отличие от фокала, где мы могли обратиться к переменной только по имени, в ассемблере каждая переменная или константа имеет адрес. Исключением являются только регистры ЦП: у них нет адресов, а только имена.
кроме адреса, переменная в языке ассемблера может иметь и имя.
Фактически адрес переменной или константы в языке ассемблера - это просто адрес ячейки ОЗУ, где она хранится. Это значит, что, если мы знаем этот адрес, то для нас нет в ассемблере констант: мы в любой момент можем изменить содержимое ячейки ОЗУ. Таким образом, из 2 характеристик переменной только адрес - главная, имя же служит для облегчения процесса программирования. Теперь вспомним, как на фокале мы задавали условные и безусловные переходы, т.е. Изменения естественного порядка выполнения операторов. Это были переходы по номеру строки: G 1.26; I [...]1.1,2.25,3.1; т.е. по адресу оператора, который нам был нужен. В ассемблере возможна и такая передача управления, т.е. По адресу оператора, но гораздо чаще встречается другая: по метке.

Метка - это условное имя, присваиваемое данному адресу. Вспомним, что в фокале нам приходилось нумеровать все строки, хотя обращались мы по номерам лишь к некоторым.
в ассемблере этой ненужной работы нет: мы можем пометить метками лишь те операторы, которым нам придется передавать управление из других мест программы. И еще: раз метка есть имя адреса, а переменная - содержимое ячейки по этому адресу, то имена переменных есть тоже ни что иное, как метки. Более того, если данной меткой помечен оператор, а не переменная или константа, мы можем программно заменить код этого оператора на код другого, т.е. Программно изменить текст программы! Подумайте на досуге, какие возможности это открыло бы при программировании на фокале, будь там такая возможность!

Итак, мы рассмотрели 3 основных компонента языка ассемблера: оператор, операнд и метка. Все эти компоненты могут встретиться в одной и той же строке. Так как в одной строке может стоять только один оператор (в подавляющем большинстве версий ассемблера это именно так), назовем эту строку командой.

Далее при рассмотрении языка ассемблера мы будем опираться на конкретную ассемблер-систему для БК-0010 - ассемблер микро8.

В соответствии с компонентами командная строка ассемблера делится на поля:

  • поле метки,
  • поле оператора
  • поле операндов.
Поле метки, как уже говорилось, не обязательно: мы ставим метки только там, где это нужно. В поле оператора размещен, как мы уже сказали, только один оператор, т.е. Инструкция, говорящая машине, что нужно сделать. В поле операндов могут быть: 1 операнд; 2 операнда; ни одного.
очевидно, что в 2-операндной команде что-то делается с каждым из операндов, или они как-то используются. В 1-операндной - с одним. Но что делает команда без операнда? Очень просто: обычно это управляющая команда (например, HALT - стоп).
теперь вернемся к тому вопросу, что такое операнд. Мы уже сказали, что это ни что иное, как адрес ячейки ОЗУ. Поэтому и команды носят названия: 1-адресные, 2-адресные, управления программой, прерывания, управления машиной, изменения признаков условий. Все они будут в свое время рассмотрены. Пока же отметим, что, раз операнд и адрес, по которому он записан, суть одно и то же, то способы обращения операторов к операндам (или, что то же самое, способы задания операндов) носят название способов адресации.

Категория: Коды и ассемблер. Мнемокод. | Автор: ЗАЛЬЦМАН Ю.А., МП-КЛУБ, г.АЛМА-АТА
Просмотров: 3716 | Комментарии: 2 | Рейтинг: 0.0/0 |

Всего комментариев: 2
2  
как можно написать?

1  
напишите программу поиска предложении палиндромов в тексте

Имя *:
Email *:
Код *:
Используются технологии uCoz
Форма входа

Поиск
Друзья сайта
Статистика