МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования Южный Федеральный Университет
Факультет автоматики и вычислительной техники
Кафедра Математического обеспечения и применения ЭВМ
|
|
ОТЧЕТ
по лабораторной работе № 6
по курсу «Машинно-ориентированное программирование »
Выполнили:
Студенты группы
А-80
Епанешников
Валерий
Овчинников Денис
Проверил
Доцент каф. МОП
ЭВМ
Скороход С.В.
Оценка
______________________
«____» __________
Вариант задания
Введите два десятичных числа разрядностью не более 10 цифр, выполните преобразование в неупакованный BCD-формат, вычтете второе из первого и выведите результат.
Листинг программы
model SMALL
stack 100h
dataseg
Ask1 db 0Ah,0Dh,'Enter the first number:$'
Ask2 db 0Ah,0Dh,'Enter the second number:$'
Buf1 db 11
Len1 db ?
Opnd1 db 12 dup( ? )
Buf2 db 11
Len2 db ?
Opnd2 db 12 dup( ? )
ResT db 0Ah,0Dh,'Difference '
Res db 12 dup(' '),'$'
AskCont db 0Ah,0Dh
db 'Exit - Esc, Continue - Any key'
db '$'
ResT2 db 0Ah,0Dh,'Difference -'
N db ?
Ent db 0Ah, 0Dh, '$'
Min db '-$'
codeseg
startupcode
push DS
pop ES ; ES <- DS
BEGIN:
; Очистка экрана
MOV AX,0600H ;AH 06 (прокрутка)
;AL 00 (весь экран)
MOV BH,07 ;Нормальный атрибут (черно/белый)
MOV CX,0000 ;Верхняя левая позиция
MOV DX,184FH ;Нижняя правая позиция
INT 10H ;Передача управления в BIOS
mov N, 0
;Ввод первого числа
B1: lea DX, Ask1
mov AH, 09h
int 21h
lea DX, Buf1
mov AH, 0Ah
int 21h
cmp Len1, 0
je B1
;проверка 0-9 и очистка старш.тетрады
lea BX, Opnd1
xor CX, CX
mov CL, Len1
xor SI, SI
T1: mov AL, [BX][SI]
cmp AL, '0'
jb B1 ; ошибка
cmp AL, '9'
ja B1 ; ошибка
and AL, 0Fh
mov [BX][SI], AL
inc SI
loop T1
;прижать к правому краю
mov CL, Len1
cmp CL, 10
je E1
mov DI, 9
mov SI, CX
dec SI
P1: mov AL, [BX][SI]
mov [BX][DI], AL
dec DI
dec SI
loop P1
;обнулить лишнее
xor DI, DI
mov CL, 10
sub CL, Len1
N1: mov byte ptr [BX][DI], 0
inc DI
loop N1
E1:
;Ввод второго числа
B2: lea DX, Ask2
mov AH, 09h
int 21h
lea DX, Buf2
mov AH, 0Ah
int 21h
cmp Len2, 0
je B2
;проверка 0-9 и очистка старш.тетрады
lea BX, Opnd2
xor CX, CX
mov CL, Len2
xor SI, SI
T2: mov AL, [BX][SI]
cmp AL, '0'
jb B2 ; ошибка
cmp AL, '9'
ja B2 ; ошибка
and AL, 0Fh
mov [BX][SI], AL
inc SI
loop T2
;прижать к правому краю
mov CL, Len2
cmp CL, 10
je E2
mov DI, 9
mov SI, CX
dec SI
P2: mov AL, [BX][SI]
mov [BX][DI], AL
dec DI
dec SI
loop P2
;обнулить лишнее
xor DI, DI
mov CL, 10
sub CL, Len2
N2: mov byte ptr [BX][DI], 0
inc DI
loop N2
;Сравнение длин
C1:
mov AL, Len1
mov AH, Len2
cmp AL, AH
jg E2
cmp AL, AH
jne C2 ;если не равны, переходим на С2
lea SI, Opnd1
lea DI, Opnd2
mov CL, 10
C3:
mov AL, [SI]
cmp AL, [DI]
jl C2
inc SI
inc DI
loop C3
jmp E2
C2:
mov N, 1
mov CL, Len2
lea SI, Opnd1+9
lea DI, Opnd2+9
C22:
mov AL, [SI]
mov BL, [DI]
mov [SI], BL
mov [DI], AL
dec SI
dec DI
loop C22
E2:
; mov AL, Len2
; mov AH, Len1
; cmp AH, AL
; jg G
; mov L, AL
;G:
; mov L, AH
;Вычитание
mov CL, 10
clc
lea SI, Opnd1+9
lea DI, Opnd2+9
lea BX, Res+10
A1: mov AL, [SI]
;mov AH, CL
;neg AH
;add AH, 10
;cmp L, AH
;jl A12
sbb AL, [DI]
aas
;A12:
mov [BX], AL
dec SI
dec DI
dec BX
loop A1
mov AL, 0
sbb AL, 0
mov [BX], AL
;Преобразование результата в ASCII
mov CX, 11
A2: or byte ptr [BX], 30h
inc BX
loop A2
;Вывод результата
lea DX, Ent
mov AH, 09h
int 21h
cmp N, 1
jne A22
lea DX, Min
mov AH, 09h
int 21h
A22:
lea DX, Res
mov AH, 09h
int 21h
A23:
;Запрос на продолжение работы
lea DX, AskCont
mov AH, 09h
int 21h
mov AH, 08h
int 21h
cmp AL, 27 ;ESC
je QUIT
jmp BEGIN
;Конец работы
QUIT: exitcode 0
end
Ход выполнения работы
Пример 1
Входные данные: первое число 123, второе число 45
Выходные данные: 00000000078
Пример 2
Входные данные: первое число 123845209, второе число 457824
Выходные данные: 00123387385
Вывод
При выполнении данной лабораторной работы мы познакомились с форматами представления десятичных чисел, упакованным и неупакованным BCD-форматами, освоили команды десятичной коррекции.