Читайте также:
|
|
Мнемоника | Формат | Пояснение |
Команды общего назначения | ||
MOV | MOV приемник, источник | Переслать значение |
push | PUSH источник | Поместить в стек |
pop | PОР приемник | Извлечь из стека |
XCHG | XCHG приемник, источник | Обменять значения |
Команды ввода-вывода | ||
IN | IN аккумулятор, порт | Читать из порта |
OUT | OUT порт, аккумулятор | Записать в порт |
Команды пересылки адреса | ||
LEA | LEA регистр16, память16 | Загрузить исполнительный адрес |
LDS | LDS регистр 16, память32 | Загрузить в peгистp DS l6 полный адрес |
L.ES | LES регистр 16. память32 | Загрузить в peгистp ES I6 полный адрес |
Одна из наиболее часто используемых команд - MOV позволяет в защищенном режиме переслать байт или слово из регистра в регистр, из памяти в регистр или из регистра в память. Тип пересылаемых данных (байт или слово) определяется регистром, участвующим в пересылке. Ниже приводятся примеры использования команды:
mov ax,Table {Пересылка слова из памяти в АХ}
mov Table,ah (Пересылка байта из АН в память}
mov ds,ax {Пересылка в сегмент данных}
mov es:[bx],ax {Пересылка слова в память: базовая адресация с заменой сегмента} mov ch,-17 {Переслать константу в регистр}
mov Table,$FF {Переслать константу в память}
С помощью МОV нельзя пересылать:
• из памяти в память, например,
mov Mem1, Mem2
следует использовать
mov ax,Mem2
mov Mem1,ax
• константу или переменную в DS, например, нельзя
mov DS, Data_Seg
нужно:
mov ax, Data_Seg
mov ds,ax
• один сегментный регистр в другой, например, нельзя
mov es, ds
но можно
mov ax, ds
mov es, ax
• в регистр CS; значение этого регистра (сегмента кода) автоматически меняется при выполнении дальних команд CALL и JMP; кроме того, он загружается из стека при выполнении команды RETF (выход из дальней процедуры).
Для временного сохранения регистров и данных, а также для обмена значениями между регистрами широко используются стековые команды PUSH и POP. Каждая них работает со словом, т.е. в стек нельзя поместить или извлечь из него одиночный байт. При выполнении PUSH вначале уменьшается на 2 содержимое указателя SP, затем операнд помещается по адресу SS: SP.
При извлечении из стека сначала читается память по адресу SS: SP, а затем SP увеличивается на 2. Таким образом, при запоминании указатель вершины стека SP смещается к младшим адресам, а при освобожден к старшим. При работе со стеком следует помнить о специфике использования стековой памяти («последним пришел - первым ушел»), а также о том, что эта память интенсивно используется при вызове процедур, т.е. состояние стека к моменту выхода из процедуры должно быть строго согласовано с дальнейшей работой программы. Первое условие определяет порядок извлечения данных из стека - он должен быть обратным порядку, в котором эти данные помещались в стек. Второе условие фактически означает, что после выхода из процедуры указатель SP должен содержать то же смещение, что и к моменту входа в нее. Иными словами, процедура не должна «забыть» в стеке лишнее слово или взять из него больше нужного.
Команда загрузки адреса LEA загружает в регистр адрес (смещение) нужного участка памяти. Этого же можно достичь с помощью зарезервированного слова OFFSET, стоящего перед именем переменной. Например:
var
X: Word;
asm
mov ax, OFFSET X (Загружаем смещение X в AX}
lea ax, X {To же действие}
end;
Разница состоит в том, что в случае команды LEA разрешается использовать индексную адресацию, что особенно удобно при пересылке массивов данных.
Две другие команды адресной загрузки - LDS и LES загружают первое
16- разрядное слово из источника в регистр-приемник, а затем следующее слово в регистр DS или ES, т.е. они рассчитаны на загрузку полного адреса операнда.
Дата добавления: 2014-12-19; просмотров: 94 | Поможем написать вашу работу | Нарушение авторских прав |