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

Страницы работы

6 страниц (Word-файл)

Содержание работы

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

—————————

Кафедра систем автоматического управления

ОТЧЕТ

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

«Сложение многобайтных чисел с использованием подпрограмм»

по курсу «ВМ, системы и сети»

Студент:

гр. 3083/2

Преподаватель:

Санкт-Петербург — 2010 г.

задание

Написать программу, которая складывает два многобайтных числа. Каждое из чисел может быть  длиной до 256 байт. Программа должна использовать следующие подпрограммы:

1.  Сложение однобайтных чисел.

2.  Сложение многобайтных чисел.

описание

В ячейке памяти 1100Н записана длина слагаемых. Первое слагаемое записано в ячейках, начиная с 2000Н. Второе – с 2100 Н. Так как максимальная длина каждого из слагаемых чисел не превышает 256 байт, то выделенной памяти под слагаемые хватит. Результат сложения будет записан по адресу 2200Н.

Для сложения однобайтных чисел будем использовать подпрограмму SUM, которая складывает два байта с учётом бита переноса (функция ADC).

Подпрограмма SUPSUM предназначена для сложения многобайтных чисел. В качестве входного параметра будет использоваться регистр А, в котором хранится длина слагаемых. Регистровые пары BC, HL и DE используем для хранения адресов слагаемых и результата. При сложении подпрограмма будет вызывать подпрограмму SUM и после её выполнения записывать результат в память.

Главная программа вызывает подпрограмму SUPSUM, посылая длину слагаемых.

блок-схемЫ

Подпрограмма сложения однобайтных чисел

Подпрограмма сложения многобайтных чисел

Главная программа

распределение памяти

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

ORG 1000H

;MAIN

LDA 2000H;ЗАГРУЗКА КОЛИЧЕСТВА БАЙТ В АККУМУЛЯТОР

MVI B,21H;1

MVI H,22H;2

MVI D,23H;SUM

CALL SUPSUM

HLT

;P/P СУММИРОВАНИЕ ДВУХ БАЙТ

SUM:

ADC M;СКЛАДЫВАЕМ ДВА БАЙТА С УЧЁТОМ БИТА ПЕРЕНОСА

RET;КОНЕЦ ПРОЦЕДУРЫ

;СЛОЖЕНИЕ МНОГОБАЙТНЫХ ЧИСЕЛ

SUPSUM:

PUSH BC;В СТЕК

PUSH DE;В СТЕКв

PUSH HL;В СТЕК

STC

CMC

MVI C,0H;C-СЧЁТЧИК

INR A

M_1:

ANA A

JZ M_2;A=0 -- КОНЕЦ

STA 2000H

LDAX BC;ПЕРВЫЙ В АККУМУЛЯТОРЕ

MOV L,C;ВТОРОЙ В РЕГИСТРОВОЙ ПАРЕ HL

MOV E,C;РЕЗУЛЬТАТ B DE

CALL SUM

STAX DE; ИЗ АККУМУЛЯТОРА ЗАПИСАЛИ РЕЗУЛЬТАТ

INR C

LDA 2000H

JMP M_1

M_2:

POP HL

POP DE

POP BC;ИЗСТЕКА

RET

машинный код

3A0020

0621

2622

1623

CD0F10

76

8E

C9

C5

D5

E5

37

3F

0E00

3C

A7

CA2C10

320020

0A

69

59

CD0D10

12

0C

3A0020

C31710

E1

D1

C1

C9

результаты

В ходе работы, программа складывала два пятибайтных числа FFFFFFFFFFh и 0000000001h, в результате было получено шестибайтное число 010000000000h.

выводы

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

Похожие материалы

Информация о работе