Автор: Пользователь скрыл имя, 29 Декабря 2010 в 01:44, курсовая работа
Мета роботи: навчитися складати програму на мові асемблеру, яка використовує арифметичні та логічні операції.
Завдання:
Скласти програму моделювання операції додавання, віднімання і множення чисел з фіксованою крапкою з заданою кількістю розрядів.
Введення операндів виконувати з клавіатури.
Результати виводити на екран.
Вступ 3
1.ЗАГАЛЬНІ ВІДОМОСТІ 4
1.1.Формати числових даних 4
1.2. Виконання арифметичних операцій 5
2. Блок-схема програми 9
2.1.Головна програма 9
2.2. Блок-схеми підпрограм 10
3. Опис роботи програми 14
3.1. Опис роботи головної програм 14
3.2. Опис виконання арифметичних операцій 14
4. Лістинг програми 16
5. Результати виконання програми 26
Висновки 28
Використані джерела 29
add al,bh ;учет переноса из младших цифр
aaa ;коррекция сложения
mov manc[si+1],al
;запись правой цифры в
mov bh,ah ;запомнить перенос
dec si ;уменьшаем si
loop met ;cx=cx-1 if cx=0 then
mov manc,bh ;старшая цифра произведения
;суммирование
mov cx,11 ;кол-во итераций
mov si,10 ;начинаем суммирование с младших разрядов
mov di,si ;формируем
add di,11 ;адрес
sub di,lop ;[si+11-lop]
clc
smm:
mov al,manc[si] ;в al цифру из промежуточного результата умножения
mov dl,manmnog[di] ;в dl цифру из конечного результата
adc al,dl ;суммируем с учетом переноса
aaa ;коррекция
mov manmnog[di],al ;заносим в резльтат
dec si ;уменьшаем si
dec di ;уменьшаем di
loop smm ;cx=cx-1 if cx=0 then
xor di,di ;формируем
mov di,11 ;адрес
sub di,lop ;[11-lop]
cmp di,0 ;сравнение
jne a1 ;
adc manmnog[di],0 ;суммируем с учетом переноса
a1:
inc lop ;увеличиваем lop
cmp lop,10 ;сравнение
je final ;на окнчание
jmp mett ;
Final:
dec_asc a,10 ;приводим a к выводу
dec_asc b,10 ;приводим b к выводу
dec_asc manmnog,20 ;приводим результат к выводу
ENDM mnog
start:
;основная программа
mov ax,dseg
mov ds,ax
Cls 0000,184Fh
Set_Kur 01,00
Scr_Out titl
set_kur 24,30
scr_out mes_st
pause
cls 0000,184Fh
starter:
cls 0000,184Fh
mov lop,1
Op_In znA,manA ;ввод первого числа
Cls 0000,184Fh
mov lop,2
Op_In znB,manB ;ввод второго числа
Cls 0000,184Fh
Set_Kur 01,25
Scr_Out mes5
Set_Kur 03,15
Scr_Out mes6
Set_Kur 04,15
Scr_Out mes7
Set_Kur 03,19
Op_Out znA,manA,10,5
Set_Kur 04,19
Op_Out znB,manB,10,5
Set_Kur 06,32
Scr_Out mes8
Set_Kur 08,15
Scr_Out mes9
Set_Kur 09,15
Scr_Out mes10
Set_Kur 10,15
Scr_Out mes11
Set_Kur 12,25
Scr_Out mes12
;сравнение чисел
mov cx,10
mov di,0
comp:
mov al,manA[di]
mov bl,manB[di]
cmp al,bl
je nxt
ja AmoreB
jmp AlessB
nxt:
inc di
loop comp
jmp AequalB
mov cx,10
mov di,0
AmoreB:
mov al,znA
mov bl,znB
cmp al,bl
je @5 ;znA = znB
jmp @6
@5:
jmp znequal
@6:
mov al,zna
mov znC,al
mov znmnog,'-'
raznost mana,manb,manc
Set_Kur 08,21
Op_Out znc,manc,11,6
Summa mana,manb,manc
Set_Kur 09,21
Op_Out znc,manc,11,6
jmp fin
znequal:
mov al,zna
mov znc,al
mov znmnog,'+'
summa mana,manb,manc
Set_Kur 08,21
Op_Out znc,manc,11,6
Raznost mana,manb,manc
Set_Kur 09,21
Op_Out znc,manc,11,6
jmp fin
AlessB:
mov al,znA
mov bl,znB
cmp al,bl
jne @3 ;znB <> znA
jmp @4
@3:
jmp notequal
@4:
mov al,znb
mov znc,al
summa mana,manb,manc
Set_Kur 08,21
Op_Out znc,manc,11,6
mov al,znB
cmp al,'+'
jne label1
mov znC,'-'
jmp label2
label1:
mov znC,'+'
label2:
raznost manb,mana,manc
Set_Kur 09,21
Op_Out znc,manc,11,6
mov znmnog,'+'
jmp fin
notequal:
mov al,znB
mov znC,al
raznost manb,mana,manc
Set_Kur 08,21
Op_Out znc,manc,11,6
mov al,zna
mov znc,al
summa mana,manb,manc
Set_Kur 09,21
Op_Out znc,manc,11,6
mov znmnog,'-'
jmp fin
AequalB:
mov al,zna
mov bl,znb
cmp al,bl
jne @1
jmp @2
@1:
jmp notequal2
@2:
mov al,zna
mov znc,al
summa mana,manb,manc
Set_Kur 08,21
Op_Out znc,manc,11,6
mov znc,'+'
nul manc,11
Set_Kur 09,21
Op_Out znc,manc,11,6
mov znmnog,'+'
jmp fin
notequal2:
mov znc,'+'
nul manc,11
Set_Kur 08,21
Op_Out znc,manc,11,6
mov al,zna
mov znc,al
summa mana,manb,manc
Set_Kur 09,21
Op_Out znc,manc,11,6
mov znmnog,'-'
jmp fin
fin:
mnog mana,manb
set_kur 10,21
op_out znmnog,manmnog,20,10
nxt4:
Set_Kur 25,00
Pause
cmp al,79h ;продолжение работы (y) ?
jne nxt6
jmp Starter
nxt6:
cmp al,6eh ;окончание работы (n) ?
jne nxt4
Set_Kur 23,20
Scr_Out mes2
Set_Kur 25,00
Pause
End_Task
CODSEG ENDS
END Start
Рисунок
1.Перший екран програми.
Рисунок 2.Третій екран програми. Введення значень цілої та дробової частини числа
Рисунок 3.Четвертій
екран програми. Введення та результат
обчислення
Висновки
При виконанні даної курсової роботи я навчився створювати програму на мові асемблеру для виконання арифметичних операцій над дробовими числами з фіксованою крапкою.
Недоліком даної програми є: