Тема 1.4 Ассемблерная мнемоника. Структура и форматы команд. Виды адресации. Система команд микропроцессора План: 1 Язык ассемблера. Основные понятия 2 Символы языка ассемблера 3 Типы операторов ассемблера 4 Директивы ассемблера 5 Система команд процессора
Рекомендуемые материалы
рк 2 вариант 14 Лазарус
Информатика
Вариант 14 Задача РК 2
Информатика
рк 3 вариант 14 Лазарус
Информатика
Лабораторная работа 14А (№5) отчет+код Вариант 14
Объектно-ориентированное программирование (ООП)
Лабораторная работа 14В (№4) отчет+код Вариант 14
Объектно-ориентированное программирование (ООП)
Отчет по практикуму №1 (вариант №14)
Объектно-ориентированное программирование (ООП)
Поделитесь ссылкой:
Рекомендуемые лекции
- 2.6. Объединения таблиц
- Лекция 6
- 7. Понятие о мультимедиа
- 10. Защита отверстий для пропуска коммуникаций
- Лекция 11
Источник: studizba.com
Программа на С с линковкой функций на ASM
ПРОГРАММИРОВАНИЕ НА АССЕМБЛЕРЕПлан Ассемблер. Этапы разработки программы Предложения
План Ассемблер. Этапы разработки программы Предложения языка Ассемблера. Структура программы Шаблоны для программ. Примеры Понятие о мультипрограммном режиме работы.
Машинно -ориентированный язык символического программирования, включающий в набор своих операторов операции, выполняемые той или иной ЭВМ, называется языком Ассемблера. Программа, написанная на Ассемблере, называется исходной программой.
Современные Ассемблеры: MASM 5.x, 6.x фирмы MS; Quick Assembler фирмы MS; Turbo Assembler (TASM) фирмы Borland; интегрированные среды: Pwb (для MASM), qc (для Quick Assembler ), tc, bc (для C, C++)
Разработка программы на Ассемблере состоит из следующих этапов: 1) Составление алгоритма в виде блок-схемы или структурного описания, 2) Ввод в ЭВМ текста исходной программы PROG.ASM с помощью редактора текстов. Имя PROG может быть произвольным, а расширение ASM — обязательно, 3) Перевод (трансляция или ассемблирование) исходной программы в машинные коды с помощью транслятора TASM.EXE. На этом этапе получается промежуточный продукт PROG.OBJ (объектный код). Выявленные при этом синтаксические и орфографические ошибки исправляются повтором пп.2 и 3, 4) Преобразование с помощью программы TLINK.EXE объектного кода PROG.OBJ в выполнимый код PROG.EXE или PROG.COM. 5) Выполнение программы и ее отладка начиная с п.1, если встретились логические ошибки.
Создание программы на Ассемблере
Предложения языка Ассемблера. Структура программы Текст программы на Ассемблере содержит следующие операции: а) команды или инструкции, б) директивы или псевдооператоры, в) операторы, г) предопределенные имена.
ОПЕРАТОРЫ 1. () — скобки, определяют порядок вычислений 2. [] — например [BX] означает содержимое ячейки памяти с адресом в регистре bx. Признак косвенной адресации. 3. +, -, *, / — операторы сложения, вычитания, умножения и деления. mov ax, (2 * 3 + 8 / 2) — 2; в регистр ax будет помещено число 8. 4. MOD — деление по модулю. Даёт остаток. 5. SHL,SHR — сдвиг операнда влево, вправо. mov si, 01010101b SHR 3; в регистр SI будет загружено число 0Ah (00001010).
NASM. Первая программа. Установка среды. Компиляция Nasm на windows. Урок 1
6. NOT — побитовая инверсия. 7. AND,OR,XOR — операции «И»,»ИЛИ»,»ИСКЛ.ИЛИ». mov dl, (10d OR 5d) XOR 7d; (dl) будет равно 8. 8. : — переназначение сегмента. mov dl,[es:bx]; поместить в dl байт данных из сегмента es и отстоящий от его начала на (bx) байтов (смещение). 9. OFFSET — оператор получения смещения адреса относительно начала сегмента (то есть количества байтов от начала сегмента до идентификатора адреса). mov bx, OFFSET table
ДИРЕКТИВЫ (ПСЕВДООПЕРАТОРЫ) 1. : — определяет близкую метку (в пределах сегмента). jmp lbl . . lbl: . 2 . = — присваивает символическому имени значение выражения. videoram = 0B800h; присвоение videoram = 0B000h; 3. .CODE — определяет начало кодового сегмента, то есть сегмента, где располагаются коды программы. 4. .DATA — определяет начало сегмента данных. 5. DB,DW — директивы резервирующие один или несколько байтов: DB, или одно или несколько слов: DW. . .DATA fibs DB 1,1,2,3,5,8,13 rus DB ‘Турбо Ассемблер‘ buf DB 80 DUP(0);резервируется 80 байтов, каждый обнуляется int DW 65535;в двух байтах располагается число FFFFh. Array DW 100 DUP (0);резервируется 100 слов 6. END — обозначает конец программы. 7. ENDP — обозначает конец подпрограммы.
9. .MODEL — определяет размер памяти под данные и код программы. .MODEL tiny; под программу, данные и стек отводится один общий сегмент (64 Kb). 10. PROC — определяет начало подпрограммы. 11. .STACK — определяет размер стека. .STACK 200h; выделяет 512 байтов для стека. 12. .RADIX base — определяет систему счисления по умолчанию, где base — основание системы счисления: 2, 8, 10, 16. .RADIX 8 oct = 77; oct равно 63d.
13. ; — начало комментария.
Источник: present5.com
Программирование: язык Ассемблера. Основы языка Ассемблера
Для того чтобы машина могла выполнить команды человека на аппаратном уровне, необходимо задать определенную последовательность действий на языке «ноликов и единиц». Помощником в этом деле станет Ассемблер. Это утилита, которая работает с переводом команд на машинный язык. Однако написание программы — весьма трудоемкий и сложный процесс.
Данный язык не предназначен для создания легких и простых действий. На данный момент любой используемый язык программирования (Ассемблер работает прекрасно) позволяет написать специальные эффективные задачи, которые сильно влияют на работу аппаратной части. Основным предназначением является создание микрокоманд и небольших кодов. Данный язык дает больше возможностей, чем, например, Паскаль или С.
Краткое описание языков Ассемблера
Все языки программирования разделяются по уровням: низкий и высокий. Любой из синтаксической системы «семейки» Ассемблера отличается тем, что объединяет сразу некоторые достоинства наиболее распространенных и современных языков. С другими их роднит и то, что в полной мере можно использовать систему компьютера.
Отличительной особенностью компилятора является простота в использовании. Этим он отличается от тех, которые работают лишь с высокими уровнями. Если взять во внимание любой такой язык программирования, Ассемблер функционирует вдвое быстрее и лучше. Для того чтобы написать в нем легкую программу, не понадобится слишком много времени.
Кратко о структуре языка
Если говорить в общем о работе и структуре функционирования языка, можно точно сказать, что его команды полностью соответствуют командам процессора. То есть Ассемблер использует мнемокоды, наиболее удобные человеку для записи.
В отличие от других языков программирования, Ассемблер использует вместо адресов для записи ячеек памяти определенные метки. Они с процессом выполнения кода переводятся в так называемые директивы. Это относительные адреса, которые не влияют на работу процессора (не переводятся в машинный язык), а необходимы для распознавания самой средой программирования.
Для каждой линейки процессора существует своя система команд. При таком раскладе правильным будет любой процесс, в том числе и переведенный машинный код.
Язык Ассемблера имеет несколько синтаксисов, которые будут рассмотрены в статье.
Плюсы языка
Наиболее важным и удобным приспособлением языка Ассемблера станет то, что на нем можно написать любую программу для процессора, которая будет весьма компактной. Если код оказывается огромным, то среда программирования некоторые процессы перенаправляет в оперативную память. При этом они все выполняют достаточно быстро и без сбоев, если конечно, ими управляет квалифицированный программист.
Драйвера, операционные системы, BIOS, компиляторы, интерпретаторы и т. д. – это все программа на языке Ассемблера.
При использовании дизассемблера, который совершает перевод из машинного в компьютерный язык, можно запросто понять, как работает та или иная системная задача, даже если к ней нет пояснений. Однако такое возможно лишь в том случае, если программы легкие. К сожалению, в нетривиальных кодах разобраться достаточно сложно.
Минусы языка
К сожалению, начинающим программистам (и зачастую профессионалам) трудно разобрать язык. Ассемблер требует подробного описания необходимой команды. Из-за того, что нужно использовать машинные команды, растет вероятность ошибочных действий и сложность выполнения.
Для того чтобы написать даже самую простую программу, программист должен быть квалифицированным, а его уровень знаний достаточно высоким. Средний специалист, к сожалению, зачастую пишет плохие коды.
Если платформа, для которой создается программа, обновляется, то все команды необходимо переписывать вручную – этого требует сам язык. Ассемблер не поддерживает функцию автоматического регулирования работоспособности процессов и замену каких-либо элементов.
Команды языка
Как уже было сказано выше, для каждого процессора имеется свой набор команд. Простейшими элементами, которые распознаются любыми типами, являются следующие коды:
- Пересылка данных осуществляется при помощи mov и т. д.
- Команды, связанные с арифметикой: sub, imul и др.
- Побитовые и логические функции можно реализовать при помощи or, and и т. п. Именно эти основы языка Ассемблера позволяют ему быть схожим с другими.
- Для того чтобы осуществить переход от одной команды к другой, следует прописать такие операторы: djnz, cfsneq, cjne. Неопытному программисту может показаться, что это просто набор букв, однако это неверно.
- In и out применяются в том случае, если возникла необходимость ввода в порт (или вывода из него).
- К управляющим командам относят int. Благодаря ему можно прекратить выполнение каких-либо процессов в пользу основного действия.
Использование директив
Программирование микроконтроллеров на языке (Ассемблер это позволяет и прекрасно справляется с функционированием) самого низкого уровня в большинстве случаев заканчивается удачно. Лучше всего использовать процессоры с ограниченным ресурсом. Для 32-разрядной техники данный язык подходит отлично. Часто в кодах можно заметить директивы. Что же это?
И для чего используется?
Для начала необходимо сделать акцент на том, что директивы не переводятся в машинный язык. Они регулируют выполнение работы компилятором. В отличие от команд, эти параметры, имея различные функции, отличаются не благодаря разным процессорам, а за счет другого транслятора. Среди основных директив можно выделить следующие:
- Всем известные макросы.
- Имеются также директивы, которыми обладает высший язык. Ассемблер отлично «считывает» их и выполняет.
- Функции контролирования и управления режимами компилятора.
- Распознавание констант и переменных.
- Регулирование работы программ, которые находятся в оперативной памяти.
Происхождение названия
Благодаря чему получил название язык – «Ассемблер»? Речь идет о трансляторе и компиляторе, которые и производят зашифровку данных. С английского Assembler означает не что иное, как сборщик. Программа не была собрана вручную, была использована автоматическая структура. Более того, на данный момент уже у пользователей и специалистов стерлась разница между терминами.
Часто Ассемблером называют языки программирования, хотя это всего лишь утилита.
Из-за общепринятого собирательного названия у некоторых возникает ошибочное решение, что существует единый язык низкого уровня (или же стандартные нормы для него). Чтобы программист понял, о какой структуре идет речь, необходимо уточнять, для какой платформы используется тот или иной язык Ассемблера.
Макросредства
Языки Ассемблера, которые созданы относительно недавно, имеют макросредства. Они облегчают как написание, так и выполнение программы. Благодаря их наличию, транслятор выполняет написанный код в разы быстрее. При создании условного выбора можно написать огромный блок команд, а проще воспользоваться макросредствами. Они позволят быстро переключаться между действиями, в случае выполнения условия или невыполнения.
При использовании директив макроязыка программист получает макросы Ассемблера. Иногда он может широко использоваться, а иногда его функциональные особенности снижаются до одной команды. Их наличие в коде облегчает работу с ним, делает его более понятным и наглядным. Однако следует все равно быть внимательным – в некоторых случаях макросы, наоборот, ухудшают ситуацию.
Источник: fb.ru