Задача сложения двухбайтных чисел
Блок схема алгоритма решения задачи. Описание программы на языке Ассемблера и в машинных кодах. Сложение 5 двухбайтных чисел, находящихся в адресном пространстве 0800h-0809h, с учетом знака и переноса из старшего бита суммы. Адресное пространство задачи.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 15.09.2017 |
Размер файла | 158,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки Российской Федерации
ФГБОУ ВПО «Магнитогорский государственный технический университет» им. Г. И. Носова
Кафедра Электроники и микроэлектроники
Курсовая работа
по дисциплине «Машинные языки программирования»
Выполнил: студент группы АП-10-1
Аркузин И.В.
Проверил: д.т.н., профессор кафедры ЭиМЭ
Лукьянов С.И.
Магнитогорск, 2013 г.
Оглавление
- 1. Задание
- 2. Выполнение работы
- 2.1 Анализ поставленной задачи
- 2.2 Блок схема алгоритма решения задачи
- 2.3 Описание программы на языке Ассемблера и в машинных кодах
- Вывод
- Библиографический список
1. Задание
Сложить 5 двухбайтных чисел, находящихся в адресном пространстве 0800h-0809h, с учетом знака и переноса из старшего бита суммы. Ответ разместить в ячейках 080Ah - 090Ch. Лишние биты суммы заполнить нулями. Формат чисел:
Младший байт
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Модуль числа |
З |
Старший байт
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
Модуль числа |
З - знак числа.
двухбайтный число программа ассемблер
2. Выполнение работы
2.1 Анализ поставленной задачи
Регистровая пара BC будет содержать адрес текущей ячейки массива чисел, то есть байта. При сложении чисел, будут складываться содержимое регистровых пар HL и DE, HL - будет содержать промежуточный результат сложения, а DE - следующее число. Поэтому перед началом основной программы, регистровую пару HL нужно обнулить.
После загрузки старшего байта в регистр D, сразу же будем проверять число на знак, для этого в аккумулятор загрузим содержимое ячейки памяти с адресом Addr3 (где первоначально будут содержаться нули), если число будет отрицательное. Прибавим к содержимому аккумулятора FFh, перезапишем содержимое аккумулятора в ту же ячейку памяти Addr3. После сложения чисел, будем проверять перенос из старшего бита. Для этого, если будет перенос, в аккумулятор загрузим содержимое ячейки памяти Addr2, где тоже первоначально будут нули, проинкрементируем содержимое аккумулятора, сохраним в ту же ячейку памяти Addr2. Чтобы выйти из цикла сложения, нам понадобится счетчик чисел, для этого в начале программы загрузим в ячейку памяти Addr1 число 5. После проверки на перенос, будем загружать содержимое этой ячейки в аккумулятор, декрементировать содержимое аккумулятора, и если бит ноля Z будет равен единице, выходить из цикла и сохранять результат в ячейки памяти 0900h и 0901h. И складывать содержимое ячеек Addr2 и Addr3. Это и будет наш третий байт.
2.2 Блок схема алгоритма решения задачи
M(Addr1) - ячейка памяти 0810h, M(Addr2) - ячейка памяти 0811h, M(Addr3) - ячейка памяти 0812h, M(Addr4) - ячейка памяти 0900h, M(Addr5) - ячейка памяти 0901h. Программа будет храниться в адресном пространстве, начиная с ячейки 0813h.
двухбайтный число программа ассемблер
2.3 Описание программы на языке Ассемблера и в машинных кодах
Описание программы представлено в таблице 1:
Метка |
Адрес |
Данные |
Ассемблер |
Мнемоника |
Комментарий |
|
M1M2 |
0813 |
21 |
LXI H, 0810 |
(HL)0810 |
Загрузить в регистровую пару HL адрес ячейки памяти 0810 |
|
0814 |
10 |
|||||
0815 |
08 |
|||||
0816 |
36 |
MVI M, 05 |
M(HL)05 |
Записать количество слагаемых в ячейку памяти, адрес которой хранится в регистровой паре HL |
||
0817 |
05 |
|||||
0818 |
23 |
INX H |
(HL)HL+1 |
Инкрементирование регистровой пары HL |
||
0819 |
36 |
MVI M, 00 |
M(HL)00 |
Обнулить ячейку памяти |
||
081A |
00 |
|||||
081B |
23 |
INX H |
(HL)HL+1 |
Инкрементирование регистровой пары HL |
||
081C |
36 |
MVI M, 00 |
M(HL)00 |
Обнулить ячейку памяти |
||
081D |
00 |
|||||
081E |
21 |
LXI H, 0000 |
(HL)0000 |
Обнулить промежуточную сумму в регистровой паре HL |
||
081F |
00 |
|||||
0820 |
00 |
|||||
0821 |
01 |
LXI B, 0800 |
(BC)0800 |
Загрузить в регистровую пару BC начальный адрес массива данных |
||
0822 |
00 |
|||||
0823 |
08 |
|||||
0824 |
0A |
LDAX B |
(A) |
Загрузить в аккумулятор младший байт, адрес которого хранится в регистровой паре BC |
||
0825 |
0F |
RRC |
Сдвиг аккумулятора вправо без переноса |
|||
0826 |
E6 |
ANI 80 |
(A)(A)^10000000 |
Операция логическое И аккумулятора с данными 80h |
||
0827 |
80 |
|||||
0828 |
5F |
MOV E, A |
(E)(A) |
Переслать маску из регистра А в регистр E |
||
0829 |
37 |
STC |
C=1 |
Установить бит переноса в значение 1 |
||
082A |
3F |
CMC |
C= |
Инвертировать значение бита переноса |
||
082B |
03 |
INX B |
(BC)BC+1 |
Инкрементирование регистровой пары BC |
||
082C |
0A |
LDAX B |
(A) |
Загрузить в аккумулятор старший байт, адрес которого хранится в регистровой паре BC |
||
082D |
1F |
RAR |
Cдвиг аккумулятора вправо с переносом |
|||
082E |
B3 |
ORA E |
(A)(A)?(E) |
Операция логическое ИЛИ аккумулятора и регистра E |
||
082F |
57 |
MOV D, A |
(D)(A) |
Переслать старший байт из регистра А в регистр D |
||
0830 |
C6 |
ADI 00 |
(A)(A)+00 |
Прибавить к содержимому аккумулятора 00h |
||
0831 |
00 |
|||||
0832 |
F2 |
JP M2 |
JMP if S=0 |
Переход на метку M2, если бит знака S равен нулю |
||
0833 |
3D |
|||||
0834 |
08 |
|||||
0835 |
3A |
LDA 0812 |
(A) |
Загрузить в аккумулятор содержимое ячейки памяти 0812 |
||
0836 |
12 |
|||||
0837 |
08 |
|||||
0838 |
C6 |
ADI FF |
(A)(A)+FF |
Прибавить к содержимому аккумулятора FFh |
||
0839 |
FF |
|||||
083A |
32 |
STA 0812 |
M(0812)(A) |
Записать содержимое аккумулятора в ячейку памяти 0812 |
||
083B |
12 |
|||||
083C |
08 |
|||||
083D |
0B |
DCX B |
(BC)(BC)-1 |
Декрементирование регистровой пары BC |
||
083E |
0A |
LDAX B |
(A) |
Загрузить в аккумулятор младший байт, адрес которого хранится в регистровой паре BC |
||
083F |
1F |
RAR |
Cдвиг аккумулятора вправо с переносом |
|||
0840 |
5F |
MOV E, A |
(E)(A) |
Переслать содержимое регистра А в регистр E |
||
0841 |
19 |
DAD D |
(HL)(HL)+(DE) |
Сложить регистровые пары HL и DE |
||
0842 |
D2 |
JNC M3 |
JMP if C=0 |
Переход на метку M3, если бит переноса С равен нулю |
||
0843 |
4C |
|||||
0844 |
08 |
|||||
0845 |
3A |
LDA 0811 |
(A) |
Загрузить в аккумулятор содержимое ячейки памяти 0811 |
||
0846 |
11 |
|||||
0847 |
08 |
|||||
0848 |
3C |
INR A |
(A)(A)+1 |
|||
0849 |
32 |
STA 0811 |
M(0811)(A) |
Записать содержимое аккумулятора в ячейку памяти 0811 |
||
084A |
11 |
|||||
084B |
08 |
|||||
M3 |
084C |
3A |
LDA 0810 |
(A) |
Загрузить в аккумулятор количество слагаемых |
|
084D |
10 |
|||||
084E |
08 |
|||||
084F |
3D |
DCR A |
(A)(A)-1 |
Декрементирование содержимого аккумулятора |
||
0850 |
CA |
JZ M4 |
JMP if Z=1 |
Переход на метку M4, если бит ноля Z равен единице |
||
0851 |
5B |
|||||
0852 |
08 |
|||||
0853 |
32 |
STA 0810 |
M(0810)(A) |
Записать содержимое аккумулятора в ячейку памяти 0810 |
||
0854 |
10 |
|||||
0855 |
08 |
|||||
0856 |
03 |
INX B |
(BC)(BC)+1 |
Инкрементирование регистровой пары BC |
||
0857 |
03 |
INX B |
(BC)(BC)+1 |
Инкрементирование регистровой пары BC |
||
0858 |
C3 |
JMP M1 |
Безусловный переход на метку M1 |
|||
0859 |
24 |
|||||
085A |
08 |
|||||
M4 |
085B |
3A |
LDA 0811 |
(A) |
Загрузить в аккумулятор переносы |
|
085C |
11 |
|||||
085D |
08 |
|||||
085E |
57 |
MOV D, A |
(D)(A) |
Переслать содержимое регистра А в регистр D |
||
085F |
3A |
LDA 0812 |
(A) |
Загрузить в аккумулятор знак |
||
0860 |
12 |
|||||
0861 |
08 |
|||||
0862 |
82 |
ADD D |
(A) |
Сложить содержимое регистров A и D |
||
0863 |
22 |
SHLD 0900 |
M(0900)(L)M(0901)(H) |
Записать содержимое регистровой пары HL в ячейки памяти 0900h и 0901h |
||
0864 |
00 |
|||||
0865 |
09 |
|||||
0866 |
FF |
RST 7 |
Остановка программы |
Вывод
Основной сложностью, при составлении программы, было составление цикла представления чисел к обычному виду, то есть когда знак находится в седьмом бите старшего байта. В связи с этим были задействованы все регистры, и для учета знака и переноса из старшего бита суммы пришлось использовать ячейки памяти: в одной учитывались переносы, в другой - знак.
Программа может посчитать не только сумму 5 чисел, а например 256 двухбайтных чисел. Для этого следует изменить проверку на последний адрес ячейки памяти массива чисел.
Ответ выводится в ячейки памяти 0900h - 0901h, причем младший байт записывается в ячейку 0900h, а старший в ячейку 0901h. Третий байт суммы хранится в аккумуляторе.
Библиографический список
1. С.И. Лукьянов, Д.В. Швидченко, Е.С. Суспицын, Р.С. Пишнограев. Методические указания к курсовому проектированию по дисциплинам «Машинные языки программирования» и «Основы микропроцессорной техники» для студентов специальности 210106, направления 210100. Магнитогорск: Изд-во Магнитогорск. гос. техн. ун-та им Г.И. Носова, 2011г. 42 с.
2. К.А. Палагута. Учебное пособие Микропроцессоры Intel 8080, 8085 (КР580ВМ80А, КР1821ВМ85А) и их программирование. -М.: МГИУ 2007. 104с.
3. Л. Левенталь, У. Сэйвилл. Программирование на языке Ассемблера для микропроцессоров 8080 и 8085. Перевод с английского А.А. Батнера. -М.: Радиосвязь 1987. 441c.
Размещено на Allbest.ru
...Подобные документы
Разработка алгоритма работы блока сложения дробных двоичных чисел в обратном модифицированном коде с фиксированной запятой. Определение состава узлов и управляющих сигналов блока по схеме электрической функциональной, описание его принципа работы.
реферат [415,8 K], добавлен 29.11.2010Описание методов нахождения и построения эйлеровых циклов в графах при раскрытии содержания цикломатических чисел и фундаментальных циклов. Изучение алгоритма решения задачи "Китайского почтальона" и разработка программы, решающей задачу на языке Си.
курсовая работа [924,3 K], добавлен 09.01.2011Формальные правила двоичной арифметики. Операция алгебраического сложения в ЭВМ. Алгебраическое сложение в дополнительном коде. Денормализация чисел. Виды денормализации и методы устранения. Особенности округления чисел, заданных инверсными кодами.
реферат [42,9 K], добавлен 16.01.2011Алгоритм решения задачи: расположение значений ветора в порядке возрастания методом "Всплывающих пузырьков". Блок-схема алгоритма решения задачи. Описание блок-схемы, распечатка программы. Операторы: rem, dim, print, input, lprint using, for-next.
курсовая работа [17,4 K], добавлен 27.02.2010Общее описание и особенности использования программы, предназначенной для определения нечетных чисел, находящихся в массиве чисел. Листинг и методы оптимизации данной компьютерной программы. Источники оптимизации кода, описание выполненных команд.
лабораторная работа [17,4 K], добавлен 25.03.2011Оптимальный алгоритм деления чисел в нормализованной форме для получения нормализованного произведения чисел с помощью TP Pascal. Работа со строковыми данными и типами Real и Integer. Описание метода решения. Блок-схема работы программы, ее листинг.
курсовая работа [111,8 K], добавлен 28.07.2009Создание и реализация алгоритма решения транспортной задачи методом наименьших стоимостей. Схема алгоритма основной программы. Основные шаги алгоритма решения транспортной задачи. Инструкция по эксплуатации программы и обзор результатов ее выполнения.
курсовая работа [2,0 M], добавлен 12.02.2013Составление программы сортировки по возрастанию массив из 20 шестнадцатеричных чисел, просматривающей все исходные числа во внешней памяти и выбирающей самое большое число. Блок-схема алгоритма работы программы. Таблица команд и число их выполнения.
курсовая работа [23,1 K], добавлен 24.05.2015Поиск взаимно простых чисел. Алгоритм Евклида для целых чисел. Описание выбранного языка программирования. Алгоритм решения задачи. Обзор средств программирования. Текст и описание программы. Руководство оператора, программа и методика испытаний.
курсовая работа [843,5 K], добавлен 15.06.2011Программирование микро ЭВМ на МП БИС КР580ИК80. Арифметические команды. Представление чисел в различных системах счисления и отображение их на дисплее. Сложение массива однобайтных чисел. Вычитание одинаковых чисел. Сложение двух десятичных чисел.
лабораторная работа [263,8 K], добавлен 03.03.2009Описание алгоритма решения транспортной задачи по планированию перевозки зерна. Ход решения задачи вручную, в программе TORA методом наименьшего элемента, с помощью MS Excel. Разработка программы для решения задачи в общем виде средствами Delphi.
курсовая работа [2,5 M], добавлен 22.11.2012Решение трансцендентного уравнения методом Ньютона. Построение графика функции. Блок-схема алгоритма решения задачи и программа решения на языке Pascal. Вычисление значения интеграла методом трапеции, блок-схема алгоритма, погрешности вычисления.
задача [163,4 K], добавлен 16.12.2009Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012Решение задачи по методу Адамса. Блок-схема функции main. Блок-схема функции Adams. Листинг программы. Блок-схема функции MMinor. Блок-схема функции MatrixMultiply. Блок-схема функции Determinant. Результат решения задачи на ЭВМ.
курсовая работа [68,9 K], добавлен 16.04.2004Составление блок-схемы алгоритма решения задачи, погрешности вычисления суммы членов числового ряда. Разработка программ на языке на Visual Basic, работа с массивами. Особенности работы со строковыми данными. Варианты реализации формы приложения.
контрольная работа [220,4 K], добавлен 18.06.2010Задача для проведения теплофизического расчета с помощью программы написанной на языке Pascal. Модуль программы, позволяющий определить и рассчитать параметры для решения задачи теплофизического расчета. Блок-схема, отображающая основные действия.
методичка [17,5 K], добавлен 02.09.2010Описание алгоритма решения задачи по вычислению суммы элементов строк матрицы с использованием графического способа. Детализация укрупненной схемы алгоритма и разработка программы для решения задачи в среде Turbo Pascal. Листинг и тестирование программы.
курсовая работа [446,0 K], добавлен 19.06.2014Организационно-экономическая характеристика задачи выгрузки необходимых данных на магнитный носитель. Информационное, техническое и программное обеспечение решения данной задачи. Блок-схема алгоритма решения задачи. Экономическое обоснование программы.
дипломная работа [559,3 K], добавлен 08.11.2010Анализ технического задания. Разработка программы по вычислению функции на языке ассемблер для микропроцессора Кр580ВМ80. Алгоритмы программного умножения, деления, сложения, вычитания и сдвига влево многобайтных чисел. Расчет времени работы программы.
курсовая работа [88,2 K], добавлен 19.09.2012Решения задачи графическим и программным способами. Описание алгоритма решения графическим способом, укрупненная схема алгоритма. Ввод элементов двумерного массива, вывод преобразованного массива, разработка программы на языке pascal, листинг программы.
курсовая работа [115,5 K], добавлен 22.05.2010