Контакты

Структура программы на ассемблере. Основные сведения о языке Ассемблер. По дисциплине «Системное программирование Структура команды на языке ассемблера содержит

1. Архитектура ПК……………………………………………………………5

    1.1. Регистры.

    1.1.1 Регистры общего назначения.

1.1.2. Сегментные регистры

1.1.3 Регистр флагов

1.2. Организация памяти.

1.3. Представление данных.

1.3.1 Типы данных

1.3.2 Представление символов и строк

2. Операторы программы на ассемблере ……………………………………

    1. Команды языка ассемблера

2.2. Режимы адресации и форматы машинных команд

3. Псевдооператоры ………………………………………………………….

3.1 Директивы определения данных

3.2 Структура программы на ассемблере

3.2.1 Программные сегменты. Директива assume

3.2.3 Упрощенная директива сегментации

4. Ассемблирование и компоновка программы ………………………….

5. Команды пересылки данных…………………………………………….

    5.1 Команды общего назначения

    5.2 Команды работы со стеком

5.3 Команды ввода-вывода

5.4 Команды пересылки адреса

5.5 Команды пересылки флагов

6. Арифметические команды ……………………………………………….

    6.1 Арифметические операции над целыми двоичными числами

6.1.1 Сложение и вычитание

6.1.2 Команды приращения и уменьшения приемника на единицу

6.2 Умножение и деление

6.3 Изменение знака

7. Логические операции ………………………………………………….

8. Сдвиги и циклические сдвиги …………………………………………

9. Строковые операции …………………………………………………….

10. Логика и организация программ ………………………………………

10.1 Безусловные переходы

10.2 Условные переходы

10.4 Процедуры в языке ассемблера

10.5 Прерывания INT

10.6 Системное программное обеспечение

10.6.1.1 Чтение клавиатуры.

10.6.1.2 Вывод символов на экран

10.6.1.3 Завершение программ.

10.6.2.1 Выбор режимов дисплея

11. Дисковая память ……………………………………………………………..

11.2 Таблица распределения файлов

11.3 Операции ввода-вывода на диск

11.3.1 Запись файла на диск

11.3.1.1 Данные в формате ASCIIZ

11.3.1.2 Файловый номер

11.3.1.3 Создание дискового файла

11.3.2 Чтение дискового файла

Введение

Язык ассемблера - это символическое представление машинного языка. Все процессы в персональном компьютере (ПК) на самом низком, аппаратном уровне приводятся в действие только командами (инструкциями) машинного языка. По-настоящему решить проблемы, связанные с аппаратурой (или даже, более того, зависящие от аппаратуры как, к примеру, повышение быстродействия программы), невозможно без знания ассемблера.

Ассемблер представляет собой удобную форму команд непосредственно для компонент ПК и требует знание свойств и возможностей интегральной микросхемы, содержащей эти компоненты, а именно микропроцессора ПК. Таким образом, язык ассемблера непосредственно связан с внутренней организацией ПК. И не случайно практически все компиляторы языков высокого уровня поддерживают выход на ассемблерный уровень программирования.

Элементом подготовки программиста-профессионала обязательно является изучение ассемблера. Это связано с тем, что программирование на ассемблере требует знание архитектуры ПК, что позволяет создавать более эффективные программы на других языках и объединять их с программами на ассемблере.

В пособии рассматриваются вопросы программирования на языке ассемблера для компьютеров на базе микропрцессоров фирмы Intel.

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

    Архитектура ПК.

Архитектура ЭВМ – это абстрактное представление ЭВМ, которое отражает ее структурную, схемотехническую и логическую организацию.

Все современные ЭВМ обладают некоторыми общими и индивидуальными свойствами архитектуры. Индивидуальные свойства присущи только конкретной модели компьютера.

Понятие архитектуры ЭВМ включает в себя:

    структурную схему ЭВМ;

    средства и способы доступа к элементам структурной схемы ЭВМ;

    набор и доступность регистров;

    организацию и способы адресации;

    способ представления и формат данных ЭВМ;

    набор машинных команд ЭВМ;

    форматы машинных команд;

    обработка прерываний.

Основные элементы аппаратных средств компьютера: системный блок, клавиатура, устройства отображения, дисководы, печатающие устройства (принтер) и различные средства связи. Системный блок состоит из системной платы, блока питания и ячеек расширения для дополнительных плат. На системной плате размещены микропроцессор, постоянная память (ROM), оперативная память (RAM) и сопроцессор.

      Регистры.

Внутри микропроцессора информация содержится в группе из 32 регистров (16 пользовательских, 16 системных), в той или иной мере доступных для использования программистом. Так как пособие посвящено программированию для микропроцессора 8088-i486, то логичнее всего начать эту тему с обсуждения внутренних регистров микропроцессора, доступных для пользователя.

Пользовательские регистры используются программистом для написания программ. К этим регистрам относятся:

    восемь 32-битных регистров (регистры общего назначения) EAX/AX/AH/AL, EBX/BX/BH/BL, ECX/CX/CH/CL, EDX/DX/DLH/DL, EBP/BP, ESI/SI, EDI/DI, ESP/SP;

    шесть 16 -,битовых регистров сегментов: CS,DS, SS, ES, FS,GS;

    регистры состояния и управления: регистр флагов EFLAGS/FLAGS, и регистр указателя команды EIP/IP.

Через наклонную черту приведены части одного 32-разрядного регистра. Приставка E (Extended) обозначает использование 32-разраядного регистра. Для работы с байтами используются регистры с приставками L (low) и H(high), например, AL,CH - обозначающие младший и старший байты 16-разрядных частей регистров.

        Регистры общего назначения.

EAX/AX/AH/AL(Accumulator register) –аккумулятор . Используются при умножении и делении, в операциях ввода-вывода и в некоторых операциях над строками.

EBX/BX/BH/BL – базовый регистр (base register), часто используется при адресации данных в памяти.

ECX/CX/CH/CL – счетчик (count register), используется как счетчик числа повторений цикла.

EDX/DX/DH/DL –регистр данных (data register), используется для хранения промежуточных данных. В некоторых командах использование его обязательно.

Все регистры этой группы позволяют обращаться к своим «младшим» частям. Использование для самостоятельной адресации можно только младшие 16- и 8-битовые части этих регистров. Старшие 16 бит этих регистров как самостоятельные объекты недоступны.

Для поддержки команд обработки строк, позволяющих производить последовательную обработку цепочек элементов имеющих длину 32, 16 или 8 бит используются:

ESI/SI (source index register) – индекс источника . Содержит адрес текущего элемента источника.

EDI/DI (distination index register) – индекс приемника (получателя). Содержит текущий адрес в строке приемнике.

В архитектуре микропрцессора на программно-аппаратном уровне поддерживается структура данных – стек. Для работы со стеком есть специальные команды и специальные регистры. Следует отметить, что стек заполняется в сторону меньших адресов.

ESP/SP (stack poINTer register) –регистр указателя стека . Содержит указатель вершины стека в текущем сегменте стека.

EBP/BP (base poINTer register) –регистр указателя базы стека . Предназначен для организации произвольного доступа к данным внутри стека.

1.1.2. Сегментные регистры

В программной модели микропроцессора имеются шесть сегментных регистров: CS, SS, DS, ES, GS, FS. Их существование обусловлено спецификой организации и использования оперативной памяти микропроцессорами Intel. Микропроцессор аппаратно поддерживает структурную организацию программы состоящей из сегментов. Для указания сегментов доступных в данный момент предназначены сегментные регистры. Микропроцессор поддерживает следующие типы сегментов:

    Сегмент кода. Содержит команды программы Для доступа к этому сегменту служит регистр CS (code segment register) – сегментный регистр кода . Он содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор.

    Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр DS (data segment register) – сегментный регистр данных , который хранит адрес сегмента данных текущей программы.

    Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком. Микропроцессор организует стек по принципу – первый «пришел», первый «ушел». Для доступа к стеку служит регистр SS (stack segment register) – сегментный регистр стека , содержащий адрес сегмента стека.

    Дополнительный сегмент данных. Обрабатываемые данные могут находиться еще в трех дополнительных сегментах данных. По умолчанию предполагается, что данные находятся в сегменте данных. При использовании дополнительных сегментов данных их адреса требуется указать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах ES, GS, FS (extenSIon data segment registers).

        Регистры управления и состояния

Микропроцессор содержит несколько регистров, которые содержат информацию о состоянии, как самого микропроцессора, так и программы, команды которой в данный момент загружены в конвейер. Это:

Регистр указателя команд EIP/IP;

    регистр флагов EFLAGS/FLAGS.

Используя эти регистры, можно получать информацию о результатах выполнения команд и влиять на состояние самого микропроцессора.

EIP/IP (instruction poINTer register) –указатель команд . Регистр EIP/IP имеет разрядность 32 или 16 бит и содержит смещение следующей выполняемой команды относительно содержимого сегментного регистра CS в текущем сегменте команд. Этот регистр непосредственно недоступен, но изменение его производится командами перехода.

EFLAGS/FLAGS (Flag register) – регистр флагов . Разрядность 32/16 бит. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Флаг - это бит, принимающий значение 1 ("флаг установлен"), если выполнено некоторое условие, и значение 0 ("флаг сброшен") в противном случае. Младшая часть этого регистра полностью аналогична регистру FLAGS для i8086.

1.1.3 Регистр флагов

Регистр флагов является 32-разрядным, имеет имя EFLAGS (рис.1). Отдельные биты регистра имеют определенное функциональное назначение и называются флагами. Каждому из них присвоено определенное имя (ZF, CF и т.д). Младшие 16 бит EFLAGS представляют 16-разрядный регистр флагов FLAGS, используемый при выполнении программ, написанных для микропроцессора i086 и i286.

Рис.1 Регистр флагов

Некоторые флаги принято называть флагами условий; они автоматически меняются при выполнении команд и фиксируют те или иные свойства их результата (например, равен ли он нулю). Другие флаги называются флагами состояний; они меняются из программы и оказывают влияние на дальнейшее поведение процессора (например, блокируют прерывания).

Флаги условий:

CF (carry flag) - флаг переноса . Принимает значение 1, если при сложении целых чисел появилась единица переноса, не "влезающая" в разрядную сетку, или если при вычитании чисел без знака первое из них было меньше второго. В командах сдвига в CF заносится бит, вышедший за разрядную сетку. CF фиксирует также особенности команды умножения.

OF (overflow flag) - флаг переполнения . Устанавливается в 1, если при сложении или вычитании целых чисел со знаком получился результат, по модулю превосходящий допустимую величину (произошло переполнение мантиссы и она "залезла" в знаковый разряд).

ZF (zero flag) - флаг нуля . Устанавливается в 1, если результат команды оказался равным 0.

SF (SIgn flag) - флаг знака . Устанавливается в 1, если в операции над знаковыми числами получился отрицательный результат.

PF (parity flag) - флаг четности . Равен 1, если результат очередной команды содержит четное количество двоичных единиц. Учитывается обычно только при операциях ввода-вывода.

AF (auxiliary carry flag) - флаг дополнительного переноса . Фиксирует особенности выполнения операций над двоично-десятичными числами.

Флаги состояний:

DF (direction flag) - флаг направления . Устанавливает направление просмотра строк в строковых командах: при DF=0 строки просматриваются "вперед" (от начала к концу), при DF=1 - в обратном направлении.

IOPL (input/output privilege level) – уровень привилегий ввода-вывода. Используется в защищенном режиме работы микропроцессора, для контроля доступа к командам ввода-вывода, в зависимости от привилегированности задачи.

NT (nested task) – флаг вложенности задачи. Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую.

Системные флаг:

IF (INTerrupt flag) - флаг прерываний . При IF=0 процессор перестает реагировать на поступающие к нему прерывания, при IF=1 блокировка прерываний снимается.

TF (trap flag) - флаг трассировки . При TF=1 после выполнения каждой команды процессор делает прерывание (с номером 1), чем можно воспользоваться при отладке программы для ее трассировки.

RF (resume flag) – флаг возобновления . Используется при обработке прерываний от регистров отладки.

VM (virtuAL 8086 mode) – флаг виртуального 8086. 1-процессор работает в режиме виртуального 8086. 0- процессор работает в реальном или защищенном режиме.

AC (ALignment check) –флаг контроля выравнивания. Предназначен для разрешения контроля выравнивания при обращении к памяти.

      Организация памяти.

Физическая память, к которой микропроцессор имеет доступ, называется оперативной памятью (или оперативным запоминающим устройством - ОЗУ). ОЗУ представляет собой цепочку байтов, имеющих свой уникальный адрес (его номер), называемый физическим. Диапазон значений физических адресов от 0 до 4 Гбайт. Механизм управления памятью полностью аппаратный.

Микропроцессор аппаратно поддерживает несколько моделей использования оперативной памяти:

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

    страничную модель . В этом случае оперативная память рассматривается как совокупность блоков фиксированного размера 4 Кбайта. Основное применение этой модели связано с организацией виртуальной памяти, что позволяет использовать для работы программ пространство памяти большее, чем объем физической памяти. Для микропроцессора Pentium размер возможной виртуальной памяти может достигать 4 Тбайта.

Использование и реализация этих моделей зависит от режима работы микропроцессора:

    Режим реальных адресов (реальный режим). Режим аналогичный работе i8086 процессора. Необходим для функционирования программ, разработанных для ранних моделей процессоров.

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

    Режим виртуального 8086. В этом режиме появляется возможность работы нескольких программ для i8086. При этом возможна работа программ реального режима.

Сегментация – механизм адресации, обеспечивающий существование нескольких независимых адресных пространств. Сегмент представляет собой независимый, поддерживаемый на аппаратном уровне блок памяти.

Каждая программа в общем случае может состоять из любого количества сегментов, но непосредственный доступ она имеет к трем основным: кода, данных и стека – и от одного до трех дополнительных сегментов данных. Операционная система размещает сегменты программы в оперативной памяти по определенным физическим адресам, после чего помещает значения этих адресов в соответствующие регистры. Внутри сегмента программа обращается к адресам относительно начала сегмента линейно, то есть начиная с адреса 0 и заканчивая адресом, равным размеру сегмента. Относительный адрес или смещение, который микропроцессор использует для доступа к данным внутри сегмента, называется эффективным.

Формирование физического адреса в реальном режиме

В реальном режиме диапазон изменения физического адреса от 0 до 1 Мбайт. Максимальный размер сегмента 64 Кбайт. При обращении к конкретному физическому адресу оперативной памяти определяется адрес начала сегмента и смещение внутри сегмента. Адрес начала сегмента берется из соответствующего сегментного регистра. При этом в сегментном регистре содержатся только старшие 16 бит физического адреса начала сегмента. Недостающие младшие четыре бита 20-битного адреса получаются сдвигом значения сегментного регистра влево на 4 разряда. Операция сдвига выполняется аппаратно. Полученное 20-битное значение и является настоящим физическим адресом, соответствующим началу сегмента. То есть физический адрес задается как пара "сегмент:смещение",где "сегмент" (segment) - это первые16 битов начального адресасегмента памяти, которому принадлежитячейка, а "смещение" - 16-битовый адрес этой ячейки, отсчитанный от начала данного сегмента памяти (величина 16*сегмент+смещение дает абсолютный адрес ячейки). Если, например, в регистре CS хранится величина 1234h, тогда адресная пара 1234h:507h определяет абсолютный адрес, равный 16*1234h+507h =12340h+507h = 12847h. Такая пара записывается в виде двойного слова, причем (как и для чисел) в "перевернутом" виде: в первом слове размещается смещение, а вовтором - сегмент, причем каждое из этих словв свою очередь представлено в "перевернутом"виде. Например, пара 1234h:5678h будет записана так:| 78 | 56| 34 | 12|.

Данный механизм образования физического адреса позволяет сделать программное обеспечение перемещаемым, то есть не зависящим от конкретных адресов загрузки его в оперативной памяти.

По назначению можно выделить команды (в скобках приводятся примеры мнемонических кодов операций команд ассемблера ПК типа IBM PC):

l выполнения арифметических операций (ADD и ADC - сложения и сложения с переносом, SUB и SBB - вычитания и вычитания с заемом, MUL и IMUL - умножения без знака и со знаком, DIV и IDIV - деления без знака и со знаком, CMP - сравнения и т. д.);

l выполнения логических операций (OR, AND, NOT, XOR, TEST и т. д.);

l пересылки данных (MOV - переслать, XCHG - обменять, IN - ввести в микропроцессор, OUT - вывести из микропроцессора и т. д.);

l передачи управления (ветвления программы: JMP - безусловного перехода, CALL - вызова процедуры, RET - возврата из процедуры, J* - условного перехода, LOOP - управления циклом и т. д.);

l обработки строк символов (MOVS - пересылки, CMPS - сравнения, LODS - загрузки, SCAS - сканирования. Эти команды обычно используются с префиксом (модификатором повторения) REP;

l прерывания работы программы (INT - программные прерывания, INTO - условного прерывания при переполнении, IRET - возврата из прерывания);

l управления микропроцессором (ST* и CL* - установки и сброса флагов, HLT - останова, WAIT - ожидания, NOP - холостого хода и т. д.).

С полным списком команд ассемблера можно познакомиться в работах .

Команды пересылки данных

l MOV dst, src - пересылка данных (move - переслать из src в dst).

Пересылает: один байт (если src и dst имеют формат байта) или одно слово (если src и dst имеют формат слова) между регистрами или между регистром и памятью, а также заносит непосредственное значение в регистр или в память.

Операнды dst и src должны иметь одинаковый формат - байт или слово.

Src могут иметь тип: r (register) - регистр, m (memory) - память, i (impedance) - непосредственное значение. Dst могут быть типа r, m. Нельзя в одной команде использовать операнды: rsegm совместно с i; два операнда типа m и два операнда типа rsegm). Операнд i может быть и простым выражением:

mov AX, (152 + 101B) / 15

Вычисление выражения выполняется только при трансляции. Флаги не меняет.

l PUSH src - занесение слова в стек (push- протолкнуть; записать в стек изsrc). Помещает в вершину стека содержимое src - любого 16-битового регистра (в том числе и сегментного) или двух ячеек памяти, содержащих 16-битовое слово. Флаги не меняются;

l POP dst - извлечение слова из стека (pop - вытолкнуть; считать из стека в dst). Снимает слово с вершины стека и помещает его в dst - любой 16-битовый регистр (в том числе и сегментный) или в две ячейки памяти. Флаги не меняются.

Тема 2.5 Основы программирования процессора

С увеличением длины программы все труднее становится запомнить коды различных операций. Некоторую помощь в этом отношении оказывают мнемонические обозначения.

Язык символического кодирования команд называется ассемблером .

Язык ассемблер – это язык, в котором каждое высказывание соответствует ровно одной машинной команде.

Ассемблированием называется преобразование программы с языка ассемблера, т. е. подготовка программы на машинном языке путем замены символических имен операций на машинные коды, а символических адресов – на абсолютные или относительные номера, а также включение библиотечных программ и генерация последовательностей символических команд путем указания конкретных параметров в микрокомандах. Данная программа обычно размещается в ПЗУ или вводится в ОЗУ с некоторого внешнего носителя.

Язык ассемблер имеет несколько особенностей, отличающих его от языков высокого уровня:

1. Это взаимно однозначное соответствие между высказываниями языка ассемблера и машинными командами.

2. Программист на языке ассемблера имеет доступ ко всем объектам и командам, присутствующим на целевой машине.

Представление об основах программирования на машинно-ориентированных языках полезно для:



Лучшего понимания архитектуры ПК и более грамотного использования компьютеров;

Для разработки более рациональных структур алгоритмов программ решения прикладных задач;

Возможности просмотра и корректировки исполняемых программ с расширением.exe и.com, компилированных с любых языков высокого уровня, в случае утраты исходных программ (вызвав указанные программы в отладчик программы DEBUG и декомпилировав их отображение на языке ассемблера);

Составления программ решения наиболее ответственных задач (программа, составленная на машинно-ориентированном языке, обычно эффективнее – короче и быстрее процентов на 30-60 программ, полученных в результате трансляции с языков высокого уровня)

Для реализации процедур, включаемых в основную программу в виде отдельных фрагментов в том случае, если они не могут быть реализованы ни на используемом языке высокого уровня, ни с использованием служебных процедур ОС.

Программа на языке ассемблера может работать только на ЭВМ одного семейства, а программа, написанная на языке высокого уровня, потенциально может работать на разных машинах.

Алфавит языка ассемблера составляют символы ASCII.

Числа только целые. Различают:

Двоичные числа, заканчиваются буквой В;

Десятичные числа, заканчиваются буквой D;

Шестнадцатеричные числа, заканчиваются буквой Н.

Оперативная память, регистры, представление данных

Для определённой серии МП используется индивидуальный язык составления программ – язык ассемблер.

Язык ассемблер занимает промежуточное положение между машинными кодами и языками высокого уровня. Программировать на этом языке проще. Программа на языке ассемблер более рационально использует возможности конкретной машины (точнее МП), чем программа на языке высокого уровня (который более прост для программиста, чем ассемблер). Основные принципы программирования на машинно-ориентированных языках рассмотрим на примере языка ассемблер для МП КР580ВМ80. Для программирования на языке используется общая методика. Конкретные же технические приемы записи программ связаны с особенностями архитектуры и системы команд целевого МП.

Программная модель микропроцессорной системы на основе МП КР580ВМ80

Программная модель МПС в соответствии с рисунком 1

МП Порты Память

S Z AC P C

Рисунок 1

С точки зрения программиста МП КР580ВМ80 имеет следующие программно-доступные регистры.

А – 8-битовый регистр аккумулятор. Является главным регистром МП. Любая операция, выполняемая в АЛУ, предполагает размещение одного из операндов, подлежащих обработке, в аккумуляторе. Результат операции в АЛУ тоже обычно хранится в А.

B, C, D, E, H, L – 8-битовые регистры общего назначения (РОН). Внутренняя память МП. Предназначены для хранения обрабатываемой информации, а также результатов операции. При обработке 16-разрядных слов из регистров образуют пары BC, DE, HL, причем сдвоенный регистр называется первой буквой – B, D, H. В регистровой паре старшим является первый регистр. Особым свойством обладают регистры H, L, используемые как для хранения данных, так и для хранения 16-разрядных адресов ячеек ОЗУ.

FL – регистр флагов (регистр признаков) 8-битовый регистр, в котором сохраняются пять признаков результата выполнения арифметических и логических операций в МП. Формат FL в соответствии с рисунком

Разряд С (CY - carry) - перенос, устанавливается в 1, если был перенос из старшего разряда байта при выполнении арифметических операций.

Разряд Р (parity) – четность, устанавливается в 1, если число единиц в разрядах результата четно.

Разряд АС – дополнительный перенос, предназначен для хранения значения переноса из младшей тетрады результата.

Разряд Z (нуль) – устанавливается в 1, если результат операции равен 0.

Разряд S (знак) – устанавливается в 1, если результат отрицательный, и в 0, если результат положительный.

SP –- указатель стека, 16-разрядный регистр, предназначен для хранения адреса ячейки памяти, куда был записан последний введенный в стек байт.

РС – программный счетчик (счетчик команд), 16-разрядный регистр, предназначен для хранения адреса следующей выполняемой команды. Содержимое счетчика команд автоматически увеличивается на 1 сразу же после выборки очередного байта команды.

В начальной области памяти адреса 0000Н – 07FF располагается управляющая программа и демонстрационные программы. Это область ПЗУ.

0800 – 0АFF - область адресов для записи исследуемых программ. (ОЗУ).

0В00 – 0ВВ0 - область адресов для записи данных. (ОЗУ).

0ВВ0 – начальный адрес стека. (ОЗУ).

Стек – специально организованная область ОЗУ, предназначенная для временного хранения данных или адресов. Число, записанное в стек последним, извлекается из него первым. Указатель стека хранит адрес последней ячейки стека, в которой записана информация. При вызове подпрограммы в стеке автоматически сохраняется адрес возврата в основную программу. Как правило, в начале каждой подпрограммы сохраняются в стеке содержимое всех задействованных при ее выполнении регистров, а в конце подпрограммы восстанавливают их из стека.

Формат данных и структура команд языка ассемблер

Память МП КР580ВМ80 представляет собой массив 8-ьитных слов, называемых байтами, Каждый байт имеет свой 16-разрядный адрес, определяющий его положение в последовательности ячеек памяти. МП может адресовать 65536 байт памяти, которая может содержать как в ПЗУ, так и в ОЗУ.

Формат данных

Данные хранятся в памяти в виде 8-битных слов:

D7 D6 D5 D4 D3 D2 D1 D0

Младшим битом является бит 0, старшим – бит 7.

Команда характеризуется форматом, т. е. числом отведенных для нее разрядов, которые разделены побайтно на определенные функциональные поля.

Формат команд

Команды МП КР580ВМ80 имеют одно, двух или трехбайтный формат. Многобайтные команды должны быть размещены в соседних ЯП. Формат команды зависит от особенностей выполняемой операции.

Первый байт команды содержит код операции, записанный в мнемоническом виде.

Он определяет формат команды и те действия, которые должны быть выполнены МП над данными в процессе ее выполнения, и способ адресации, а также может содержать информацию о нахождении данных.

Во втором и третьем байтах могут находиться данные, над которыми производятся операции, или адреса, указывающие местонахождение данных. Данные, над которыми производятся действия, называются операндами.

Формат однобайтовой команды в соответствии с рисунком 2

Рисунок 4

В командах на языке ассемблера код операции имеет сокращённую форму записи английских слов – мнемоническое обозначение. Мнемоника (от греческого mnemonic – искусство запоминания) позволяет легче запомнить команды по их функциональному назначению.

Перед исполнением исходная программа переводится с помощью программы трансляции, называемой ассемблером, на язык кодовых комбинаций – машинный язык, в таком виде размещается в памяти МП и далее используется при выполнении команды.


Методы адресации

Все коды операндов (входные и выходные) должны где-то располагаться. Они могут находиться во внутренних регистрах МП (наиболее удобный и быстрый вариант). Они могут располагаться в системной памяти (самый распространенный вариант). Наконец, они могут находиться в устройствах ввода-вывода (наиболее редкий случай). Определение места положения операндов производится кодом команды. Существуют разные методы, с помощью которых код команды может определить, откуда брать входной операнд и куда помещать выходной операнд. Эти методы называются методами адресации.

Для МП КР580ВМ80 существуют следующие методы адресации:

Непосредственная;

Регистровая;

Косвенная;

Стековая.

Непосредственная адресация предполагает, что операнд (входной) находится в памяти непосредственно за кодом команды. Операнд обычно представляет собой константу, которую надо куда-то переслать, к чему-то прибавить и т. д. данные содержатся во втором или во втором и третьем байтах команды, причем младший байт данных находится во втором байте команды, а старший – в третьем байте команды.

Прямая (она же абсолютная) адресация предполагает, что операнд (входной или выходной) находится в памяти по адресу, код которого находится внутри программы сразу же за кодом команды. Используется в трехбайтовых командах.

Регистровая адресация предполагает, что операнд (входной или выходной) находится во внутреннем регистре МП. Используется в однобайтовых командах

Косвенная (неявная)адресация предполагает, что во внутреннем регистре МП находится не сам операнд, а его адрес в памяти.

Стековая адресация предполагает, что команда не содержит адрес. Адресация к ячейкам памяти по содержимому 16-разрядного регистра SP (указателя стека).

Система команд

Система команд МП – это полный перечень элементарных действий, которые способен производить МП. Управляемый этими командами МП выполняет простые действия, такие как элементарные арифметические и логические операции, пересылку данных, сравнение двух величин и др. Число команд МП КР580ВМ80 - 78 (с учетом модификаций 244).

Различают следующие группы команд:

Передачи данных;

Арифметические;

Логические;

Команды перехода;

Команды ввода-вывода, управления и работы со стеком.


Символы и сокращения, применяемые при описании команд и составлении программ

Символ Сокращение
ADDR 16-битовый адрес
DATA 8-битовые данные
DATA 16 16-битовые данные
PORT 8-битовый адрес УВВ (устройства ввода-вывода)
BYTE 2 Второй байт команды
BYTE 3 Третий байт команды
R, R1, R2 Один из регистров: A, B, C, D, E, H, L
RP Одна из регистровых пар: В - задает пару ВС; D - задает пару DE; H – задает пару HL
RH Первый регистр пары
RL Второй регистр пары
Λ Логическое умножение
V Логическое сложение
Сложение по модулю два
М Ячейка памяти, адрес которой задаёт содержимое регистровой пары HL, т. е. М = (HL)

Курсоваяработа

По дисциплине «Системное программирование»

Тема №4: «Решение задач на процедуры»

Вариант 2

ВОСТОЧНО-СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ТЕХНОЛОГИЙ И УПРАВЛЕНИЯ

____________________________________________________________________

ТЕХНОЛОГИЧЕСКИЙ КОЛЛЕДЖ

ЗАДАНИЕ

на курсовую работу

Дисциплина:
Тема: Решение задач на процедуры
Исполнитель(и):Главинская Арина Александровна
Руководитель:ДамбаеваСэсэгма Викторовна
Краткое содержание работы:изучение подпрограмм на языке Ассемблера,
решение задач с использованием подпрограмм
1. Теоретическая часть:Основные сведения о языке Ассемблер (набор
команд и т.д.), Организация подпрограмм, Способы передачи впараметров
в подпрограммах
2. Практическая часть:Разработать две подпрограммы, одна из которых преобразует любую заданную букву в заглавную (в том числе для русских букв), а другая преобразует букву в строчную.
преобразует любую заданную букву в заглавную, а другая преобразует букву в строчную.
преобразует букву в строчную.
Сроки выполнения проекта по графику:
1. Теоретическая часть - 30 % к 7 неделе.
2. Практическая часть - 70 % к 11 неделе.
3. Защита - 100% к 14 неделе.
Требования к оформлению:
1. Расчетно-пояснительная записка курсового проекта должна быть представлена в
электронной и твердой копиях.
2. Объем отчета должен быть не менее 20 машинописных страниц без учета приложений.
3. РПЗ оформляется по ГОСТу 7.32-91 и подписывается у руководителя.

Руководитель работы __________________

Исполнитель __________________

Дата выдачи "26 " сентября 2017 г.


Введение. 2

1.1 Основные сведения о языке Ассемблер. 3

1.1.1 Набор команд. 4

1.2 Организация подпрограмм в языке Ассемблер. 4

1.3 Способы передачи параметров в подпрограммах. 6

1.3.1 Передача параметров через регистры.. 6

1.3.2 Передача параметров через стек. 7

2 ПРАКТИЧЕСКИЙ РАЗДЕЛ.. 9

2.1 Постановка задачи. 9

2.2 Описание решения задачи. 9

2.3 Тестирование программы.. 7

Заключение. 8

Список литературы.. 9


Введение

Общеизвестно, что программировать на Ассемблере трудно. Как Вы знаете, сейчас существует много различных языков высокого уровня , которые позволяют затрачивать намного меньше усилий при написании программ. Естественно, возникает вопрос, когда у программиста может появиться необходимость использовать Ассемблер при написании программ. В настоящее время можно указать две области, в которых использование языка Ассемблера оправдано, а зачастую и необходимо.

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

Вторая область применения Ассемблера связана с оптимизацией выполнения программ. Очень часто программы-переводчики (компиляторы) с языков высокого уровня дают весьма неэффективную программу на машинном языке. Обычно это касается программ вычислительного характера, в которых большую часть времени выполняется очень небольшой (порядка 3-5%) участок программы (главный цикл). Для решения этой проблемы могут использоваться так называемые многоязыковые системы программирования, которые позволяют записывать части программы на различных языках. Обычно основная часть программы записывается на языке программирования высокого уровня (Фортране, Паскале, С и т.д.), а критические по времени выполнения участки программы – на Ассемблере. Скорость работы всей программы при этом может значительно увеличиться. Часто это единственный способ заставить программу дать результат за приемлемое время.

Целью данной курсовой работы является получение практических навыков работы программирования на языке ассемблера.

Задачи работы:

1. Изучить основные сведения о языке Ассемблер (структура и компоненты программы на Ассемблере, формат команд, организация подпрограмм и др.);

2. Изучить виды битовых операций, формат и логику работы логических команд Ассемблера;

3. Решить индивидуальную задачу на применение подпрограмм в Ассемблере;

4.. Сформулировать вывод о проделанной работе.

1 ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ

Основные сведения о языке Ассемблер

Assembler - язык программирования низкого уровня, представляющий собой формат записи машинных команд, удобный для восприятия человеком.

Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции: связывание частей программы и данных через метки с символьными именами и директивы.

Директивы ассемблера позволяют включать в программу блоки данных (описанные явно или считанные из файла); повторить определённый фрагмент указанное число раз; компилировать фрагмент по условию; задавать адрес исполнения фрагмента, менять значения меток в процессе компиляции; использовать макроопределения с параметрами и др.

Достоинства и недостатки

· минимальное количество избыточного кода (использование меньшего количества команд и обращений в память). Как следствие - большая скорость и меньший размер программы;

· большие объемы кода, большое число дополнительных мелких задач;

· плохая читабельность кода, трудность поддержки (отладка, добавление возможностей);

· трудность реализации парадигм программирования и любых других сколько-нибудь сложных конвенций, сложность совместной разработки;

· меньшее количество доступных библиотек, их малая совместимость;

· непосредственный доступ к аппаратуре: портам ввода-вывода, особым регистрам процессора;

· максимальная «подгонка» для нужной платформы (использование специальных инструкций, технических особенностей «железа»);

· непереносимость на другие платформы (кроме двоично совместимых).

Кроме инструкций, программа может содержать директивы: команды, не переводящиеся непосредственно в машинные инструкции, а управляющие работой компилятора. Набор и синтаксис их значительно разнятся и зависят не от аппаратной платформы, а от используемого компилятора (порождая диалекты языков в пределах одного семейства архитектур). В качестве набора директив можно выделить:

· определение данных (констант и переменных);

· управление организацией программы в памяти и параметрами выходного файла;

· задание режима работы компилятора;

· всевозможные абстракции (т.е. элементы языков высокого уровня) - от оформления процедур и функций (для упрощения реализации парадигмы процедурного программирования) до условных конструкций и циклов (для парадигмы структурного программирования);

· макросы.

Набор команд

Типичными командами языка ассемблера являются:

· Команды пересылки данных (mov и др.)

· Арифметические команды (add, sub, imul и др.)

· Логические и побитовые операции (or, and, xor, shr и др.)

· Команды управления ходом выполнения программы (jmp, loop, ret и др.)

· Команды вызова прерываний (иногда относят к командам управления): int

· Команды ввода-вывода в порты (in, out)

Для микроконтроллеров и микрокомпьютеров характерны также команды, выполняющие проверку и переход по условию, например:

· jne - перейти, если не равно;

· jge - перейти, если больше или равнo .



Понравилась статья? Поделитесь ей