Юный техник - для умелых рук 1989-07, страница 12

Юный техник - для умелых рук 1989-07, страница 12

ТВОЙ ПЕРСОНАЛЬНЫЙ КОМПЬЮТЕР

УЧИМСЯ ПРОГРАММИРОВАТЬ

Е' втором номере «Приложения» были опубликованы коды нескольких полезных программ. Но команды, при помощи которых написаны ли ripoi раммы, оказа лись скрытп1 для вас. В этом выпуске мы попробуем показать jaM «кухню програм мирования» и рассмотрим программы сложения, вычитания, умножения, деле ния, преооразования шестна 'материч-ных чисел в десятичные и преобразова ния десятичных в шестна,т,,датеричныр

СЛОЖЕНИЕ

Для сложения однобайтных чисел в наборе команд микропроцессора КР580ВМ80А есть стандартные команды ADD и ADC, сложение двухбайтных чисел выполняется при помощи комаиды DAD. Но если сктадываемые числа превосходят два байта, то для сложен г надо писать специальную программу. Приведенная ниже программа складывает трех-байтные числа:

СЛОЖЕНИЕ ГРЕХБАИТНЫХ ЧИСЕЛ

вход в npoi рамму первое слагаемое SLC. S* 1, SL2 ■второе слагаемое SL3, SL4, SL5, результат раб". „I ;умма SL3, SI 4 SL5;

SUMMA3: LHID SCO XCHG

LHLD SL3

LDA SL2

LXI H SL5

MOV M,A BET

D,E- младшие байты первого i- гагаемого H,L — младшие байты второго слагаемого H,L - CyMNi.^ этих младших байтов если при сложении возникнет перенос, он будет в дальнейшем учтен I команде ADC М сохранили в памяти первые два байта результата в регистре \ ларший байт первого слагаемого H,L адре старшего байта второго слагаемого сложение старших байтов слагаемых. Учтен перенос, если он был при сложении командой DAD

результат в SL5

ВЫЧИТАНИЕ

Для вычит ания в наборе команд микропроцессора есть две к ланды SUB и riB, работают они только с байтами, для обработки же многобайтных чисел надо писать программу. Вычитание одного двухбайтного числа из дру] ого можно организовать, например, так:

;ВЫЧИТАНИЕ ДВУХБАЙТНЫХ ЧИСЕЛ

jxi т в программу ,H,L — уменьшаемие, ,D,E- вычитаемое. ,,<ез'1ьтаг работы ■В,С —разность.

VICH2 MOV A,L ;ВЫЧИТАНИЕ МЛАДШИХ БАЙТОВ SLiE F MOV С,А ;ВЫЧИТАНИЕ СТ/Ч ШИХ БАЙТОВ MOV А,Н

SBB D .учитывается лере-;нос, cv-jih он был ;при обрабо.ке ;младшцх байтов

MOV В,А RET

Для вычисления разности трчхбаитных чисел можно использовать следующую программу:

;ВЫЧИТАНИЕ ТРЕХБАЙТНЫХ ЧИСЕЛ

;вход в npoi рампу' уменьшаемое SL3, SL4 SL5, вычитаемое SLO, SL1, SL2, .результат иаботы: ;разносгь SL3, SL4 SL5. VICH3 LXI H,S LO ,HL — а фес младшего байта ;вычитаем01 о LXI D.SL3 DE - а фес младшего байта

LDAX D

SIJB м STAX D

LDAX D SBB М STAX D

INX Н INX D LDAX D SBB М STAX D

RET

.уменьшаемого ;A — младший байт уменьшаемого

.вычислен и голра нен младший байт шности

DE —адрес байга 51 4

HL — адрес байта SL1

;в SL4 второй байт ;разности

;в SL5 третий байт ;разности

УМНОЖЕНИЕ

Микропроцессор КР580ВМ80А не имеет команд умножения, поэтому для выполнения этой математической операции надо составлять программу

Приведенная здесь программа работает по следующему алгоритм) i Шаг 1 проверить младшии бит множителя. Если он равен нулю, перейти к шагу 3, если единице — сложить множимое с промежуточным пезультатом умножения.

Шаг 2: сдвинуть полученный промежуточный результат на один бит влево. Шя 3: повторять шаги 1 и 2 до тех пор, пока не будут проверены все биты множителя

УМНОЖЬНИГ

вход в программ, А — множитель, DE - множимое, результат работы: ;HL — произведение JMNPG: LXI Н,0

****** шаг J ******

5HAG3; ORA А

;сброшен промежуточный результат

;провериа окончания работы ;если содержимое ;регистра А ;равно нулю - умножение закончено

***** шаг j ******

RAR ;младший бит мно

жителя в переносе IN С SDVIG.ecjm перенос равен ,нучю —

;пропуск сложения DAD D ;сложение множимого и промежуточного результата

„л**** шаг 2 ******

SDVIU XCHG

DAD Н .сдвиг множимого aCHG

ШГ SHAG3 В строке с меткой SHAG3 проверка на равенство нулю аккумулятора 1ыполне1 i при помощи логической операции ИЛИ аккумулятора с самим собой Зта операция не изменяет содержимое аккумул гора ю устанавливает все признаки. Можно было бы проверить содержимое аккумулятора на равенство нулю при помощи команды CPI00, но эта команда занимает больше места в память и дольше выполняется

ДЕЛЕНИ1

Существуют несколько алгоритмов деления, вы можете ознакомиться с ними в литературе по вычислительной техник^ Мы рассмотрим самый простои алго-ри'. м.

Предлагаемая программа деления работает так:

она последовательно вычитает делитель из делимого, подсчитывая число вы читаний, до тех пор пока уменьшающее ся каждый раз после очередного вычитания значение делимого те станет равным нулю или меньше нуля. Если значени.; делимого рарно нулю, значит, деление без остатка, и число вычитанчи соотвст ■ ствует 1астному. Если значение делимого меньше нуля, значит, надо вычислит? зе-личину остатка Она вычисляется прибавлением значения делителя к текущему значению делимого.

«ДЕЛЕНИЕ ч El ЫРЕХБАЙТНОГО ЧИСЛА ;Н \ 4Ei ЫРЕХКАЙТНОЕ

вход в программу: DE — адрес делимого,

HI адрес делителя, результат работы. RES —частное

DE — адрес остатка DELEN XRA А

ТА rliiS S' \ RES+1 STA RES+2

STA RES-i-3 ^брошено значение ;частного

.ЗАПИСЬ ДЕЛИТЕЛЯ В ЯЧЕЙКУ DEL

.ЗАПИСЬ ДЕЛИТЕЛЯ В ЯЧЕЙКУ DEL

MOV

A,M

STA

)EL

INX

H

MOV

AM

STA

DEL+1

wx

H

MOV

A,M

STA

DEL+2

INX

H

MOV

A I

STA

DI L+3

INX

H

MOV

A.,M

SI/»

DEL+1

LXI

H.RES

делимого из делителя

I DA

DEL

MOV

C.,

11'

DEL+1

MOV

B,A

UAX

D

SBB

С

STAX

D

INX

D

12