roboforum.ru

Технический форум по робототехнике.


Возможно ли сравнение 32-разрядных чисел

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Возможно ли сравнение 32-разрядных чисел

Сообщение GrayHunter » 12 апр 2011, 09:33

Подскажите, пожалуйста (очень желательно на примерах) как сравнить и как очистить/обнулить 32-разрядное число (3 байта) на Ассемблере?

Прибавлять единицу (1) уже умею:
Код: Выделить всёРазвернуть
lds Temp1, Time
lds Temp2, Time+1
lds Temp3, Time+2
ldi Temp4, 1
add Temp1, Temp4
clr Temp4
adc Temp2, Temp4
adc Temp3, Temp4
sts Time, Temp1
sts Time+1, Temp2
sts Time+2, Temp3
GrayHunter
 
Сообщения: 231
Зарегистрирован: 06 июн 2009, 20:42
Откуда: Москва

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение blindman » 12 апр 2011, 09:41

32 разрядное число - это 4 байта
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение GrayHunter » 12 апр 2011, 09:59

имеется то, что в коде выше - трёх байтовый "Time". Нужно его сравнивать с другим числом, чтобы когда он ("Time") будет равен или больше числу "86400", то чтобы происходило его ("Time") обнуление и, например, "ldi Temp_5, 1".

Уже всё написал, кроме этого момента. Подскажите, пожалуйста.
GrayHunter
 
Сообщения: 231
Зарегистрирован: 06 июн 2009, 20:42
Откуда: Москва

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение blindman » 12 апр 2011, 10:00

Точно так же как со сложением, только вместо add/adc - cp/cpc.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение GrayHunter » 12 апр 2011, 10:07

Сравнение:
а как мне число "86400" записать? Тоже в 3-х байтовую переменную? Если да, то как это число в неё поместить?
(буду очень рад, если напишите примеры - уже столько искал, но всё бесполезно)

Очищение/обнуление:
правильно ли я понял, что надо так:
Код: Выделить всёРазвернуть
ldi Temp, 0
sts Time, Temp
sts Time+1, Temp
sts Time+2, Temp
GrayHunter
 
Сообщения: 231
Зарегистрирован: 06 июн 2009, 20:42
Откуда: Москва

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение blindman » 12 апр 2011, 10:11

Переведи в 16-ричную или двоичную систему, разбей на байты.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение GrayHunter » 12 апр 2011, 10:15

Боюсь показаться нахлебником, но я честно страрался и во всём, кроме сравнения и обнуления 3-х байтовых переменных, разобрался. Пытался, но не получается, мало информации (точнее, примеров). Пожалуйста, помогите с кодом этого момента, а то жалко, что программа из 300 строк простаивает... (уверен, что опытные быстро с этим справятся, а я уже четвёртые сутки мучаюсь)
GrayHunter
 
Сообщения: 231
Зарегистрирован: 06 июн 2009, 20:42
Откуда: Москва

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Radist » 12 апр 2011, 10:17

Ищете примеры для атмела, application notes, - там все есть
пусть одно число лежит в этих регистрах R19:R18:R17:R16
второе в этих R23:R22:R21:R20
Обнуляем первое число
clr r16
clr r17
clr r18
clr r19
записываем туда 86400 (15180 HEX)
ldi r16, $80
ldi r17, $51
ldi r18, $01
сравниваем второе число с первым
cp r20, r16
cpc r21, r17
cpc r22, r18
cpc r23, r19
Затем делается условный переход по анализам флагов Z и/или C
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение GrayHunter » 12 апр 2011, 10:22

Спасибо Большое.

Маленький момент хотел бы уточнить:
записываем туда 86400 (15180 HEX)
ldi r16, $80
ldi r17, $51
ldi r18, $01

а r19?
ведь мы его используем в сравнении...может в него что-то записать? а то мало ли кто знает, что там... или там по-умолчанию ноль (0)?
GrayHunter
 
Сообщения: 231
Зарегистрирован: 06 июн 2009, 20:42
Откуда: Москва

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Radist » 12 апр 2011, 10:31

Нет никакого умолчания. А ноль там потому, что строчкой выше я его туда записал. И он там будет до тех пор, пока я или еще кто туда не запишет что-нибудь другое. Или выключит питание.
Аватара пользователя
Radist
 
Сообщения: 2253
Зарегистрирован: 01 июл 2009, 08:59
Откуда: Екатеринбург
прог. языки: асемблер AVR

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение GrayHunter » 12 апр 2011, 10:47

Не заметил :oops:

СПАСИБО :good:
GrayHunter
 
Сообщения: 231
Зарегистрирован: 06 июн 2009, 20:42
Откуда: Москва

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение dccharacter » 12 апр 2011, 10:50

ребят, я традиционно (заранее ведь знаю!!!) не в тему.

но. есть тип - long int. Это 4 байта. обнулить его можно присвоив переменной ноль. Сравнить можно, сравнив две переменные такого типа. Переполнение по третьему байту можно сделать, применив маску.

Код: Выделить всёРазвернуть
volatile long int a=100;
volatile long int b = 27089;
long int mask = 0x00FFFFFF;

while(a<b)
{
a = (a++)&mask;
}
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение boez » 12 апр 2011, 10:56

dccharacter писал(а):ребят, я традиционно (заранее ведь знаю!!!) не в тему

ГрейХантер принципиально хочет на асме. Ну ладно, может мы хоть толпой его убедим, что си рулит :)
Я там в исходной теме немножко ответил, до того как заметил эту. Ну тут я смотрю тоже ответили.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение dccharacter » 12 апр 2011, 10:57

А ЧО, В АСМЕ НЕТ ТИПОВ???
мааааааать
бежим все, врассыпную!!!!!!!!
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Возможно ли сравнение 32-разрядных чисел

Сообщение Angel71 » 12 апр 2011, 10:58

о прошлогодних птичках. простенький пример:
Код: Выделить всёРазвернуть
uint32_t a = 100, b = 100, c = 0;
if(a == b) c = 200;

сколько вам понадобиться времени, чтоб на асме переделать вот в такой код?
Код: Выделить всёРазвернуть
int a = -100, b = 100, c = 0;
if(a < b) c = 99;

а если это будет не пара строчек, а сотни или тысячи? вы просто задумайтесь, на что вы тратите столько времени, когда для ваших текущих задач асм не даст никаких преимуществ. за то время, пока вы узнаёте, как 2 числа сравнить и присвоить легко можно было весь каркас программы написать, а может и больше.
Последний раз редактировалось Angel71 12 апр 2011, 11:00, всего редактировалось 1 раз.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

След.

Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30