Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
ewgeny7
Родился
Сообщения: 17
Зарегистрирован: Вт мар 04, 2008 22:17:19

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение ewgeny7 »

Ну, у меня "то-в-чем-делаем-лабы" запустилась на КореДуба с Выньдос_7.
КиберКот
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение IM1 »

Lina_Inverse писал(а):ну и еще аналогичная задачка на 48 и 51 процессорах
Если точно такая для 51-го, давайте сделаю без проблем, если другая, то скажите какая?
Аватара пользователя
IM1
Грызет канифоль
Сообщения: 268
Зарегистрирован: Вт фев 16, 2010 12:10:38
Откуда: Воронеж, Россия

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение IM1 »

ewgeny7 писал(а):Ну, у меня "то-в-чем-делаем-лабы" запустилась на КореДуба с Выньдос_7.
А у меня нет, говорит , что не совместима с 64-битной версией. Судя по описанию, вообще хочет MS DOS 3.3.
Последний раз редактировалось IM1 Чт апр 19, 2012 11:25:21, всего редактировалось 1 раз.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение BOB51 »

Странно... проверил и при "вводе от руки" и при вводе скомпилированного в *.hex...
при пошаговом исполнении куда пошлеш, туда и прыгает (win_xp/pIII-800).
НО - программный код действителен только для области 0x0000-0x01FF то-ли это "демка"(если объём кодв превысит этот диапазон запишется ерунда), то-ли связано с увязкой с внешним аппаратным блоком, а как перестроить...ить... информации нету... :cry:
по сему пользовательская программа не должна выходиь за рамки 0x0000-0x01FF , в то же время обращения к остальной области памяти (загрузить/считать ячейку) выполняются верно. :beer:
не пинайте ногами симулятор..!
у меня перед вызовом программы "по умолчанию" "EN" включен :oops:
а DOS-программы с кодировкой ... ОЙ... (С=C) :)
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение petrenko »

Что-то TopickStarter ничего не пишет, наверное всё исключительно понятно и успешно заработало ? :wink:
Если да, то по какому из алгоритмов, разскажите нам, пожалуйста ! :beer:
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Alexeyslav »

Ох, было дело было... даже собрал свою схему на Z80 с ЖК-индикатором вручную переводя с ассемблера в машинные коды. Последний вариант позволял вводить коды прямо в ОЗУ и выполнять программу. Работала схема с ЖК индикатором 8 строк по 20 символов в каждой.

А что касается перевода BIN-BCD то среди команд есть команда двоично-десятичной коррекции, которая позволяет из байта сделать BCD и наоборот и установить признак переноса если число больше 100.
Где-то даже видел алгоритм с использованием этой команды для многобайтных чисел. Но это довольно сложно для понимания.

Гораздо же проще для маленьких чисел делать это в лоб: на входе нам дается число N которое надо перевести - организуем цикл на N итераций и прибавляем внутри счетчик в нужной системе - двоичной или BCD, в конце концов он насчитает ровно N.
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

IM1, да, задача та же самая, ну то есть перевод двоично-десятичного двухбайтного числа в двоичное...

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

З.Ы. сегодня по дисциплине Микроконтроллерные средства в измерительной технике снова проходили МК 8080)) ладно, по фиг, был на третьем курсе курсовой на ассемблере применительно к КР580ВМ80, но зачем сейчас снова это старьё изучать?.... повторно, к тому же))
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

Вот еще нашла кое-что...
Вырвано из курсача (наш инст) ))
Задача, решаемая в курсовом, состоит из 4-х байтных чисел. в листинге я нашла подпрограмму преобразования 2-10 4-х байтного числа в двоичное. Как бы только эту часть листинга оставить, ну, понятно, что с записью куда-нить исходных по моей лабораторной задаче 2-х байтных чисел...

Собственно, условие задачи и сам листинг


1. Функция (х1*х2)/х3;
2. Тип микропроцессора КР580ВМ80;
3. Рабочая частота – 2 МГц;
4. Исходные числа целые, положительные, 4-х байтовые, двоично-десятичные;


Листинг решения задачи вообще

Приложение А
Листинг программы

; Программа вычисления функции y=(x1*x2)/x3

org 0000h
Start:
lxi sp,Stack

lhld x1L ; копирование [x1] в [p1]
shld p1L ;
lhld x1H ;
shld p1H ;

call ToBIN ; преобразование x1 в двоичный вид в [p2]

lhld p2L ; копирование [p2] в [p3]
shld p3L ;
lhld p2H ;
shld p3H ;

lhld x2L ; копирование [x2] в [p1]
shld p1L ;
lhld x2H ;
shld p1H ;

call ToBIN ; преобразование x2 в двоичный вид в [p2]

; умножение двух 4-х байтных чисел, результат 7-и байтный
; [p4]=[p2]*[p3] (=x1*x2)
lxi h,p4 ; обнуление результата [p4]
mvi b,7 ;
call Zero ;
mvi c,32 ; счетчик бит множителя (32)
mpl1:
lxi h,p4 ; сдвиг влево результата [p4]
mvi b,7 ;
call RalN ;
lxi h,p3L ; сдвиг влево множителя [p3]
mvi b,4 ;
call RalN ;
jnc mpl2 ; бит множителя равен 1?
; прибавление множимого к результату
xra a ; сброс признака переноса
; сложение первых четырех байт
lxi h,p2L ; адрес множимого
lxi d,p4 ; адрес результата
call Add4 ;
; учет переноса в следующие три байта
mvi b,3 ; счетчик байт
add3lp:
mov a,m ; сложение с переносом
aci 0 ;
mov m,a ;
inx h ; увеличение адреса
dcr b ; уменьшение счетчика
jnz add3lp
mpl2:
dcr c
jnz mpl1

lhld x3L ; копирование [x3] в [p1]
shld p1L ;
lhld x3H ;
shld p1H ;

call ToBIN ; преобразование x3 в двоичный вид в [p2]

; деление 7-и байтного числа на 4-х байтное,
; результат 7-ми байтный
; [p5]=[p4]/[p2]
lxi h,p5 ; обнуление результата [p5]
mvi b,7 ;
call Zero ;
lxi h,0 ; обнуление остатка [p3]
shld p3L ;
shld p3H ;
mvi c,56 ; счетчик бит делимого (8*7=56)
divlp:
lxi h,p4 ; сдвиг делимого [p4] влево
mvi b,7 ;
call RalN ;

lxi h,p3L ; сдвиг остатка [p3] влево
mvi b,4 ;
call RalN ;

lxi h,p2L ; вычитание делителя из остатка
lxi d,p3L ; [p3]=[p3]-[p2]
mvi b,4 ; счетчик байт (4 байта)
sub4lp:
ldax d ; вычитание одного байта числа
sbb m ;
stax d ;
inx h ;
inx d ;
dcr b ; уменьшение счетчика байт
jnz sub4lp ; цикл вычитания

jnc NoAdd ; остаток больше делителя?
; если нет - восстанавливаем остаток:
xra a ; Tc=0
lxi h,p2L ; [p3]=[p3]+[p2]
lxi d,p3L ;
call Add4 ;
stc ; Tc=1
NoAdd:
cmc ; получение бита результата в Тс
lxi h,p5 ; сдвиг бита результата в [p5]
mvi b,7 ;
call RalN ;

dcr c ; уменьшение счетчика бит
jnz divlp ; цикл деления

; преобразование 7-и байтного двоич. числа
; в 8-и байтн. дв.дес. число
; [y] <- [p5]
lxi h,Y ; обнуление результата [y]
mvi b,8 ;
call Zero ;
mvi c,56 ; количество разрядов в двоич. числе (8*7)
BinLoop: ; цикл преобразования
lxi h,p5 ; сдвиг двоичного числа влево
mvi b,7 ;
call RalN ;

lxi h,Y ; нач. адрес дв.дес. числа
mvi b,8 ; количество байт в дв.дес. числе
AdjDAA: ; цикл умножения дв. дес. числа на 2
mov a,m ; загрузка байта числа
adc m ; (A)<-(A)+(A)+Tc
daa ; коррекция
mov m,a ; сохранение байта
inx h ; следующий байт
dcr b ; уменьшение счетчика байт
jnz AdjDAA

dcr c ; уменьшение счетчика бит
jnz BinLoop

jmp Start

; Подпрограмма
;преобразование 4-х байтного дв.дес. числа
;в 4-х байтн. двоичн. число
;[p2] <- [p1]
ToBIN:
xra a ; обнуление результата [p2]
lxi h,0 ;
shld p2L ;
shld p2H ;
mvi e,32 ; количество разрядов в двоич. числе (8*4)
BCDloop:
lxi h,p1H ; сдвиг дв.дес. числа вправо
call Rar4 ;
lxi h,p2H ; сдвиг двоич. числа вправо
call Rar4 ;

dcr e ; уменьшение счетчика разрядов
rz ; выход, если все разряды обработаны

; коррекция дв.дес.числа (4 байта)
lxi h,p1L ; адрес числа
mvi b,4 ; счетчик байт
adjloop:
call adjBCDRar ; коррекция одного байта числа
inx h ; следующий байт
dcr b
jnz adjloop
jmp BCDloop

; Подпрограмма
; коррекция байта дв. дес. числа после деления на 2
adjBCDRar:
mov a,m ; [X]=[X]-3, если [X] > x7h
mov d,a ;
ani 08h ;
jz nosui1 ;
mov a,d ;
sui 3 ;
mov m,a ;
nosui1:
mov a,m ; [X]=[X]-30h, если [X] > 7xh
mov d,a ;
ani 80h ;
jz nosui2 ;
mov a,d ;
sui 30h ;
mov m,a ;
nosui2:
ret

; Подпрограмма
; сложение двух 4-х байтн. чисел
; DE - адрес первого числа
; HL - адрес второго числа
; [DE]=[DE]+[HL]
Add4:
mvi b,4
add4lp:
ldax d
adc m
stax d
inx h
inx d
dcr b
jnz add4lp
ret

; Подпрограмма
; сдвиг влево через перенос N-х байтн. числа
; (B)=число байт
; [HL]=адрес младшего байта числа
RalN:
mov a,m
ral
mov m,a
inx h
dcr b
jnz ralN
ret

; Подпрограмма
; сдвиг вправо через перенос 4-х байтн. числа
; [HL]=адрес старшего байта числа
Rar4:
mvi b,4
rar4lp:
mov a,m
rar
mov m,a
dcx h
dcr b
jnz rar4lp
ret

; Подпрограмма
; обнуление области памяти
; HL - адрес начала области
; B - количество байт
Zero:
xra a ; обнуление A
zerol:
mov m,a ; обнуление ячейки памяти
inx h ; увеличение адреса
dcr b ; уменьшение счетчика
jnz zerol
ret

x1L dw 0 ; дв.дес.число x1, 4 байта
x1H dw 0 ;

x2L dw 0 ; дв.дес.число x2, 4 байта
x2H dw 0 ;

x3L dw 0 ; дв.дес.число x3, 4 байта
x3H dw 0 ;

Y dw 0 ; дв.дес.результат y, 8 байт
dw 0 ;
dw 0 ;
dw 0 ;

p1L dw 0 ; временная переменная, 4 байта
p1H db 0 ;
p1HH db 0 ;

p2L dw 0 ; временная переменная, 4 байта
p2H db 0 ;
p2HH db 0 ;

p3L dw 0 ; временная переменная, 4 байта
p3H dw 0 ;

p4 dw 0 ; временная переменная, 7 байт
dw 0 ;
dw 0 ;
db 0 ;

p5 dw 0 ; временная переменная, 7 байт
dw 0 ;
dw 0 ;
db 0 ;

dw 0 ; стек
Stack dw 0 ; начало стека

end
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Alexeyslav »

Старьё не старье, а работает. Вас учат не старью, а программированию. И Z80 для этих целей лучше не придумаешь.

Вот попробуй так с ходу вникнуть в систему команд хотябы 386-го процессора, не говоря уже о более современных или даже ныне популярные на ARM ядре. Все это имеет отношение и к языкам высокого уровня - нужно ведь знать как реализованы высокоуровневые конструкции и как их лучше всего использовать.

Так что радуйтесь что вам не дают более современное, ассемблер Z80 достаточно простой для изучения.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15546
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение BOB51 »

чёй-то похожее на полный алгоритм умножения/деления многобайтников... но такое пока за ненадобностью в прикладных целях только в виде наброска алгоритма лежит...доводить до конкретного исходника вломушки... :sleep:
а вот размещение оъявленных имен в конце исходника некорректно (если это только не распечатка листинга - там они "в хвосте" выпадают)
и чего касательно I8080/Z80 - с него быстренько на AVR переход производится, даже моделировать особо не надо - уже готовый системный наборчик с базой а-ля Z80 8)
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

Дяденьки, а можно эту задачку решить попроще? ну без модулей...тока циклы и всё... а то у нас туго с этим :cry:
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Alexeyslav »

Подпрограммы и нужны для того чтобы сделать "попроще". Без них вообще трындец будет. Да, можно сделать абсолютно плоский алгоритм, но в нем чёрт ногу сломит, а уж тем более понять как он работает и предоставить доказательства что он работает ВЕРНО для любых входных чисел.
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

нам препод объяснял про вычитание единички из чего-то там...объяснял себе под нос. да и не понятно. про вёдра даже говорил, типа из одного вычитаем имиеющиеся камушки и кадаем в другое :)) ток тоже что-то мутно... короч, он от нас убежал. ему по фиг, мы - студенты, должны сами всё изучать..а никак. объяснить некому.
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение petrenko »

Alexeyslav писал(а):Подпрограммы и нужны для того чтобы сделать "попроще". Без них вообще трындец будет. Да, можно сделать абсолютно плоский алгоритм...

Если расход машинного времени на вход в подпрограмму и на возврат сопоставим с расходом на саму последовательность команд, выполняющих подзадачу, то можно использовать МАКРОподстановки. Получится почти плоский алгоритм, но всё же достаточно наглядный (в исходном тексте) особенно если с комментариями. А вообще непонятно, чего от них там преп. требуют ? Правильная формулировка задачи нужна. (или много денег) :)
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

надо чтобы чёрт ногу сломал)) вот такую проггу) а то препод не поверит (с модулями), что это мы делали))) а так поверит) :oops:
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
petrenko
Друг Кота
Сообщения: 5321
Зарегистрирован: Вт фев 21, 2012 13:51:55
Откуда: Начинающий
Контактная информация:

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение petrenko »

Ну так сделайие с МАКРО, а потом эти макро преп. не показывайте.
P.S. А как хоть обзывалась тема, где камни в вёдрах вычитались, любопытно ?
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

Тема называлась "как перевести двоично-десятичное число в двоичное")
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

с макрами... мы пишем в эмуляторе. вывешен здесь же.
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

не в тему: "в первый раз сказал МЯУ" ))) круть!)
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
Аватара пользователя
Lina_Inverse
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Чт апр 12, 2012 20:01:26
Откуда: Муром

Re: Помогите, пожалуйста!!! Перевод чисел в КР580ВМ80

Сообщение Lina_Inverse »

ой, и еще... не могу найти даташит на HT1610 - дисплей...(
-А есть аудиокниги по схемотехнике?
- Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»