Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по архитектуре ЭВМ.doc
Скачиваний:
46
Добавлен:
02.05.2014
Размер:
238.59 Кб
Скачать

4. Директивы определения данных

dB – 1 байт

DW – слово

DD – двойное слово

DF – 6 байт

DQ – учетверённое слово

DT – 10 байт

По данным директивам отводятся определённое место в памяти.

Пример 1

Имя – директива

X DB? – под переменную отвести 1 байт, в котором ничего не записывается

X DB ?

DB 12h |

DB ‘*’ |=> X DB ? , 12h , ‘*’ , 0

DB 0 |

Под X отводиться 4 байта подряд. Если под переменную X нужно поместить 8 одинаковых значений (X DB 0,0, … 0)? То удобно использовать конструкцию повторения:

X DB 8 DUP (0)

X DB 2 DUP (‘ab‘,?,1)  X DB ‘ab‘,?,1, ‘ab‘,?,1

A BD 20 DUP (30Dup(?)) - байтовая матрица 20 на 30.

Пример 2

X DW 1234h – слова в памяти храняться в перевёрнутом виде: |__34h__|__12h__|

В регистре приведённый выше пример переварачиваеться.

Директивы эквиваленитности:

EQU: A DW ?

B EQU A

C DW B = С DWA

Оператор указания типов

PTR

Если величина данных заведомо неизвестна, то существует оператор указания типа: mov [si],0  mov [si], byte PTR 0

Если необходимо изменить какое-то значение байта не трогая другое: Z DW 1234h

Если mov z,0 , to то mov byte ptr z,0, получим z=00h, 12 h, а чтобы изменить младший байт: mov byte ptr z11,0

5. Способы адресации: регистровая, непосредственная, прямая, косвенная.

  1. Регистровая адресация – большинство команд процессора вызываются с аргументами, которые в ассемблере называються операндами, операнды могут располагать в любых регистрах общего назначения и сегментных регистрах.

  2. Непосредственная адресация – некоторые коды позволяют указывать один из операторов непосредственно в тексте программы: mov ax, 2

  3. Прямая адресация – если у операнда располагающегося в памяти известен адрес, то его можно использовать. Если операнд слово находиться в сегменте, на который указывает регистр ES со смещением от начала сегмента 0001, то команда: mov ax, es, 0001 поместит это слово в регистр AX. Если в сегменте указанном в регистре ES была описана переменная word_var размером в слово, то можно записать (1), тогда ассемблер сам заменит слово word_var на соответствующий адрес.

  4. Косвенная адресация – по аналогичным с регистровой адресацией операндов так же можно не указывать адрес операндов, хранить в любом регистре ax, [bx] – перемещает в регистр AX слово из ячейки памяти, селектор сегмента которых находиться в DS, а смещение в BX/

  5. Адресация по базе со сдвигом – mov ax, [bx+2] помещает в регистр AX слово, которое есть в сегменте с указанием DS со смещением на 2 больше чем число из BX.

6. Текстовый и графический режимы видеопамяти. Адресное пространство. Вывод символов и пикселей на экран. Примеры.

Адресное пространство – набор адресов, которые может формировать процессор.

В зависимости от модификации компьютера и состава его периферийного оборудования распределение адресного пространства может несколько различаться.

Текстовая память включает 8 видео-страниц и занимает в адресном пространстве 32 кб от сегментного адреса 0BS00h.

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

1. mov ax, 0B800h

mov es, ax

2. mov si, 80*2*12+40*2 ‘ смещение к центру экрана

mov woid ptr es:[si], 3130h ‘ нолик на экран

mov ah, 01h ‘ остановка программы для наблюдения результата

int 21h

1) Непосредственная адресация в сегментный регистр запрещена, операция замещения адреса текстового режима видео-памяти в es осуществляется через промежуточный ax.

2) Для задания смещения воспользуемся базовыми и индексными регистрами.

Каждая строка содержит 80 символов, а символ требует 2 байта.

Запись строки в видео-память.

txt DB ‘Word’

mov ax, 0B800h

mov es, ax

mov di,(80*10+10)*2 ‘ di – смещение в приемнике

mov si,offset txt ‘ si – смещение источника

mov dx,4

m: mov bl,ds:[si]

mov ex:[di],bl

inc di

add si,2

dec dx

jnz m ‘ пока dx не станет равным 0, будет возвращаться на метку.

mov ah,4ch

int 21h

end.

Графический режим

В отличие от DOS, ко всем функциям, к которым мы обращаемся с помощью прерывания int 21h, в BIOS за каждым устройством компьютера закреплено свое прерывание.

int 16h – с клавиатурой

int 10h – обмен с видеоадаптером (работа с графическим изображением)

.model iny

.code

.startup

mov ah,13h ‘ записывает строку в текущую страницу видеобуфера.

int 10h ‘ вызов BIOS

mov ax, DA000h ‘ адрес графического видеорежима

mov es,ax

mov di,0 ‘ линию рисуем с начала экрана

m: mov byte ptr es:[di],3

add di,1

cmp di,320

jnz m ‘ выполняется пока di не станет равным 320

xor ah,ah ‘ обнуление счетчика

int 16h ‘ обмен с клавиатурой

mov ah,03 ‘ текстовый режим

int 10h ‘ вызов BIOS

mov ah,1 ‘ ждет нажатия клавиши

int 21h

mov ah,4ch ‘ стандартная функция завершения DOS

end.

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

0ch – функция вывода пикселя.