Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Представление чисел в ассемблере

Система команд ассемблера.

Режимы адресации ассемблера.

 

Режим адресации: косвенная регистровая.

Исполнительный адрес операнда (точнее, смещение относительно начала сегмента данных (data)) содержится в одном из регистров BX, BP, SI и DI. Для указания косвенной адресации этот регистр должен заключаться в квадратные скобки. Например, перешлём в регистр AX содержимое 16-разрядного слова, хранящегося в памяти DS: BX:

 

mov AX, [BX]

 

Если мы хотим сделать это принудительно, то пишем так:

 

mov AX, ES {BX]

 

Описываем пример:

var

x: Word;

b: Byte;

...

asm

mov ax, X

add ah, B

mov X, ax

 

Замечание:

регистр написания идентификаторов регистров значения не имеет.

 

 

Режим адресации: прямая.

Смещение операнда задаётся в теле программы и помещается в регистр DS.

 

 

Режим адресации: по базе (или базовая адресация).

Базовый регистр BX (или BP) содержит базу (адрес начала некоторого фрагмента памяти) относительно которой ассемблер вычисляет смещение. Пример:

 

mov ax, [bx] + 10

 

Где “+10” означает, что мы отодвинулись на 10 ячеек после регистра BX.

 

 

Режим адресации: индексная.

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

 

mov SI, 15

mov ah, AOB [SI]

mov SI, 0

mov AOB [SI] ah

 

В этом примере байтовый массив AOB описан ранее. В индексный регистр SI мы переслали число 15. В регистр ah мы переслали то, что хранится в массиве AOB по адресу si (т.е. по адресу 15). Затем мы в регистр SI переслали 0. И наконец в ячейку [SI] (15-ю по счёту) массива AOB мы поместили значение регистра ah, т.е. 0. Другими словами, мы просто заменили значение в 15-ой ячейке массива AOB на ноль.

 

 

Режим адресации: по базе (базовая регистровая).

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

 

Пример:

опишем байтовый массив АОВ. Перешлём в регистр bx значение 20, перешлём в регистр si значение 2 и перешлём в регистр ax значение, которое размещается в элементе массива АОВ под номером [bx][si].

 

var

AOB: array [0 … 9; 0 … 9]

mov bx, 20

mov si, 2

mov ax, AOB[bx][si]

 

Пояснение: в регистр bx мы пересылаем не 2, а 20 т.к. в памяти элементы массива хранится последовательно.

 

 

 

В памяти числа представляются в перевёрнутом виде, а в регистрах – в прямом виде. Например, слово (W) и двойное слово (DW) ассемблер представляет в следующем виде:

 

A = 98 = 001100010 = ‘62h

 

В ячейках регистра это будет выглядеть вот так:

 

А А+1
   


Директивы ассемблера (идентификаторы для объявления):

§ DB – define byte

§ DW – define word

§ DD – define double word

 

Общий вид операции определения:

[имя] DB [операнд]

 

Здесь может быть несколько вариантов:

xdb? – если операнд не определён;

xdb254;

xdb-2;

xdbOPEh;

и т.д.

 

Пример:

M db 2,-2,?,”*”

В ячейках будет определено:

2 | -2 | неизвестно что | * (символ звёздочка)

 

Ещё пример:

R DB 5(dup(0))

В ячейках будет:

0 | 0 | 0 | 0 | 0

 

Ещё пример:

y DB -7,3(dup(0,2(dup(?)))

В ячейках будет:

-7 | 0 |? |? | 0 |? |? | 0 |? |?

(семёрка, а затем трижды по 0??)

Задача:

Написать матрицу 20*30 неизвестно чего.

Пишем так:

A DB 20(sup(30(dup?)));

 

Ещё пример:

опишем две переменные как слова, занесём в первую из них символьное значение 01, а во вторую – единичку.

S1 DW ‘01’ (‘01’ кодируется как 30h, 31h)

S2 DW ‘1’ (‘1’ кодируется как 31h)

В ячейках получится:

31 | 30 | 31 | 00

 

Ещё пример:

если нам нужно определить Х как двойное слово с содержимым 12345678h, то вот как всё будет обстоять:

X DD 12345678h

Получим:

78 | 56 | 94 | 12

 

Задача:

описать две переменные – х и у как 4 и 3. Затем описать третью переменную, которая будет равна х+у. Пишем:

x DB 4

y DB 3

z DB?

mov ax, x (отправили в регистр ax значение 4)

add ax, y (прибавим к содержимому регистра ax значение 3)

mov z, ax (помещаем в регистр z содержимое регистра ax)

 

На этом с примерами всё.

 

Команды перемещения:

o mov <приёмник>, <источник> – перенести значение приёмник из источника

o push <источник> – записать в стек

o pop <приёмник> – извлечь значение из стека

o xcgh <источник>, <приёмник> – поменять значения источника и приёмника

o xlat <таблица> – загрузить в AL байт из таблицы

o in <аккумулятор>, <порт> – считать из порта в аккумулятор

o out <порт>, <аккумулятор> – вывести в порт из аккумулятора

 

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

o lea <регистр>, <память 16> – загрузить исполнительный адрес

o lds <регистр 16>, <память 32> – загрузить полный адрес

 

Ограничения команды mov:

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

mov ax, x

mov x, ax

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

mov AX, DS

mov DS, AX

3. В регистр CS пересылать ничего нельзя, т.к. он автоматически заполняется при выполнении некоторых команд.

 

 

06.10.2011 Практика по ассемблеру

 

<== предыдущая лекция | следующая лекция ==>
Урок 105. | Периферийные шины
Поделиться с друзьями:


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


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



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




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