Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Описание процедур - Программирование от RIN.RU
Описание процедур



Область действия аргументов и имен локальных переменных


Если вы не задаете для них имена с предшествующий префиксом локального идентификатора, все аргументы, заданные в заголовке процедуры, определены ли они с помощью директивы ARG (передаваемые аргументы), RETURN (возвращаемые аргументы) или LOCAL (локальные переменные) имеют глобальную область действия.


Идентификаторы с локальной областью действия разрешает директива LOCALS. Например:


.
.
.
LOCALS
test1 PROC PASCAL FAR
ARG @a:WORD,@d:WORD,@c:BYTE
LOCAL @x:WORD,@y:DWORD
MOV ax,@a
MOV @x,ax
LES di,@b
MOV WORD ptr @y,di
MOV WORD ptr @y+2,es
MOV @c,"a"
RET
ENDP


test2 PROC PASCAL FAR
ARG @a:DWORD,@b:BYTE
LOCAL @x:WORD
LES di,@a
MOV ax,es:[di]
MOV @x,ax
CMP a1,@b
jz @dn
MVO @x,0
@dn: MOV ax,@x
RET
ENDP
.
.
.


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


Поскольку в данном примере используются переменные локальной области действия, их имена существуют только в теле процедуры. Таким образом, в test2 можно снова использовать имена @a, @b и @x.


Сохранение регистров


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


Турбо Ассемблер может автоматически генерировать код для сохранения и восстановления этих регистров, который включается в код начала и завершения. Эти регистры можно указать в операторе USES, который имеет следующий синтаксис:


USES элемент [,элемент] .


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


.
.
.
myproc PROC PASCAL NEAR
ARG @source:DWORD,@dest:DWORD,@count:WORD
USES cx,si,di,foo
MOV cx,@count
MOV foo,@count
LES di,@dest
LDS si,@source
REP MOVSB
ENDP
.
.
.


О сохранении регистров в языках Си и Паскаль можно подробнее узнать в тих главах: 1 и 2.


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


<<<  НазадВперед  >>>
 1  2  3  4  5 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Объектно-ориентированное программирование

Использование выражений и значений идентификаторов

Директивы выбора процессора

Использование моделей памяти программы и сегментации

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Расширенные инструкции

Использование макрокоманд

Использование условных директив

Интерфейс с компоновщиком

Генерация листинга

Интерфейс Турбо Ассемблера и Borland C++

Интерфейс Турбо Ассемблера с Турбо Паскалем

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь