Санкт-Петербургский государственный политехнический университет
Факультет технической кибернетики
—————————
Кафедра систем автоматического управления
ОТЧЕТ
по лабораторной работе №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.
Получена программа для суммирования двух многобайтовых чисел, которая использует подпрограммы. В случае, если для результата сложения не хватает заявленного количества байт, то программа добавляет еще один. В ходе выполнения работы я познакомился с методами создания подпрограмм в ассемблере.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.