
- •Лабораторна робота №5
- •4. Методичні вказівки для виконання роботи
- •4.1 Проста програма на Асемблері
- •4.4 Теоретичні відомості про команди мови Assembler
- •4.4.1. Команди арифметичниз операцій
- •4.4.2. Команди передачі значень:
- •4.4.3.Команди додавання і віднімання.
- •4.4.4 Команди множення й ділення.
- •4.4.5Команди умовного Перехіду
- •Контрольний приклад
- •4.5 Введення і виведення
- •4.5.1Введення/виведення з використанням модуля io.Asm
- •Ввод числа: inint ор
- •4.5.2 Приклад програми з використанням io.Asm
4.4 Теоретичні відомості про команди мови Assembler
4.4.1. Команди арифметичниз операцій
При організації лінійних процесів на мові Асемблер використовують такі команди, як:
mov – команда передачі значення;
add – команда додавання;
sub – команда віднімання;
mul – команда множення;
div – команда ділення;
xchg – команда обміну значень.
Розглянемо кожну з наведених команд.
4.4.2. Команди передачі значень:
1) команда mov (передача): mov op1, op2.
По команді mov на місце першого операнда передається значення іншого операнда: op1:=op2. Команда не впливає на прапорці регістра FLAGS.
Приклади:
mov AX,500; означає A=500
mov BL,DH; означає BL=DH
По команді mov можна передавати як байт, так і слово.
2) команда xchg (обмін значень): xchg op1,op2
Ця команда обмінює значення своїх операндів (вони мають бути байтами, або словами);
op1 <=> op2. Команда не впливає на прапорці.
Приклади:
mov AX,62; AX=62
mov SI,135; SI=135
xchg AX,SI; AX=135, SI=62
4.4.3.Команди додавання і віднімання.
Команда add (додавання): add op1,op2
Команда sub (віднімання): sub op1,op2
Команда add додає операнди та заносить їхню суму на місце першого операнда: op1:=op1+op2.
По команді sub від першого операнда віднімається другий операнд, здобута різниця заноситися на місце першого операнда:
op1:=op1-op2.
Приклад:
add AH,12; AH:=AH+12
sub SI,z; SI:=SI-z
add z,-300; z:=z+(-300)
Команди add та sub працюють як з числами розміром у байт, так і з числами розміром у слово. Не можна, щоб один з операндів був байтом, а інший - словом.
4.4.4 Команди множення й ділення.
Процесори Intel «вміють» множити і ділити цілі числа, тобто ці операції входять в набір команд, а значить реалізуються символічними командами Асемблера.
1) команда mul (множення): mul op
Операнд op, зазначений у команді - це лише один зі співмножників; він може знаходитись у регістрі чи в пам'яті, але не може бути безпосереднім операндом. Як не дивно, операція множення виглядає як унарна операція. Проте це маленький секрет Асемблера, бо місцезнаходження іншого співмножника зафіксовано, і тому в команді не вказується. При множенні цілих операндів зі знаком, використовується команда imul op.
2) команда div (ділення): div op
Аналогічно команді множення.
Приклад обчислення арифметичного виразу
Нехай треба обчислити вираз f=(7x+12z)/(y-5)
Нижче приведена фрагмент коду на Асемблері, що це завдання вирішує:
………….
mov ax,7
imul x
xchg ax,bx
mov ax,12
imul z
add ax,bx
mov cx,y
mov bx,5
sub cx,bx
idiv cx
mov f,ax
……………
4.4.5Команди умовного Перехіду
Більш чи менш складний алгоритм потребує організовувати обчислення більш складним чином ніж проста послідовність дій. Така організація вимагає наявності команд, що реалізують перехід за тієї чи іншої умови. Такі команди має процесор, і відповідно Асемблер їх відтворює. Всі команди умовного Перехіду можна поділити на три групи. У першу групу входять команди, що ставляться після команди порівняння. У їх мнемокодах за допомогою певних символів описується той чи інший результат порівняння, за яким відбувається перехід. Це такі символи:
E – equal (дорівнює)
N – not (не)
G – greater (більше) - для чисел зі знаком
L – less (менше) - для чисел зі знаком
A – above (вище) - для чисел без знака
B – below (нижче) - для чисел без знака
Далі наведені назви усіх команд умовного Перехіду, що використовуються
після команди порівняння (через слеш вказані назви-синоніми):
Таблиця 4.1
Команди умовного Перехіду, що використовуються після команди порівняння
Мнемокод |
Змістовна умова для Перехіду. після CMP ор1, ор2 |
Стан прапорців для Перехіду
|
для будь-яких чисел |
||
je jne |
op1=op2 op1<>op2 |
zf=1 zf=0 |
для чисел зі знаком |
||
jl/jnge jle/jng jg/jnle jge/jnl
|
op1<op2 op1<=op2 op1>op2 op1>=op2
|
sf<>of sf<>of або zf=1 sf=of і zf=0 sf=of |
для чисел без знаку
|
||
jb/jnae jbe/jna ja/jnbe jae/jnb
|
op1<op2 op1<=op2 op1>op2 op1>=op2
|
cf=1 cf=1 або zf=1 cf=0 і zf=0 cf=0
|
До другої групи команд входять ті, що ставляться після команд, відмінних від команд порівняння, і ті, які реагують на те чи інше значення якого-небудь визначеного прапорця.
Таблиця 4.2
Команди умовного Перехіду, які реагують на те чи інше значення прапорця
Мнемокод |
Умова Перехіду |
Мнемокод |
Умова Перехіду |
jz js jc jo jp |
zf=1 sf=1 cf=1 of=1 pf=1
|
jnz jns jnc jno jnp
|
zf=0 sf=0 cf=0 of=0 pf=0
|