Определение полей памяти для размещения данных. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Определение полей памяти для размещения данных.



Для определения данных в основной памяти и резервирования полей памяти под данные, размещаемые в основной памяти в процессе выполнения программы, используются следующие операторы:

D B - определить однобайтовое поле, D W - определить слово (двухбайтовое поле), D D - определить двойное слово (четырехбайтовое поле).

Формат команды:

DB

[<имя поля>] DW [< количество > DU P (]{ <список чисел >}[)]

                        D D                            ?

где <количество >- количество полей памяти указанной длины, которое определяется данной командой (указывается, если определяется не одно поле памяти);? - используется при резервировании памяти.

Приведем примеры.

1. Записать в байт памяти десятичное число 23 и присвоить этому байту имя а: 

  a db 23.

2. Зарезервировать 1 байт памяти: db?

3. Записать в слово памяти шестнадцатеричное число 1234: dw 1234 H.

4. Определить 31 байт памяти, повторяя последовательность 1, 2, 3, 4, 5, 1, 2, 3, 4,...:  

                               db 31 dup (1,2,3,4,5)

Примечание. При записи слов в память младший байт записывается в поле с младшим адресом. Например, в примере 3, если запись выполнялась по адресу 100, то по адресу 100 будет записано 34H, а по адресу 101 - 12H.

Операнды команд ассемблера.

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

Данные, непосредственно записанные в команде, называются литералами. Так, в команде 

          mov ah, 3  3 - литерал.

Если операнды команд ассемблера находятся в регистрах, то в соответствующих командах указываются имена регистров (если используемые регистры особо не оговариваются для данной команды. Например, в приведенном выше примере аh - имя регистра аккумулятора.

Адресация операндов, расположенных в основной памяти, может быть прямой и косвенной.

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

Inc OPND

Здесь OPN D - символическое имя поля памяти, определенного оператором ассемблера

OPN D dw?

При трансляции программы ассемблер заменит символическое имя на исполнительный адрес указанного поля памяти (смещение относительно начала сегмента) и занесет этот адрес на место индексного смещения. Адресация а этом случае выполняется по схеме: B Р + <индексное смещение>, но содержимое регистра ВР при вычислении исполнительного адреса не используется (частный случай).

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

[OPND +SI]

 OPND [SI]

OPND + [SI]

[ OPND ] +[ SI ]

Приведенные выше формы записи косвенного адреса интерпретируются одинаково.

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

Примечание. При использовании косвенной адресации по схеме ВР + <индексное смещение> индексное смещение не может быть опущено, так как частный случай адресации по данной схеме с нулевой длиной индексного смещения используется для организации прямой адресации. Следовательно, при отсутствии индексного смещения в команде следует указывать нулевое индексное смещение, т.е. [ ВР + 0 ].

Приведем два примера: [ a + bx ] и [ b р ]+[ si ] + 6.

В первом случае исполнительный адрес операнда определяется суммой содержимого регистра b х и индексного смещения, заданного символическим именем " а ", а во втором - суммой содержимого регистров bp, si и индексного смещения, равного 6.

Длина операнда может определяться:

а) кодом команды - в том случае, если используемая команда обрабатывает данные определенной длины, что специально оговаривается;

б) объемом регистров, используемых для хранения операндов (1 или 2 байта);

в) специальными указателями byte ptr (1 байт) и word ptr (2 байта), которые используются в тех случаях, когда длину операнда нельзя установить другим способом. Например,

    mov byte ptr x, 255

т. е. операнд пересылается в поле с именем " х " и имеет длину I байт.

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

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

  MOV <адрес приемника>,< адрес источника>

используется для пересылки данных длиной I или 2 байта из регистра в регистр, из регистра в основную память, из основной памяти в регистр, а также для записи в регистр или основную память данных, непосредственно записанных в команде.

Приведем примеры:

а) mov ax, bx - пересылка содержимого регистра bx в регистр ax;

б) mov cx, exword - пересылка 2 байт, расположенных     в поле exword, из основной памяти в регистр cx;

в) mov si, 1000 - запись числа 1000 в регистр si;

г) mov word ptr [ di +515], 4 - запись числа 4 длиной 2 байта в основную память по адресу [ di +515].

Для загрузки "прямого" адреса в сегментный регистр используются две команды пересылки:

Mov ax, code

Mov ds, ax

Команда обмена данных.

ХCHG <операнд 1>, <операнд 2>

организует обмен содержимого двух регистров (кроме сегментных) или регистра и поля основной памяти. Например:

xchg bx, cx - обмен содержимого регистров bx и сх.



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 24; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.99.7 (0.009 с.)