Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Команды работы с адресами и указателями

Push cs

Pop ds

Push ax

Mov ds, ax

Mov ax, 0000h

Mov mas1, al

Mov al, mas

Особенности пересылки данных

Переопределение сегмента

Косвенная по базе с индексированием

Косвенная адресация по базе

Прямая адресация с индексированием

Косвенная адресация

Mov w1, 23h

Прямая и непосредственная адресация

Mov dw1, ecx

Регистровая и прямая адресация

Aw2 dw 10, 20

Ab db 1,2,3

Dw1 dd 3

W1 dw 0

B1 db 1

Data

Способы адресации памяти

Непосредственная адресация

Регистровая адресация

Способы адресации

Db 0010000B

Db 20h

Db 32

db 10 dup (0); в память будет записано десять нулей

db 0ffh, 0f0h; в памяти будет записано: FF F0

 

Для объявления константы используется 2 директивы:

 

KILO EQU 1024; килобайт представляет собой 1024

Константу объявленную EQU переопределять нельзя.

 

KILO=1024; можно по ходу программы переопределять константу

 

Часто в программе требуется найти длину массива:

mes DB ‘ЖДИТЕ’

meslen EQU $-mes; вычисление константы

$ - возвращает адрес последнего байта, а метка mes – адрес начала массива

Регистры могут быть 8-битовые, 16-битовые или 32-битовые

Примеры:

mov ah, bh; пересылка байта

mov di, bx; пересылка слова

mov edx, ebx; пересылка двойного слова

mov ax, bl; ошибка (смещение типов)

 

 

В качестве операнда выступает константа.

Примеры:

mov eax,-2;расширение 2 до 32 разрядов

mov ds,60h; ошибка (прямая загрузка запрещена)

.

В следующих примерах используем объявленный ниже сегмент данных:

 

 

Прямая адресация – это адресация с использованием имени.

 

mov сх, w1; сх обнуляется

 

Адрес указывается в регистре. В качестве регистров можно использовать все индексные регистры.

mov [bx], al; al загрузить по адресу, который находится в

:регистре bx

mov [si], ecx

mov dх, [ecx]

 

 

mov ab[di],0;Обнулить байт по адресу ab+[di]

mov sp,aw2[ecx]

mov byte ptr [bx]+2, 12;записать по адресу [bx]+2 число 12

mov byte ptr 2[bx], 12;можно так

mov dx, [eax+2]

mov [ebp*4+2], esi

mov al, [bp] + [si]

mov word ptr [eax+esi], 4

mov ebp, [ecx+edi*4]

mov ab3 [ebx+edx+2], dh

mov cx, [eax] [ebp+4]; операнд находится в стеке

Следует имя регистра сегментации в операнде указать явно

mov byte ptr es:[800h+di],20h

1. Нельзя пересылать из одной области памяти в другую. Необходимо использовать буферный регистр:

2. Нельзя загружать сегментный регистр непосредственно из памяти, следует использовать промежуточный регистр или стек:

3. Нельзя пересылать из одного регистра сегментации в другой. Нужен либо промежуточный регистр, либо стек:

pop ds; читает из стека и записывает в DS

4. При пересылке следует учитывать размер операнда

mov ax, word ptr [bx]; пересылка слова

inc word ptr [bx]

mov byte ptr [mas+1], 0ffh;записать байт (ff) по адресу

xch ax, bx; команда двунаправленного обмена

 

 

lea <назначение>, <источник> - загрузка эффективного адреса в регистр общего назначения

Имя регистра назначения указывается в команде, в него записывается эффективный адрес.

 

Загрузка полного указателя в сегментный регистр и регистр общего назначения.

 

lds <назначение>, <источник>

les <назначение>, <источник>

lgs <назначение>, <источник>

lfs <назначение>, <источник>

lss <назначение>, <источник>

.

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

 

Пример

.data

str db ‘Assembler’

:

.

full dd str;выделяется 2 слова для записи полного адреса массива

:

.

les bx, full; в регистры bx и es записан полный адрес переменной str

 

lea bx, str; в регистр bx загрузить эффективный адрес str

 

<== предыдущая лекция | следующая лекция ==>
TD prog | Команды логического линейного сдвига
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 418; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.