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

Для временного сохранения данных (содержимого регистра или ячейки памяти) удобно использовать стек. Для работы со стеком есть две команды PUSH (поместить слово в стек) и POP (извлечь слово из стека).

Команда PUSH помещает содержимое регистра или ячейки памяти размером в слово на вершину стека. Команда POP, наоборот, снимает слово с вершины стека и помещает его в регистр или ячейку памяти.

Команды PUSH и POP имеют следующие форматы:

PUSH источник

POP приемник.

Будучи взаимно обратными командами, PUSH и POP обычно используются парами, т.е. каждой команде PUSH в программе должна соответствовать команда POP.

Вершина стека – это ячейка в сегменте стека, адрес которой содержится в указателе стека SP. Регистр SP всегда указывает на слово, помещенное в стек последним. Следовательно, команда PUSH вычитает 2 из значения указателя стека, а затем пересылает операнд-источник в стек.

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

Команды ввода-вывода используются для взаимодействия с периферийными устройствами системы. Они имеют формат:

IN аккумулятор,порт

OUT порт,аккумулятор

Где аккумулятор – регистр AL при обмене байтами или регистр AX при обмене словами. Операндом порт может быть десятичное число от 0 до 255, что позволяет адресоваться к 256 устройствам.

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

IN AL,200;ввести байт из порта 200

IN AL,PORT_VAL;или из порта указанного константой

OUT 30H,AX; вывести слово в порт 30H

OUT DX,AX; или в порт, указанный в DX.

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

Команды пересылки адреса передает не содержимое переменных, а их адреса. Команда LEA (load effective address – загрузить эффективный адрес) пересылает смещение ячейки памяти в любой 16-битовый регистр общего назначения, регистр указателя или индексный регистр. Она имеет формат:

LEA регистр16,память16

Где операнд память16 должен иметь атрибут WORD.

Операнд память16 в команде LEA может быть индексирован, что дает возможность осуществить гибкую адресацию. Например, если регистр DI содержит 2, то команда

LEA BX,TABLE[DI]

Загрузит смещение адреса TABLE+2 в регистр BX.

Команда LDS (load poINTer uSIng DS – загрузить указатель с использованием регистра DS) считывает из памяти 32-битовое двойное слово и загружает первые 16 битов в заданный регистр, а следующие 16 битов – в регистр сегмента данных DS. Она имеет формат:

LDS регистр16,память32,

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

Команда LES (load poINTer uSIng ES – загрузить указатель с использованием регистра ES) идентична команде LDS, но загружает номер блока в регистр ES, а не в DS.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: