Для 8048 перведите с мовы=http://radiokot.ru/forum/viewtopic.php?p=1235815#p1235815 на ассемблер 48-го (при этом не забудьте что там регистры по другому обзываются и пересылать в два регистра надо двумя командами, их можно логически для наглядности в одну МАКРО ) Для 8051 будет проще - он работает с отдельными битами и в его системе комманд есть MUL и DIV . Но напомню, что умножать например на 4 лучше сдвигом (а тем паче на 2 ).
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Токхейм Р. Основы цифровой электроники: Пер. с англ.-М.: Мир,1988.
Токхайм Р. Микропроцессоры: Курс и упражнения Пер. с англ., под ред. В.Н. Грасевича. М.: Энергоатомиздат, 1988.
Дао Л. Программирование микропроцессора 8088: Пер. с англ.-М.:Мир, 1988
СверхБИС универсальных однокристалльных микро-ЭВМ А.В.Кобылинский, Г.П.Липовецкий, Н.Г.Сабадаш и др. -К.:Технiка,1987.
Сташин В.В. и др. Проектирование цифровых устройств на однокристальных микроконтроллерах. /В.В. Сташин, А.В. Урусов, О.Ф. Мологонцева. -М.:Энергоатомиздат, 1990.
Тищенко В.Г., Тищенко Г.В. МикроЭВМ - своими руками. -К.: Рад.шк.,1989.
Это мы долго будем ждать, пока обратится, даже после пролистывания. Вот постом ниже обращается, стало быть все книги хотя бы просмотрены. Молодчина ! Приобретайте знания, они могут и пригодиться (иногда бывает) .
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Последний раз редактировалось petrenko Чт апр 26, 2012 22:23:31, всего редактировалось 1 раз.
я нашла программу перевода с маской, только там однобайтовое число...а как её сделать под двухбайтное? Только вот не могу её вывесить здесь... а так взята в книге Левенталь Л.Программирование на языке ассемблера для микропроцессоров 8080 и 8085.1987 стр. 142-143
_________________ -А есть аудиокниги по схемотехнике? - Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
ну и студент пошел... сколько раз нужно одно и то же повторять, чтоб дошло наконец? есть два пути преобразования: более сложный деление исходных данных на 10 - но здесь операция деления и потребность десятичной коррекции результата
более простой - вычитание из исходных данных числа 10(двоичный эквивалент 0х000A) и подсчет числа вычитаний но тут также требуется десятичная коррекция промежуточных данных результата модификацией этого метода является исходник, который я выложил download/file.php?id=103990 суть заключается в "ступенчатом" вычитании из исходных данных сначала десятков тысяч (10000d=0x2710) c подсчетом их количества в регистре результата х10000, затем тысяч (1000d=0x03E8) c подсчетом их количества в регистре результата х1000, затем сотен (100d=0x0064) c подсчетом их количества в регистре результата х100, затем сотен (10d=0x000A) c подсчетом их количества в регистре результата х10, и в остатке у нас единицы - их поместим в регистр результата х1 преимущество - простые операции (только двухбайтовое вычитание/сложение) с количеством проходов в каждой ступени не более 10, отсутствие десятичной коррекции результата (иногда мерещатся "маски" - но это есть константы) обратное преобразование: разбиваем исходное упакованное двоично-десятичное на тетрады и размещаем соответственно в регистрах задатчика 65536 ---> х10000 = 0х06 х1000 = 0х05 х100 = 0х05 х10 = 0х03 а 0х0006 сразу помещаем в накопитель результата затем прибавить к накопителю 10d=0x000A количество раз, указанное в х10 прибавить к накопителю 100d=0x0064 количество раз, указанное в х100 прибавить к накопителю 1000d=0x03E8 количество раз, указанное в х1000 прибавить к накопителю 10000d=0x2710 количество раз, указанное в х10000 ну и вариаций с размещением данных также немерянно - и в регистрах и в ячейках ОЗУ и в стеке... о других способах пока умолчимм... ибо деление/умонжение это дополнительно вращение и сдвиги о которых у студента понятие ... (весной мозги не туда ушли)
Дело не в весне, а в одной простой вещи: информатика вообще не была прочитана преподом как курс, а ассемблер - простые задачи понятны, но более сложные - никак. да и объяснять никто не собирается (я про инст). Так что, баги не только с ассемблером, а в программировании вообще (сейчас еще и С++ проходим, так это тоже темный лес, пишем какую-то непонятную для нашей группы хрень ). У меня вот душа вообще к этому не лежит, как говорится - не дано.
_________________ -А есть аудиокниги по схемотехнике? - Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
нам препод объяснял про вычитание единички из чего-то там...объяснял себе под нос. да и не понятно. про вёдра даже говорил, типа из одного вычитаем имиеющиеся камушки и кадаем в другое ток тоже что-то мутно... короч, он от нас убежал. ему по фиг, мы - студенты, должны сами всё изучать..а никак. объяснить некому.
Эх бедный "препод." Правильно он говорил. Представьте, что в одном ведре лежит некое двухбайтное двоично-десятичное число камушков, например 1234 штук. Самый простой способ решения: это вычитать камушки из "десятичного ведра" по одному естественно, по правилам десятичной арифметики и кидать их в другое "двоичное ведро" суммируя уже по правилам двоичной (булевой) арифметики. Единственная беда, что команда десятичной коррекции (da a), что в 80, что 51 серии работает только после команды сложения. Поэтому поступим чуть по другому, зная, что полное десятичное ведро есть 10000, больше в 2 байта не помещается (0000 + с). Будем заполнять ведро до упора (до 10000), а затем вычтем из 10000 содержимое "двоичного ведра" по двоичным правилам и получим двоичный эквивалент нашего исходного двоично-десятичного. Пишу для 51 серии, т.к. не на чем проверить 80. Если только попозже... Здесь команды самые простые и легко перейти на 80-ку или пусть более продвинутые "дяденьки" помогут. Вроде все разжевал.
Код:
org 0 jmp start
start: mov dptr, #1234h ; помещаем 1234 в dptr временно, можно любое от 0 до 9999 mov r3, #0 ; обнуляем mov r2, #0 ; аналогично чистим, чтобы "ведерко" было пустым cykl: ; *** здесь мы добавляем единичку по правилам двоичной арифметики к 2х байтному числу r3 (старший байт) r2 ( камушки добавляем в 1 ведро)*** mov a, r2 ; мл. байт числа в аккумулятор add a, #1 ; прибавляем единичку, перенос игнорируем mov r2, a ; отправляем обратно mov a, r3 ; ст. байт числа в аккумулятор addc a, #0 ; прибавляем перенос, если таковой имеется mov r3, a ; отправляем обратно ; *** здесь мы добавляем единичку по правилам двоичной-десятичной арифметики к 2х байтному числу dptr, ; пока "ведро" не станет полным, т.е. 10000, т.е. реально до 0000 плюс перенос (это у нас 2-е ведро)*** mov a, dpl ; мл. байт числа в аккумулятор add a, #1 ; прибавляем единичку, перенос игнорируем da a ; десятичная коррекция mov dpl, a ; отправляем обратно mov a, dph ; ст. байт числа в аккумулятор addc a, #0 ; прибавляем перенос, если таковой имеется da a ; десятичная коррекция mov dph, a ; отправляем обратно jc dalee ; если появился перенос, значит мы достигли 10000 и надо переходить к другой части jmp cykl ; если нет, то продолжаем заполнять двоично-десятичное ведро ; *** другая часть *** dalee: ; *** тут уже дело техники, мы знаем объем двоично-десятичного двухбайтового ведра: 10000, мы его заполнили под завязку, ; значит число исходное вычисляется (10000-(число камушков)), которые мы накидали в двоичное ведро (ведро 1 или r3,r2), ; но уже чисто в двоичном виде и поместим его обратно в dptr для наглядности *** mov dptr, #10000 ; помещаем 10000 в dptr, будем из него вычитать содержимое 1 ведра (r3,r2) clr c ; обнуляем перенос mov a, dpl ; мл. байт числа в аккумулятор subb a, r2 ; вычитаем младшие байты mov dpl, a ; отправляем обратно mov a, dph ; ст. байт числа в аккумулятор subb a, r3 ; вычитаем старшие байты и заем mov dph, a ; отправляем обратно
; все, у нас в dptr двоичный код числа, для 1234, это будет 04d2h, ; кто не верит, может проверить на виндовс-калькуляторе. nop
Спасибки)) и про ведра тоже, наконец-то полно объяснено))) проверим чуть позже. А сегодня этот дяденька меня обидел. Я у него курсовой делаю (он дал схему частотомера с радиорадара, надо произвести выбор элементов, разжевать всё под ГОСТ 15150, чертежи, схемы и т.д.). Я всю ночь писала, оформляла всё как надо... Приношу показывать теорию (выбор элементов, анализ ТЗ, расчеты), правда, из чертежей были только эл схема и топология. А он - У Вас менее половины курсового сделано. У других вообще, как говорится, конь не валялся, они принесли только анализ поставленной задачи, и то бред какой-то, а он им 60 процентов поставил((( ничего другого они не представили. Эх... обидно. Делаешь-делаешь, а всё равно бяка получается( трясусь за все курсовые, докапываюсь, пытаюсь не просто написать, а еще и разобраться, думаю, что бы еще по делу добавить, а никто не ценит. Зато другим за красивые глазки ставят Отлично, а мне говорят, что я купила курсач((( им - оценки автоматом за короткие юбочки, а я сдаю.. но ниче, на 5 в той сессии защитила)
_________________ -А есть аудиокниги по схемотехнике? - Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
Ну короткие юбочки же не запрещены так же как и глубокое декольте но желание разобраться и все сделать самой - это очень хорошо. Мы тут очень ценим всех девушек, которые разбираются в схемотехнике и/или программировании, всех двух... или даже трех!
Если простые задачки понятны, то более сложные берутся методом черного ящика
Причем,
Цитата:
Главные свойства приписываются новому, условному объекту - "чёрному ящику". Все иные свойства полностью исключаются из рассмотрения, и о самом их существовании требуется забыть (наиболее трудный момент).
to : IM1 : А почему dptr ? Я бы взял R0 R1 тогда и на 8048 можно перенести ? А вообще вот готовенькое есть, работает и на 8051 и на 8048 вроде: org 0 BDB: CALL DIV16 SWAP A ORL A,R1 SWAP A JMP EXIT ;ПОДПРГРАММА ДЕЛЕНИЯ НИЖЕ DIV16: MOV R1,#0 SUB16: ADD A,#84H DA A INC R1 JC SUB16 DEC R1 ADD A,#16H DA A RET EXIT: NOP Так сойдёт ?
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
to : IM1 : А почему dptr ? Я бы взял R0 R1 тогда и на 8048 можно перенести ?
Да. не вопрос! Хоть r6, r7. Просто так нагляднее при отладке и некоторое приближение к 8080, где активно используются регистровые пары BC, DE и HL.
petrenko писал(а):
А вообще вот готовенькое есть, работает и на 8051 и на 8048 вроде:
Если открыть Фрунзе, то много готовенького можно увидеть и на разные темы. Топик-стартер просила, препод ее тоже, что программа должна быть без "изысков" типа подпрограмм, макросов. Желательно на уровне двух ведер с камушками, что я и сделал.
Какие уж изыски, всё простенько. Комментарий убрать, чтоб преп. не понял, и порядок ! Главное подойдёт и для 8051 и для 8048 , только компилировать под каждый отдельно, ибо ассемблеры похожие по мнемоникам у них, но коды разные. Пущай изпользует программку.
_________________ < виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Про нитроэмаль совет, конечно, ценный))) ток на один раз прокатит - потом ресницы выпадут, ахаха)))))) юбочки короткие не катят, я вообще не люблю всё это (пафос, гламур и прочее). Я, дура такая, всё пытаюсь сама делать, вот только в этот раз так плохо вышло, пришлось вас, дяденьки, загружать своей проблемой... Спасибо, что помогли с другими процессорами. Большое-пребольшое спасибо!!! осталось только вбить в эмулятор и посмотреть что и как )
_________________ -А есть аудиокниги по схемотехнике? - Нет, наверно. Но ты попроси какую-нибудь девушку прочитать..так, эротичным голосом.
К сожалению, только сейчас внимательно посмотрел на вашу программу. ИМХО бред какой-то. Куда помещается входное двухбайтовое двочно-десятичное число? Где находится выходное такое же, но двоичное?
П.С. Сделайте, будьте добры, простую задачку своей программкой: преобразуйте 1234 dec в bin, крайне интересно посмотреть.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 60
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения