Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Листинг 2.4. Корректировка регистра SP.

ВВЕДЕНИЕ | ВИДЕОИГРЫ. ПЕРВЫЕ ШАГИ... | ОСНОВЫ ЯЗЫКА АССЕМБЛЕРА | Листинг 2.1. Прототип процедуры для MASM 5.0 и более старших версий. | Листинг 2.2. Простая процедура сложения. | Листинг 2.7. Ассемблерная часть примера. | Листинг 2.9. Си-функция, тестирующая видеорежим (SETMOPEC.C). | Листинг 2.11, Программа на Си для тестирования программы 2.10 (FILLC.C). | ОСНОВЫ РАБОТЫ С УСТРОЙСТВАМИ ВВОДА | Листинг 3.1. Чтение кнопок джойстика. |


Читайте также:
  1. II. Регистрация участников
  2. II.8.2. Фотографическая регистрация спектра
  3. II.8.3. Фотоэлектрическая регистрация спектра
  4. VI. Регистрация пассажиров и оформление багажа
  5. XI. Регистрация проспекта ценных бумаг после государственной регистрации отчета об итогах выпуска (дополнительного выпуска) ценных бумаг
  6. Ассоциация «Центросерт» оказывает профессиональные услуги по оформлению сертификатов и регистрации деклараций по Единым формам Таможенного союза.
  7. Бланк для регистрации наблюдений экспериментатора.

push ВР; устанавливаем фрейм стека, как обычно

mov BP,SP

sub SP,4; корректируем указатель стека. Теперь наши

;переменные не будут случайно изменены

;Вся работа выполняется здесь

add SP,4; перед уничтожением фрейма стека надо восстановить

; исходное значение указателя стека

pop ВР

; уничтожаем фрейм стека,

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

Директива LOCAL

Заметьте, что в Листинге 2.4 мы изменили значение регистра SP не только в начале процедуры, но и в конце (перед тем как восстановить регистр ВР). Эта техника обычно используется для размещения переменных в ассемблерных процедурах при их вызовах из языков высокого уровня.

В листинге 2.4 это делалось вручную. А вот MASM 5.1 и более поздние версии имеют встроенную директиву, которая выполняет это автоматически. Это директива LOCAL и она имеет следующий синтаксис:

LOCAL variable name: type, variable name: type,...

(Любопытно. MASM все больше становится похож на Си. К чему бы это?) Давайте теперь напишем программу с использованием директивы LOCAL. Она называется Timer и требует одного параметра — time, который затем помещает в локальную переменную asm time. Из Си этот вызов будет выглядеть так:

Timer(25);

Листинг 2.5 показывает реализацию программы Timer на ассемблере, используя все директивы, которые мы обсудили в этой главе.


Дата добавления: 2015-07-12; просмотров: 88 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Листинг 2.3. Модифицированная версия Add_Int.| Листинг 2.5. Программа Timer.

mybiblioteka.su - 2015-2024 год. (0.012 сек.)