Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 15:03

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 151 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11  След.
Автор Сообщение
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 03:17 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
LOOP сделал, по +LOOP возился долго, сделал только для положительных приращений, уже код занимает 48 байт, а условные переходы максимум на 63 байта :). Поэтому скорее всего вернусь на предыдущую реализацию, в которой работают все случаи, кроме n1=n2.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 09:16 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Ethereal писал(а):
oco писал(а):
Максимальное положительное 16-битное число - это 32767, 32768 - отрицательное, поэтому 1 раз, FFFF - это -1, поэтому тоже 1 раз

А вот теперь расскажи с помощью какой телепатии Форт-слова DO и LOOP
прочитают мои мысли и узнают, что написав параметры цикла я имел ввиду
именно знаковые числа ? Может я имел ввиду беззнаковые ?
Или последние уже поставлены вне закона ?

Нет, я имел ввиду именно беззнаковые 32768 и FFFF.

В Форте нет типов, поэтому содержимое любой ячейки мыслится как неизвестно знаковое оно или беззнаковое. Например, слово WITHIN работает правильно с обоими вариантами, единственное у него ограничение - оно требует, чтобы операнды были либо все знаковые, либо все беззнаковые.


Последний раз редактировалось Ethereal Пн авг 20, 2012 12:03, всего редактировалось 6 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 09:17 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
oco писал(а):
LOOP сделал, по +LOOP возился долго, сделал только для положительных приращений, уже код занимает 48 байт, а условные переходы максимум на 63 байта :). Поэтому скорее всего вернусь на предыдущую реализацию, в которой работают все случаи, кроме n1=n2.
Ты лучше попроси меня написать его для тебя под данный процессор. Я - типа Паганини на ассемблере. Мой любимый язык языки ... их много разных. А у тебя с ними не очень. :weep;


Последний раз редактировалось Ethereal Пн авг 20, 2012 15:55, всего редактировалось 5 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 11:55 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Не уверен, что этот вариант самый короткий, но зато он у меня получился
строго согласно стандарту и всяко короче твоих 48-и команд.
Код:
Пусть в регистрах находятся :
PRED_hi:PRED_lo - предел цикла
   I_hi:I_lo    - текущий счетчик цикла (индекс цикла)
PRIR_hi:PRIR_lo - приращение (взято с вершины стека)
TMP_hi:TMP_lo   - временная пара регистров

Реализуем самую букву стандарта Форта. Т.е. цикл должен завершаться, если
индекс цикла пересекает (в любом направлении) интервал предел-1..предел.
Будем считать, что нам не известно понимает ли программист параметры
цикла знаковыми или беззнаковыми.
Будем считать, что приращение может быть не только константой, но и
вычисляться внутри цикла, т.е может быть разным на разных оборотах цикла,
в том числе и разного знака.
Т.е. реализуем самый общий случай.
Тогда пусть +LOOP действует согласно такому алгоритму :

                add     I_lo, PRIR_lo           ;Сосчитаем новый
                adc     I_hi, PRIR_hi           ; индекс цикла
                movw    TMP_hi:TMP_lo, I_hi:I_lo
                sub     TMP_lo, PRED_lo
                sbc     TMP_hi, PRED_hi
                subi    TMP_hi, $80             ;TMP+=0x8000 или TMP-=0x8000
                cp      TMP_lo, PRIR_lo
                cpc     TMP_hi, PRIR_hi
                brvc    Цикл_продолжить         ;Случилось переполнение ?
Цикл_завершить:
Проверь код. Я его теоретически написал. Но он должен работать.
Если Атмел реализовала флаг переполнения согласно его абстрактному смыслу.
В алгоритме выше именно появление переполнения - признак окончания цикла.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 12:41 
Ethereal писал(а):
oco писал(а):
Максимальное положительное 16-битное число - это 32767, 32768 - отрицательное, поэтому 1 раз, FFFF - это -1, поэтому тоже 1 раз

А вот теперь расскажи с помощью какой телепатии Форт-слова DO и LOOP
прочитают мои мысли и узнают, что написав параметры цикла я имел ввиду
именно знаковые числа ? Может я имел ввиду беззнаковые ?

В данном случае телепатии не требуется как со стороны Форта, так и с вашей. А вот кое-какие общие представления о Форте лишними явно не будут. По умолчанию стек возвратов принимает в качестве аргументов числа со знаком. Нужно больше? Расширяйте систему.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 12:54 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Zinger писал(а):
По умолчанию стек возвратов принимает в качестве аргументов числа со знаком. Нужно больше? Расширяйте систему.
Ты сам-то понял что сказал ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 12:57 
Ethereal писал(а):
Zinger писал(а):
По умолчанию стек возвратов принимает в качестве аргументов числа со знаком. Нужно больше? Расширяйте систему.
Ты сам-то понял что сказал ?

Ещё бы, видимо, я просто не придал значение - кому. Учи матчасть.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 13:05 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Хорошо, будем разбирать эту тупизну.

"По умолчанию"
Каким стандартом зафиксировано это умолчание ?

"стек возвратов принимает ... числа со знаком"
Чем различается процесс принятия в стек числа со знаком и числа без знака ?

"стек возвратов принимает ... числа со знаком"
С каких пор адреса памяти (адреса возвратов) стали знаковыми ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 13:19 
О чём можно говорить, если ты даже не знаешь как найти максимальное значение определённого числа бит? Впрочем, это ситуацию я вроде бы исправил, предоставив методологию на предыдущей странице.
Касаемо необходимости чисел со знаком в роли аргументов для "do ... loop", это нужно хотя бы уже для идентификации направления следования цикла. Например:
: test -10 0 do i . -1 +loop ;

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


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 13:24 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Zinger писал(а):
Поскольку я не вижу перспективы для дальнейшего обсуждения, так как, очевидно, ничего кроме флуда здесь не намечается, то наилучшим решением считаю прекращение диалога.
Слив засчитан.

Хотя я чуть позже немножко прокомментирую. Но все больше для oco.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 13:31 
Ethereal писал(а):
Слив засчитан.

Идиот детектед.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 14:33 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7960
Благодарил (а): 25 раз.
Поблагодарили: 144 раз.
Вот только ругаться не надо, пожалуйста.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 15:36 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
О, пошли аргументы "сам дурак".
Оно конечно, ответить на три заданных мною выше вопроса было нечего.
Zinger писал(а):
О чём можно говорить, если ты даже не знаешь как найти максимальное значение определённого числа бит? Впрочем, это ситуацию я вроде бы исправил, предоставив методологию на предыдущей странице.
Ага, эта методология выглядит точно первоклашка взялся объяснять профессору таблицу умножения, полагая что последний не в курсе дела.
Ты лучше тот код, который я для +LOOP предложил, разбери. Когда поймешь почему в нем переполнение означает конец цикла, тогда и будешь судить о том что я понимаю, а что нет. Но я не уверен, что тебе это по уму.

Кстати, в той "методологии" что ты типа дал, в ней вот эта фраза
Zinger писал(а):
Если учитывать, что используется дополнительный код, а именно он, несомненно, и используется, то такое число будет отрицательным, - кода речь идёт не о беззнаковых числах, - так как единица в старшем разряде означает "минус".
ну с полным отвалом башки. Ведь единственная в ней оговорка "кода речь идёт не о беззнаковых числах" уже разрушает всю логику предложения. Откуда известно, что речь идет не о беззнаковых числах ? Компьютеру, например, это точно не известно. Все two's complement архитектуры складывают, вычитают и даже сравнивают не зная имеют они дело со знаковыми или беззнаковыми числами. Это знает только программист. Он и выбирает применить ли после сравнения cmp ax, bx (к примеру для i80x86) беззнаковые ветвления ja/jae/jb/jbe или знаковые jg/jge/jl/jle. Т.е. на что ему после сравнения обращать внимание - на заем или на переполнение. Только программист знает знаковые это числа или беззнаковые. Не компьютер. Для компьютера даже и команда сравнения чисел cmp - есть команда сравнения чисел неизвестно знаковых или нет. Поэтому когда я пишу в тексте программы 32768, для компьютера это только 0x8000 и более ничего. Он не знает 32768 я имел ввиду или -32768. И именно на таких дополнительных до двух архитектурах был создан Форт. Поэтому в Форте нет типов. Поэтому Форт оперирует ячейками. Поэтому ему не известно в ячейке знаковое или беззнаковое. Ну не знает Форт 32768 знаковое или нет. Поэтому и цикл 32768 0 DO LOOP и цикл -32768 0 DO LOOP для него НИЧЕМ не отличаются. Он выполняет их 32768 раз и все. Для варианта 32768 0 DO LOOP это совершенно логично. А для варианта -32768 0 DO LOOP нет. Ну так в дополнительных до двух архитектурах или корректно в обоих случаях, или только для знаковых или только для беззнаковых. Но в одном из двух случаев корректно всегда. И осталась эта безтиповость в Форте именно от его заточенности под архитектуру дополнительную до двух. А теперь ты, ссылаясь на ту-же самую архитектуру начинаешь втирать всем нечто полностью противоположное. Про то, что в "дополнительном коде" 32768 от природы отрицательное.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 16:08 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Ethereal писал(а):
Не уверен, что этот вариант самый короткий, но зато он у меня получился
строго согласно стандарту и всяко короче твоих 48-и команд.
Код:
Пусть в регистрах находятся :
PRED_hi:PRED_lo - предел цикла
   I_hi:I_lo    - текущий счетчик цикла (индекс цикла)
PRIR_hi:PRIR_lo - приращение (взято с вершины стека)
TMP_hi:TMP_lo   - временная пара регистров

Реализуем самую букву стандарта Форта. Т.е. цикл должен завершаться, если
индекс цикла пересекает (в любом направлении) интервал предел-1..предел.
Будем считать, что нам не известно понимает ли программист параметры
цикла знаковыми или беззнаковыми.
Будем считать, что приращение может быть не только константой, но и
вычисляться внутри цикла, т.е может быть разным на разных оборотах цикла,
в том числе и разного знака.
Т.е. реализуем самый общий случай.
Тогда пусть +LOOP действует согласно такому алгоритму :

                add     I_lo, PRIR_lo           ;Сосчитаем новый
                adc     I_hi, PRIR_hi           ; индекс цикла
                movw    TMP_hi:TMP_lo, I_hi:I_lo
                sub     TMP_lo, PRED_lo
                sbc     TMP_hi, PRED_hi
                subi    TMP_hi, $80             ;TMP+=0x8000 или TMP-=0x8000
                cp      TMP_lo, PRIR_lo
                cpc     TMP_hi, PRIR_hi
                brvc    Цикл_продолжить         ;Случилось переполнение ?
Цикл_завершить:
Проверь код. Я его теоретически написал. Но он должен работать.
Если Атмел реализовала флаг переполнения согласно его абстрактному смыслу.
В алгоритме выше именно появление переполнения - признак окончания цикла.


Смотрел реализацию +LOOP в SPF. Фактически тот же алгоритм, что и у тебя. Попробую. Объясни только, зачем 0x8000 отнимать?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Очередной AVRForth
СообщениеДобавлено: Пн авг 20, 2012 16:10 
Не в сети

Зарегистрирован: Ср май 10, 2006 13:51
Сообщения: 202
Благодарил (а): 3 раз.
Поблагодарили: 4 раз.
Zinger писал(а):
В данном случае телепатии не требуется как со стороны Форта, так и с вашей. А вот кое-какие общие представления о Форте лишними явно не будут. По умолчанию стек возвратов принимает в качестве аргументов числа со знаком. Нужно больше? Расширяйте систему.

Стеку возвратов все равно, какие аргументы принимать :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 151 ]  На страницу Пред.  1 ... 5, 6, 7, 8, 9, 10, 11  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


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

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


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB