Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
64
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать
  1. Определение простых типов данных:

Формат директивы определения типа данных:

[имя] Dx выражение

х – определяет тип данных

[имя] – не обязательно

В качестве директив используются:

db (1байт)

dw (2 байта)

dd (4 байта)

dq (5 байт)

df (6 байт)

dt (10 байт)

Примеры:

db ?

db ‘PERSONAL’

db 32

db 20h

db 0010000B

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

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

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

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

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

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

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

mes DB ‘ЖДИТЕ’

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

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

  1. Способы адресации Регистровая адресация

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

Примеры:

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

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

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

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

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

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

Примеры:

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

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

.

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

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

.data

b1 db 1

w1 dw 0

dw1 dd 3

ab db 1,2,3

aw2 dw 10, 20

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

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

mov dw1, ecx

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

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

mov w1, 23h

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

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

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. Особенности пересылки данных

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

mov al, mas

mov mas1, al

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

mov ax, 0000h

mov ds, ax

push ax

pop ds

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

push cs

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

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

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

inc word ptr [bx]

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]