- •Тема 2. Архітектура процесора і мова асемблера: Основи програмування на мові асемблера
- •1.1. Команды пересилки даних загального призначення
- •1.2. Команди вводу-виводу в порт
- •1.3. Команди роботи з адресами і покажчиками пам'яті
- •1.4. Команди перетворення даних
- •2.1. Огляд групи арифметичних команд і даних
- •2.2. Цілі двійкові числа
- •2.3. Десяткові числа
2.1. Огляд групи арифметичних команд і даних
Цілочисельний обчислювальний пристрій підтримує трохи більше десятка арифметичних команд. На рис. 8.1 наведено класифікацію команд цієї групи.
Рис. 8.1 - Класифікація арифметичних команд
Група арифметичних цілочисельних команд працює з двома типами чисел:
• цілими двійковими числами. Числа можуть мати знаковий розряд або не мати такого, тобто бути числами зі знаком чи без знаку;
• цілими десятковими числами.
Розглянемо машинні формати, в яких зберігаються ці типи даних.
2.2. Цілі двійкові числа
Ціле двійкове число з фіксованою точкою - це число, закодоване в двійковій системі числення. Розмірність цілого двійкового числа може складати 8, 16 або 32 біт. Знак двійкового числа визначається тим, як інтерпретується старший біт в поданні числа. Це 7-й, 15-й або 31-й біти для чисел відповідної розмірності. При цьому цікаво те, що серед арифметичних команд є лише дві команди, які дійсно враховують цей старший розряд як знаковий, - це команди цілочисельного множення і ділення imul і idiv. В інших випадках відповідальність за дії зі знаковими числами і, відповідно, зі знаковим розрядом лягає на програміста. Діапазон значень двійкового числа залежить від його розміру і трактування старшого біта або як старшого значущого біта числа, або як біта знака числа (табл. 8.1).
Таблица 8.1 - Діапазон значень двійковх чисел
Розмірність поля |
Ціле без знаку |
Ціле зі знаком |
байт |
0...255 |
–128...+127 |
слово |
0...65 535 |
–32 768...+32 767 |
двійне слово |
0...4 294 967 295 |
–2 147 483 648...+2 147 483 647 |
Як описати числа з фіксованою точкою в програмі? Це робиться з використанням директив опису даних. Наприклад, послідовність описів двійкових чисел з сегменту даних лістингу 3 (пам'ятайте про принцип “молодший байт за молодшою адресою”) виглядатиме в пам'яті так, як показано на рис. 8.2.
Лістинг 3. Числа с фіксованою точкою ;prg_8_3.asm masm model small stack 256 .data ;сегмент даних per_1 db 23 per_2 dw 9856 per_3 dd 9875645 per_4 dw 29857 .code ;сегмент коду main: ;точка входу в програму mov ax,@data ;зв’язуємо регістр dx з сегментом mov ds,ax ;даних через регістр ax exit: ;див. у відлагоджувачу дамп сегменту даних mov ax,4c00h ;стандартний вихід int 21h end main ;кінець програми |
2.3. Десяткові числа
Десяткові числа — спеціальний вид подання числової інформації, в основу якого покладено принцип кодування кожної цифри десяткового числа групою з чотирьох біт. При цьому кожен байт числа містить одну або дві десяткові цифри в так званому двійково-десятковому коді (BCD - Binary-Coded Decimal). Мікропроцесор зберігає BCD-числа у двох форматах (рис. 8.3):
упакованому форматі - в цьому форматі кожен байт містить дві десяткові цифри. Десяткова цифра є двійковим значенням в діапазоні від 0 до 9 розміром 4 біта. При цьому код старшої цифри числа займає старші 4 біта. Отже, діапазон подання десяткового упакованого числа в одному байті становить від 00 до 99;
неупакованому форматі - в цьому форматі кожен байт містить одну десяткову цифру в чотирьох молодших бітах. Старші чотири біта мають нульове значення. Це так звана зона. Отже, діапазон подання десяткового неупакованого числа в одному байті становить від 0 до 9.
Р ис. 8.2 - Дамп пам'яті для сегменту даних лістингу 1
Рис. 8.3 - Представлення BCD-чисел
Лістинг 4. BCD-числа ;prg_8_4.asm masm model small stack 256 .data ;сегмент даних per_1 db 2,3,4,6,8,2 ;неупаковане BCD-число 286432 per_3 dt 9875645 ;упаковане BCD-число 9875645 .code ;сегмент коду main: ;точка входу в програму mov ax,@data ;зв’язуємо регістр dx з сегментом mov ds,ax ;даних через регістр ax exit: ;див. у відлагоджувачу дамп сегменту даних mov ax,4c00h ;стандартний вихід int 21h end main ;кінець програми |
Після настільки докладного обговорення об'єктів, з якими працюють арифметичні операції, можна приступити до розгляду засобів їх обробки на рівні системи команд мікропроцесора.
Рис. 8.4 - Дамп пам'яті для сегменту даних лістингу 4