Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
asm.doc
Скачиваний:
6
Добавлен:
09.11.2019
Размер:
913.41 Кб
Скачать

2. Директива повторення dup.

Директива повторення має вигляд:

Кількість_повторень DUP ( вираз ).

де Кількість_повторень – додатна ціла стала.

Директиву DUP в мові програмування асемблера використовують для побудови масивові та інших структурованих даних. Масив – це впорядкована послідовність однотипних даних, які розташовані в пам’яті. За кількістю розмінностей розрізняють одновимірні масиви, двовимірні масиви і т. д. Розглянемо приклади опису масивів:

mas dw 10 dup(10) ; одновимірний масив (вектор)

vec dd 20 dup(10) ;

matr dw 10 dup( 10 dup(?)) ; двохвимірний масив(матриця)

tenzr dw 5 dup( 5 dup(5 dup(?))) ; тривимірний масив

3. Сталі.

Числові сталі можуть записуватися у десятковому, двійковому, шістнадцядковому та вісімковому форматах та у форматі з плаваючою крапкою.

Десяткові сталі визначаються цифрами від 0 до 9 і позначаються необов’язковою останньою буквою D. Шістнадцяткові сталі визначаються цифрами від 0 до 9 та буквами від А(або а ) до F( або f) і позначаються обов’язковою останньою буквою H або h. Двійкові сталі визначаються цифрами 0 і 1 та позначаються обов’язковою останньою буквою B або b. Вісімкові сталі визначаються цифрами від 0 і 7 та позначаються обов’язковою останньою буквою О,o,Q або q.

Сталі у форматі з плаваючою крапкою визначаються цифрами від 0 до 9, знаками ’+’ , ’-’ та символами ‘.’, ‘E’ , ’e’.

Символьні рядок використовується для визначення текстових даних, які можуть складатися з будь-яких ASCII символів. Символьний рядок визначається апострофами, наприклад ‘Комп’’ютерна графіка ‘, або подвійними лапками, наприклад "Комп’ютерна графіка". Причому, якщо в рядку використовується один із знаків, то рядок повинен визначатися іншим. Символьні рядки визначаються тільки у директиві DB.

Розглянемо приклад визначення змінних

a db 21

b dw ?

c db 21,21d,21o,21h,?,?,101100b

st db ‘ I am string’,’$’

mas db 10dup(?), 15dup( 20, 20dup(1))

v1 dt 1.672

4. Директиви визначення сталих EQU та =.

Директиви EQU і = використовуються для присвоєння значення сталого виразу ідентифікатору, але вони не визначають елемент даних. Визначені ідентифікатори можна використовувати для підстановок в командах асемблера та директивах визначення даних.

Приклад 1. Застосування директив.

D10 equ 10

H10 = 10h

mas db H10 dup ( ?, D10 ), D10 dup( H10)

5. Представлення в пам’яті цілих чисел.

Елемент даних в пам’яті, як правило займає декілька байтів. При програмуванні мовою асемблера, важливо знати, яким чином елементи даних представляється у пам’яті.

Ціле число може займати будь-яке число байтів, але система команд мови асемблера(система машинних команд) підтримує числа розміром у байт, слово, подвійне слово та елемент даних у 8 байт. Цілі числа мають дві форми представлення: цілі числа без знаку та цілі числа зі знаком. Числа зі знаком використовуються для представлення додатних та від’ємних чисел, а беззнакові тільки додатних чисел. У представленні беззнакового числа всі біти інформаційні(рис.1), а представленні знакового старший біт відводиться для знаку(рис. 2). Вважається, що біт 0 – молодший біт. Для зручності вважають, що біт 0 розташований крайнім справа. Старший біт – 7 (15, 31 або 63) – біт, тобто крайній зліва біт, відповідно до елементів даних розміром байт, слово, подвійне слово та 8 байт. Для знакових чисел значення 0 старшого біту (біту знаку) визначає додатне число, а значення 1 визначає від’ємне число.

Інформаційне поле

31

30

29

28

4

3

2

1

0

Старший

Біти

Молодший

Рис.1 Форма представлення 32-бітового беззнакового числа

Знак

Інформаційне поле

31

30

29

28

4

3

2

1

0

Старший

Біти

Молодший

Рис.2 Форма представлення 32-бітового знакового числа

Беззнакові цілі числа записуються в двійкові системі числення, займаючи всі розряди осередку даних. Наприклад, десяткове число 91, яке двійковій системі числення має представлення 1011011 записується: в байт у вигляді рисунок 3 (у шістнадцятковій формі – 5Bh), в слово у вигляді – рисунок 4(у шістнадцятковій формі – 005Bh) та в подвійне слово у вигляді – рисунок 5 (у шістнадцятковій формі – 0000005Bh).

Біти

7

6

5

4

3

2

1

0

Число

0

1

0

1

1

0

1

1

5

В

Рис.3 Форма представлення 8-бітового беззнакового числа 91.

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Число

0

0

0

0

0

0

0

0

0

1

0

1

1

0

1

1

Рис.4 Форма представлення 16-бітового беззнакового числа 91.

Біти

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

Число

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Число

0

0

0

0

0

0

0

0

0

1

0

1

1

0

1

1

Рис.5 Форма представлення 32-бітового беззнакового числа 91.

Знакові цілі числа записуються в двійкові системі числення, займаючи всі розряди осередку даних, крім знакового біту. Додатні знакові представляються, як без знакові у межах інформаційного поля. Від’ємні цілі числа представляються у доповнюючому коді, в якому враховано розмір осередку даних(байт, слово, подвійне слово або 8 байтів). Алгоритм перетворення від’ємного числа наступний:

    1. Беремо модуль від’ємного числа, доповняємо ведучими незначущими двійковими нулями до розміру осередку даних(десяткове число перетворюємо двійкове);

    2. Здійснюємо двійкову порозрядну інверсію(тобто нуль перетворюється в одинцю, а одиниця – нуль);

    3. До отриманого коду добавляємо 1.

Приклад. Десяткове число –91(мінус 91).

  1. Модуль число 91, яке двійковій системі числення має представлення 1011011 записується: в байт у вигляді рисунок 3 (у шістнадцятковій формі – 5Bh), в слово у вигляді – рисунок 4(у шістнадцятковій формі – 005Bh) та в подвійне слово у вигляді – рисунок 5 (у шістнадцятковій формі – 0000005Bh).

  2. Здійснюємо інверсію. Для даних розміром у байта рисунок 7 (у шістнадцятковій формі – А4h), для даних розміром у слово – рисунок 8(у шістнадцятковій формі – FFА4h) та даних розміром у подвійне слово – рисунок 9 (у шістнадцятковій формі – FFFFFFА4h).

Біти

7

6

5

4

3

2

1

0

Число

1

0

1

0

0

1

0

0

Рис.7 Форма представлення 8-бітової інверсії числа 91.

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Число

1

1

1

1

1

1

1

1

1

0

1

0

0

1

0

0

Рис.8 Форма представлення 16-бітової інверсії числа 91.

Біти

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

Число

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Число

1

1

1

1

1

1

1

1

1

0

1

0

0

1

0

0

Рис.9 Форма представлення 32-бітової інверсії числа 91.

  1. Додаємо одиницю, отримаємо представлення від’ємного числа –91 у доповнюючому коді. Для даних розміром у байт рисунок 10 (у шістнадцятковій формі – А5h), для даних розміром у слово – рисунок 11(у шістнадцятковій формі – FFА5h) та даних розміром у подвійне слово – рисунок 12 (у шістнадцятковій формі – FFFFFFА5h).

Біти

7

6

5

4

3

2

1

0

Число

1

0

1

0

0

1

0

1

Рис.10 Форма 8-бітового доповнюючого коду числа -91.

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Число

1

1

1

1

1

1

1

1

1

0

1

0

0

1

0

1

Рис.11 Форма представлення 16-бітового доповнюючого коду числа -91.

Біти

31

30

29

28

27

26

25

24

23

22

21

20

19

18

17

16

Число

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Число

1

1

1

1

1

1

1

1

1

0

1

0

0

1

0

1

Рис.12 Форма представлення 32-бітового доповнюючого коду числа -91.

Таким же чином цілі дані зберігаються у регістрах загального призначення.

Приклад. Число 91 в регістрі АХ.

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

АХ

0

0

0

0

0

0

0

0

0

1

0

1

1

0

1

1

00

5B

AH

AL

Рис.13. Форма представлення числа 91в регістрі АХ.

Приклад. Число -91 в регістрі АХ.

Біти

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

АХ

1

1

1

1

1

1

1

1

1

0

1

0

0

1

0

1

FF

A5

AH

AL

Рис.14. Форма представлення числа –91 в регістрі АХ.

На відміну від представлення в регістрах цілі числа, що займають осередок даних розміром у слово, подвійне слово та 8 байт зберігаються в оперативній пам'яті в "переверненому" вигляді у порядку зростання адрес в оперативні пам’яті. Тобто код числа представляється по–байтово, таким чином, що спочатку йдуть байти з молодшими бітами у порядку зростання. Слово представляється таким чином, що молодші (праві) 8 бітів числа розміщаються в першому байті слова, а старші 8 бітів - у другому байті у порядку зростання адрес в оперативні пам’яті. Наприклад, те ж число 91 (=005Bh) розміром у слово зберігається в пам'яті так:

00

А, число –91 у розміром елемента даних слово зберігається в пам'яті так:

А5

FF

Подвійне слово представляється так - у першому його байті розміщаються молодші 8 бітів числа, у другому байті - попередні 8 бітів і т.д. Наприклад, число 305419896 (=12345678h ) зберігається в пам'яті так:

78

56

34

12

А, число –91 у розміром елемента даних подвійне слово зберігається в пам'яті так:

A5

FF

FF

FF

Іншими словами, у першому слові подвійного слова розміщаються молодші (праві) 16 бітів числа, а в другому слові - старші 16 бітів, причому в кожнім з цих двох слів у свою чергу використовується "перевернене" представлення.

Таке незвичайне представлення чисел пояснюється тим, що в перших моделях даної серії процесорів одноразово можна було зчитати з пам'яті тільки один байт і що всі арифметичні операції над багатозначними числами починаються з дій над молодшими цифрами, тому з пам'яті в першу чергу треба зчитувати молодші цифри.

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