Формальные параметры делятся на входные и выходные.




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

Выходные параметры могут передаваться только по адресу.

Описание подпрограммы в языке ассемблер имеет следующую структуру:

<имя процедуры> proc <тип процедуры>

...

операторы тела подпрограммы

...

ret [<выражение>]

<имя процедуры> endp

<тип процедуры> - определяет тип перехода: near (близкий), far (дальний).

Если тип не задан, по умолчанию принимается near. Тип перехода near показывает, что тело процедуры описано в том же сегменте, что и её вызов. Тип перехода far обеспечивает вызов процедуры из других сегментов, с другим значением регистра CS. Такие процедуры обычно используются как отдельные объектные модули или в составе библиотек. ret [<выражение>] - выполняет возврат из процедуры в вызывающую программу. В зависимости от типа процедуры, эта команда восстанавливает из стека значение IP (ближний вызов) или CS:IP (дальний вызов). Эта команда не обязана быть последней по тексту процедуры, но является последней по порядку выполнения. Значение <выражение> указывает размер стека в байтах, восстанавливаемого при возврате из процедуры. Восстановление стека необходимо производить при передаче параметров процедуры через стек. Так как работа со стеком выполняется словами, значение <выражение> всегда должно быть кратным двум. Допускается вложение описания подпрограммы внутрь описания другой подпрограммы.

 

28. Логические инструкции микропроцессора Cortex-M3. Примеры.

 

 

 

30. Этапы создания исполняемого файла для микропроцессора Cortex-M3.

 

 

29. Инструкции передачи управления микропроцессора Cortex-M3. Примеры. (можно разбить)

 

передача управления осуществляется с помощью инструкций безусловных и условных переходов, вызовов процедур и прерываний (исключений). Безусловный переход (JMP) может быть как внутрисегментным (ближним или коротким), так и межсегментным (дальним). Адрес перехода может непосредственно указывать в команде, а при косвенной адресации адрес перехода находится в регистре или памяти и может иметь дополнительные слагаемые. Короткий переход (short) может передавать управление только на адрес назначения, удаленный от текущего в пределах от –128 до +127 байт, ближний (near) – в пределах сегмента. При дальнем (far) переходе адрес назначения (непосредственный или косвенный) включает новое значение указателя инструкций и значение (или селектор) сегмента кода, обеспечивая доступ к любой точке памяти (в пределах, разрешенных защитой).

Условные переходы в 8086 и 80286 возможны только короткие (8–байтовое смещение), процессоры 386+ допускают переход в пределах 16– или 32–байтного смещения, в зависимости от режима адресации. Условные переходы выполняются по состоянию флагов и/или содержимому регистра CX (ECX). Инструкции циклов комбинируют условный переход с декрементом регистра CX (ECX).

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

 

34. Директивы резервирования памяти.

 

AREA - указывает асемблеру начало новой секции кода или данных.

Синтаксис: AREA имя_секции {,атрибут 1}{,атрибут 2}

Имя секции обязательный параметр.

Атрибуты:

CODE - секция содержит машинные инструкции. Секции с атрибутом CODE по умолчанию имеют атрибут READONLY

READONLY - указывает что запись в данную секцию запрещена

READWRITE - указывает компилятору, что разрещена запись и чтерие секций

DATA - секция содержит данные. Секции с атрибутом DATA поумолчанию имеют атрибут READWRITE

GROUP =имя_группы- указагие включить данную секцию в группу

NOINIT -указывает, что секция данных содержит неинициализированные данные или инициализированные нулями.

DCB - резервирование одного (или нескольких байт) и присвоение начального значения.

Синтаксис: {метка(имя}DCB выражение1{выражение 2}

Пример:

Var1 DCB 5

MAS DCB Ox34,28,-23,2_100100110

SYM DCB “Y”

 

DSW - резервирование одного(или нескольких полуслов) выровненных по границе 2-байтного слова и присвоение начального значения

Синтаксис: {метка(имя}DSW выражение1{выражение 2}

Пример:

Var1 DSW 45

DCWU - тоже самое, но без выравнивания

SPACE- резервирует блок памяти заполненный нулями

FILL - резервирует блок памяти заполненный заданным значением

Синтаксис:

{метка}SPACE выражение

{метка}FILL выражение{, значение{,размер}}

Размер=[1,2,4], по-умолчанию=1 (в байтах)

 

DCQ- резервирование одного (или нескольких) 64-слов выровненных по границе 4-байтного слова и присвоение начального значения

DCQU- то же самое но без выравнивания

Синтаксис:

{метка} DCQ значение{, значение}

{метка}DCQU значение{, значение}

 

DCD - резервирование одного (или нескольких) 32-слов выровненных по границе 4-байтного слова и присвоение начального значения

DCDU- то же самое но без выравнивания

Синтаксис:

{метка} DCDзначение{, значение}

{метка}DCDU значение{, значение}



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-06-17 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: