Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Архив1 / docx55 / lab6asm

.docx
Скачиваний:
19
Добавлен:
01.08.2013
Размер:
128.14 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования Южный Федеральный Университет

Факультет автоматики и вычислительной техники

Кафедра Математического обеспечения и применения ЭВМ

   

      



ОТЧЕТ

по лабораторной работе № 6

по курсу «Машинно-ориентированное программирование »

Выполнили:

Студенты группы А-80

Епанешников Валерий Овчинников Денис

Проверил

Доцент каф. МОП ЭВМ

Скороход С.В.

Оценка

______________________

«____» __________ 2019 г.

Вариант задания

Введите два десятичных числа разрядностью не более 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-фор­матами, освоили команды десятичной коррекции.

Соседние файлы в папке docx55