Пример выполнения работы. Написать программу сложения двух десятиразрядных неупако­ванных десятичных чисел

Написать программу сложения двух десятиразрядных неупако­ванных десятичных чисел.

Текст программы:

model SMALL

stack 100h

dataseg

Ask1 db 0Ah,0Dh,'Введите первое слагаемое (не более 10 цифр):$'

Ask2 db 0Ah,0Dh,'Введите второе слагаемое (не более 10 цифр):$'

Buf1 db 11

Len1 db?

Opnd1 db 12 dup(?)

Buf2 db 11

Len2 db?

Opnd2 db 12 dup(?)

ResT db 0Ah,0Dh,'Сумма '

Res db 12 dup(' '),'$'

AskCont db 0Ah,0Dh

db 'Завершить работу - Esc, продолжить - ЛЮБАЯ ÊËÀÂÈØÀ'

db '$'

codeseg

startupcode

push DS

pop ES; ES <- DS

BEGIN:

;Ввод первого слагаемого

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

E2:

;Сложение

mov CX, 10

clc

lea SI, Opnd1+9

lea DI, Opnd2+9

lea BX, Res+10

A1: mov AL, [SI]

adc AL, [DI]

aaa

mov [BX], AL

dec SI

dec DI

dec BX

loop A1

mov AL, 0

adc AL, 0

mov [BX], AL

;Преобразование результата в ASCII

mov CX, 11

A2: or byte ptr [BX], 30h

inc BX

loop A2

;Вывод результата

lea DX, ResT

mov AH, 09h

int 21h

;Запрос на продолжение работы

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. Имеются две группы заданий стандартной (варианты 1–5) и повышенной сложности (варианты 6–8), выберите самостоя­тельно любой вариант из какой–либо группы.

2. Введите два десятичных числа разрядностью не более 10 цифр, выполните преобразование в упакованный BCD-формат, сло­жите их и выведите результат.

3. Введите два десятичных числа разрядностью не более 10 цифр, выполните преобразование в упакованный BCD-формат, вы­чтете второе из первого и выведите результат.

4. Введите два десятичных числа, первое разрядностью не более 10 цифр, второе – из одной цифры выполните преобразование в неупакованный BCD-формат, перемножьте их и выведите ре­зультат.

5. Введите два десятичных числа разрядностью не более 10 цифр, выполните преобразование в неупакованный BCD-формат, вы­чтете второе из первого и выведите результат.

6. Введите два десятичных числа, первое разрядностью не более 10 цифр, второе – из одной цифры выполните преобразование в неупакованный BCD-формат, поделите первое на второе и выведите результат.

7. Напишите программу – калькулятор выполняющую действия + –, внутреннее представление чисел – упакованный BCD-формат.

8. Напишите программу – калькулятор выполняющую действия + – *, внутреннее представление чисел – неупакованный BCD-формат.

9. Напишите программу – калькулятор выполняющую действия + – /, внутреннее представление чисел – неупакованный BCD-формат.

КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Чем отличаются упакованный и неупакованный BCD-форматы представления десятичных чисел?

2. Что такое десятичная коррекция результата арифметической операции?

3. Почему используются различные команды десятичной коррек­ции для различных арифметических операций?

4. Как организовать выполнение операций сложения и вычитания над многоразрядными операндами?

5. Зачем нужны команды десятичной арифметики?

6. Почему коррекция для деления выполняется перед операцией, а для остальных операций – после?


Лабораторная работа

ÏÎÄÏÐÎÃÐÀÌÌÛ


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: