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

Контрольний приклад

Нехай треба обчислити

F= (4xx-3)/5y, якщо x>5 або y=5, додаткова умова - z<>0

F=(y-3)/z+2, або якщо z<>0 та x<=5

F= y*y-3, в інших випадках

………….

cmp y,5

je m1

cmp x,5

jg m1

cmp z,0

jne m2

mov ax,y

imul y

sub ax,3

jmp stop

m1: mov ax,4

imul x

imul x

sub ax,3

mov bx,5

xchg ax,bx

imul y

xchg ax,bx

idiv bx

jmp stop

m2: mov ax,y

sub ax,3

idiv z

add ax,2

stop:

mov f,ax

……………….

4.5 Введення і виведення

Будь яка програма потребує засобів вводу і виводу. Команди Асемблера можуть це зробити єдиним способом – реалізувати переривання операційної системи або BIOS. В прикладі Розділу 4.1 було показано як виводити, наприклад, рядок. Проте ввведення і виведення чисел для програми Асемблера являє собою певну проблему. Причина в тому, що процесор не працює з числом чи символом –він працює з кодом числа або символа.

Команди Асемблера можуть використовувати як символьні константи так числові константи.

Найлегше користуватися десятковими значеннями (тобто з основою 10), оскільки ми звикли до них в повсякденному житті. Ясно, найпростіше ввести: mov cx, 100 ; встановити лічильник в значення 100 Насправді, Турбо Асемблер рахує значення десятковими, якщо ви не вказали зворотне. Проте, десяткові значення у багатьох випадках не зовсім підходять для програмування на мові Асемблера, оскільки комп'ютери є двійковими пристроями . Тоді логічно використовувати в програмах на Асемблері двійкове представлення. Ви можете вказати Турбо Асемблеру, що число виражене в двійковому виді, якщо просто помістите у кінці числа букву b (звичайно, при цьому число повинне складатися тільки з 0 і 1, оскільки це єдині дві цифри, допустимі в двійковому представленні). Наприклад, десяткове значення 5 двійковому виді, буде 101b. Наприклад, перепишемо інструкцію з операндами в двійковому представленні

mov cx, 1100100b ; встановити лічильник ; значення 100 Шістнадцяткові числа позначаються суфіксом h. Крім того, шістнадцяткові числа повинні починатися з однією з цифр 0-9, оскільки шістнадцяткове число типу BAD4h може помилково інтерпретуватися, як мітка. Наведемо приклад, до якому використовується як число 0BAD4h, так і мітка BAD4h : . . . .DATA BAD4h DW 0 ; мітка BAD4h . . . .CODE mov ax, 0BAD4h ; завантажити в AX ; шістнадцяткову константу (перший 0 показує, що це константа ) . . . mov ax, BAD4h ; завантажити в AX із змінної в пам'яті ; BAD4h (відсутність 0 в першому символі показує, що це мітка

Щоб показати, що число є десятковим, в ролі суфікса можна використовувати букву d. Навіщо ж потрібний цей суфікс, якщо за умовчанням Турбо Асемблер і так припускає, що усі числа є десятковими? Як ви можете здогадатися, відповідь полягає в тому, що числа окрім десяткового можуть мати і інші представлення. Двійкові значення розміром в слово і подвійне слово ще важче читати і використовувати.

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

Директиви визначення даних DS, DW, DD, DF, DP, DQ і DT дозволяють вам визначити змінні в пам'яті різного типу:

DВ 1 байт

DW 2 байта = 1 слово

DD 4 байта = 1 подвійне слово

DF, DP 6 байт = 1 вказівник дальнього типу (386)

DQ 8 байт = одно четвірне слово

DT 10 байт

Наприклад:

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

.DATA

ByteVar DB 'Z' ; 1 байт

WordVar DW 101b ; 2 байта (1 слово)

DwordVar DD 2BFh ; 4 байта (1 подвійне слово)

QWordVar DQ 307o ; 8 байт (1 четвірне слово)

TWordVar DT 100 ; 10 байт

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

Далі глянемо ще фрагмети коду

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

mov ah,2 ; функція DOS виводу на дисплей

mov dl,[ByteVar] ; символ, який потрібно вивести на экран

int 21h

.,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

add ax,[WordVar]

.

.

.

add WORD PTR [DwordVar],ax

adc WORD PTR [DwordVar+2],dx

.

.

.

Тут визначено, надано значення і використано п’ять змінних в пам’яті і далі у фрагментах коду показано, як деякі з них можна використати. Зокрема показано як на дисплей виводиться символ. Це досить просто. Набагато складніше ввести і вивести число. Власне вивести і вивести число від 0 до 9 можна, а всі інші так просто ні. Відтак доведеться використовувати допоміжні засоби. Таким засобом є модуль ІО.ASM. Цей модуль приведено в книзі В.Н.ПИЛЬЩИКОВА «Ассемблер».

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