Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Нужна помощь. i8080 (K580BM80)


Автор: Lefan 12.1.2006, 15:29
В массиве из 15-ти двухбайтовых чисел со знаком расположить: четные элементы в порядке убывания модулей, нечетные элементы в порядке убывания. Найти средне-арифметическое модулей всех чисел


Данные вродевы расположил...
Расположение исходных данных, результатов и рабочих данных в ОЗУ

0B8E – 0BAB – исходный массив чисел
0B00 – используется при проверке четности
0B01 – 0B04 – используется для размещения рабочих адресов четных (01-02) и нечетных (03-04) чисел
0B05 – 0B08 - используется для записи рабочего адреса пол.четных (05-06) и пол.нечетных (07-08) чисел
0B09 – 0B0С используется для записи рабочего адреса отр.четных (09-0A) и отр.нечетных (0B-0C)чисел
0B0D – используется как счетчик пол. четных чисел
0B0E – используется как счетчик отр. четных чисел
0B0F – используется как счетчик пол. нечетных чисел
0B10 – используется как счетчик отр. нечетных чисел
0B11 – используется для хранения рабочего адреса при прогоне пол. четных чисел
0B12 – используется для хранения рабочего адреса при прогоне отр. четных чисел
0B13 – используется для хранения рабочего адреса при прогоне пол. нечетных чисел
0B14– используется для хранения рабочего адреса при прогоне отр. нечетных чисел
0B15– используется для хранения рабочего адреса при прогоне четных чисел
0B16 – используется для хранения рабочего адреса при прогоне нечетных чисел
0B17 – используется как счетчик четных чисел
0B18 – используется как счетчик нечетных чисел
0A10 – 0A2D массив результата четных чисел
0A30 – 0A4D массив результата нечетных чисел
0A50 – 0A6D массив результата отрицательных четных чисел
0A70 – 0A8D массив результата отрицательных нечетных чисел
0B30 – 0B4D массив четных чисел
0B50 – 0B6D массив нечетных чисел

И начало прог-мы сделал. Ввод адресов...

start: lxi b, 0bff ; Загрузка начального адреса для очистки или загр
start1: inr c ; Увеличение адреса

ldax b
xra a ; Очистка памяти
stax b

mov a, c ; Проверка окончания очистки
cpi 8d

jnz start1 ; Если адрес не 008D- продолжить с srart1

xra a

sta 0bae ; Обнуление дополнительных адресов
sta 0baf
sta 0b07
sta 0b08

mvi a, 0b ; Загрузка старшего байта адресов 0B
sta 0b01
sta 0b03

mvi a, 95 ; Загрузка 95 в указатель адреса четных чисел
sta 0b02

mvi a, B5 ; Загрузка B5 в указатель адреса нечетных чисел
sta 0b04

mvi a, 15 ; Загрузка 15 в указатель адреса положительных
sta 0b05 ; четных чисел

mvi a, 35 ; Загрузка 35 в указатель адреса положительных
sta 0b06 ; нечетных чисел

mvi a, 55 ; Загрузка 55 в указатель адреса отрицательных
sta 0b07 ; четных чисел

mvi a, 75 ; Загрузка 75 в указатель адреса отрицательных
sta 0b08 ; нечетных чисел

lxi h, 0b8e ; Загрузка адреса 0B8E в пару регистров HL
; адрес рабочего числа

start4et: mov b,m ; Загрузка рабочего числа в пару BC
inr l
mov c,m
inr l

mov a,l ; Проверка на окончание чисел для проверки и переход
cpi ae ; на модуль сортировки в этом случае

А вот на четность никак получается.


Помогите плиз кто умеетsmile

Автор: DrLazy 13.1.2006, 01:08
А что на четность, сравнение кокое?
ТОгда
ora a для младшего байта числа и jpe jpo ( по моему такие мнемоники, ооооочень давно юзал )
ну или проверка состояния младшего бита - равен 1 значит нечетное. типа ani 1 jnz nechetnoe.

А вообще, где так писать учат, про директивы типа db ничего неговорили, и про метки?
Всетаки ассемблер, а не напрямую коды smile

Автор: Void 13.1.2006, 01:29
Цитата(DrLazy @ 13.1.2006, 03:08 Найти цитируемый пост)
ora a для младшего байта числа и jpe jpo ( по моему такие мнемоники, ооооочень давно юзал )
ну или проверка состояния младшего бита - равен 1 значит нечетное. типа ani 1 jnz nechetnoe.

IIRC, это не "или", а совершенно разные вещи. Parity flag ставится в зависимости от того, четное или нечетное число единичных бит в операнде.

Цитата(DrLazy @ 13.1.2006, 03:08 Найти цитируемый пост)
А вообще, где так писать учат, про директивы типа db ничего неговорили, и про метки?

А хотя бы у нас в универе... Меня даже сомнения взяли, не оттуда ли Lefan, как раз время курсовые сдавать подходит smile

Автор: DrLazy 13.1.2006, 21:59
Void
Согласен, про jpe jpo соврамши smile
пьяный был smile

Цитата

А хотя бы у нас в универе...

А что, правда, никаких ORG, DW, DB, DS и иже с ними?
Никаких циклов типа

dcr c
jnz something

?

Автор: Void 13.1.2006, 22:12
DrLazy
Ничего, кроме меток.
Впрочем, ассемблер КР580 у нас так, побочный продукт одного предмета. И хотя по нему есть целая курсовая, работающего транслятора под него никто не видел. Ну разве что я его вместе с эмулятором напишу, который выпросил заместо обычной курсовой smile

Автор: SergeCpp 16.1.2006, 09:35
Где-то в сети есть эмуляторы Радио-86РК... (не помню адрес)
Там есть и ассемблеры (2 килобайта) и отладчик (4 килобайта)...
Можно подстроить под другой комп
(там все вызовы системные в начале сгруппированы)

Можно и на PC использовать с эмулятором

Были у меня исходники, но, к сожалению, время... Их нет уж боле...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)