|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||||||
Сравнение и умножение двухбайтовых чисел в асме02.11.2011, 21:44. Показов 16713. Ответов 18
Метки нет (Все метки)
есть код
как мне сравнивать двухбайтовое числа в асме для AVR? и умножать в двухбайтовые одно байтовые?
0
|
|||||||||||
| 02.11.2011, 21:44 | |
|
Ответы с готовыми решениями:
18
Умножение дробных чисел в асме
Сложение двухбайтовых чисел |
|
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
|
|
| 02.11.2011, 22:58 | |
|
А зачем именно в асме? Если уже есть программа на Си.
Хотя... может быть, это просто риторический вопрос. Так вот - в АВР есть команда FMUL - ее результат как раз двухбайтовое число в регистрах R0, R1. Как сравнивать - сходу не скажу. Наверное, как-то побайтно с использованием флагов переноса. Проще откомпилировать Сишный код и посмотреть в окошке дизассемблера при отладке.
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||
| 02.11.2011, 23:19 | |||||||
(и не до освоил РТОС на асме от Ди) FMUL нету в тини2313 по поводу сравнения (спасибо доброму человеку):
0
|
|||||||
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
||
| 02.11.2011, 23:25 | ||
А в приведенном коде- просто равны/неравны.
0
|
||
|
1 / 1 / 0
Регистрация: 03.02.2011
Сообщений: 382
|
||||||
| 02.11.2011, 23:27 | ||||||
|
FMUL - дробное незнаковое умножение
Тебе надо MUL: Команда перемножает две 8-разрядные величины без знаков с получением 16- разрядного результата без знака. Множимое и множитель - два регистра - Rr и Rd, соответственно. 16-разрядное произведение размещается в регистрах R1 (старший байт ) и R0 (младший байт). Отметим, что если в качестве множимого и множителя выбрать R0 или R1, то результат заместит прежние значения сразу после выполнения операции. для сравнения подойдет что-то типа (Сравнить r3 : r2 (min) с r1 : r0 (step)): (на основе готового примера: http://www.gaw.ru/html.cgi/txt... sm/cpc.htm)
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 02.11.2011, 23:39 | ||
loop0:cp r2, r0 ; Сравнить старший байт cpc r3, r1 ; Сравнить младший байт brlo loop0; Перейти если не равно ; остальная программа MUL нету в системе команд Тини2313 а насчёт сравнения - уже разобрался (помог STT) - спасибо
0
|
||
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
|
| 03.11.2011, 00:16 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 03.11.2011, 16:25 | ||
понял что неправильно поставил вопрос кто может подсказать алгоритм умножения байтовых чисел и результате получить двухбайтовое?
0
|
||
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
|
| 03.11.2011, 17:25 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||
| 03.11.2011, 20:58 | |||||||
немного потупил и решил сделать макро
0
|
|||||||
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
|
| 04.11.2011, 01:40 | |
|
Обожемой. Зачем из процедуры делать макрос? Для удобства написания? Так для этого можно сделать в макросе заполение регистров значениями, и вызов процедуры.
А макрос, будучи упомянут в тексте несколько раз, заполнит тело программы бесполезными повторами одного и того же кода.
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||||||
| 05.11.2011, 01:48 | |||||||||||
|
переделал
сделал отдельной процерурой вызываемой из вот такого вот макроса:
и 03 * 3B = 76 а не 00B1 в чём я ошибся?или процедурка некорректна? поправка: у меня сие умножение вызывается из двух мест: .def minsH = r20 ; старщий регистр переменной суперминут .def minsL = r21 ; младший регистр переменной суперминут .def stepsH = r22 ; старщий регистр переменной супершагов .def stepsL = r23 ; младший регистр переменной супершагов .def TmpVar = r24 ; регистр переменной часов SetTimeMinute: ; загрузка минут и константы LDS MinsL, RamMinute ; загрузили из ОЗУ минуты LDI TmpVar, StepsToMin ; теперь умножение MULD MinsH, MinsL, TmpVar ; младший, страший, константа ;тут хуёво считает ; загрузка шагов и константы LDS StepsL, RamSteps ; загрузили из ОЗУ пройденые шаги LDI TmpVar, MinPerHour ; теперь умножение MULD StepsH, StepsL, TmpVar ; младший, страший, константа ; тут считает отлично. вот MULD MinsH, MinsL, TmpVar выдаёт порнографию а MULD StepsH, StepsL, TmpVar считает весьма корректно хуле раз 10 проверял вроде всё аналогично но что за на фиг?!
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
|
| 05.11.2011, 11:07 | |
|
Отладчик в помощь.
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||
| 05.11.2011, 12:53 | |||
я не задал бы это вопрос если бы не потратил 3 часа трассируя эти строчки раз за разом...
0
|
|||
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
|
| 05.11.2011, 15:25 | |
|
Странно, всегда пользовался Ченовским кодом, и никогда не случалось засады. Вероятно, у вас некорректно подставлены регистры, в процедуру и макрос, и где-то происходит замещение нужного числа ненужным.
Лично я бы предложил бы воздержаться от любой модификации кода Чена, подставить в начало вашей программы регистровые объявления символов var10/var11/var20/lc, и отказаться от макроса в принципе, тем более что авээровский макропроцессор более чем убог. Все эти мувы туда-сюда не несут практического смысла. Проще или сразу назначить нужные регистры, или забить на асм, и писать на сях, или микропаскале - если уж восхотелось красивого синтаксиса.
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 05.11.2011, 15:33 | ||
при вбивании в неё значений из первой (A4*02) выдала ту же фигню что и первая хотя первая была закоменчена. обратное тоже верно - множители второй прекрасно считаются в первом вызове. то есть выше какого значения процедура начинает выдавать мусор трассировка. ничего не прошивал
0
|
||
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
|
| 05.11.2011, 15:39 | |
|
Верно же всё. Вы пользуетесь процедурой mul08s, и умножаете -36 на 2. Получается -72, 0но же ff48, что же вы хотите? Пользуйтесь беззнаковым умножением. Если вы хотите, чтобы ваше a4 воспринималось как 164, а не как -36.
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 05.11.2011, 15:53 | ||
Спасибо! а нижнюю функцию могу выкинуть? за ненадобностью.
0
|
||
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
|
| 05.11.2011, 17:11 | |
|
Можно выкинуть.
0
|
|
| 05.11.2011, 17:11 | |
|
Помогаю со студенческими работами здесь
19
Сложение двухбайтовых чисел с помощью команды DAD Не понимаю, как сделать сортировку двухбайтовых чисел Переписать элементы одномерного массива целых двухбайтовых чисел A Найти сумму и произведение данных целых двухбайтовых чисел Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|