Страница 1 из 1
декодер для индикации чисел
Добавлено: Вт сен 14, 2010 00:31:49
yokimbe
всем привет. в написании программ я новичок, пишу на асме, и столкнулся с такой проблемой:
иногда бывает надо вывести на индикацию какое либо число - но это понятно: можно сделать массив,
иногда нужно вывести число от одного до двадцати: это тоже рашаемо...
а если потребуется вывести число от одного и до ста? подскажите каким макаром
можно написать код чтоб, скажем в неком регистре лежит число 3C (60) а надо чтоб
программа при обращении к этому регистру выплевовала на индикацию число 60?
Re: декодер для индикации чисел
Добавлено: Вт сен 14, 2010 01:25:43
neon-f
индикация на чем?
если на светодиодных семисегментных индикаторах, то очень просто.
разлаживаешь свое число на единицы и десятки. (сотни, тысячи, и т.д. если нужно) в твоем примере 3с разложится на 0 и 6
создаешь знакогенератор
выводишь на первое знакоместо из знакогенератора десятки (6), на второе единицы (0)
любуешься.
Re: декодер для индикации чисел
Добавлено: Вт сен 14, 2010 01:44:52
yokimbe
а чуть по подробнее можно? как разложить 3с на 6 и на 0?
Re: декодер для индикации чисел
Добавлено: Вт сен 14, 2010 01:53:28
neon-f
асм не знаю. но наверное как и на С.
делим число на десять. целая часть результата - десятки.
из числа вычитаем десятки, получаем единицы.
ваш пример.
делим 3с на 10, получаем 6 (десятки).
из 3с вычитаем 60 (десятки), получаем 0(единицы)
Re: декодер для индикации чисел
Добавлено: Вт сен 14, 2010 02:47:29
yokimbe
все понял, спасибо

Re: декодер для индикации чисел
Добавлено: Вт сен 14, 2010 09:21:25
Engineer_Keen
Когда-то написал такую штуку:
Код: Выделить всё
HexToDec:
CLR V100 ;clear 100's
CLR V10 ;clear 10's
X100: CPI TEMP,0x64 ;compare with 100
BRLO X10 ;jump to x10 if less
SUBI TEMP,0x64 ;sub 100
INC V100 ;inc V100
RJMP X100
X10: CPI TEMP,0x0A ;compare with 10
BRLO X1 ;jump to x1 if less
SUBI TEMP,0x0A ;sub 10 and repeat
INC V10 ;inc V10
RJMP X10
X1: MOV V1,TEMP ;copy remain to V1
RET
V100,V10 и V1 - регистры сотен, десяток и единиц. Входной параметр - temp. Недостаток в том, что время выполнения зависит от входного параметра: минимум (при 0) - 10 циклов, максимум (255) - 62 цикла.
Re: декодер для индикации чисел
Добавлено: Вт сен 14, 2010 22:51:06
Jack_A
Engineer_Keen писал(а):
X100: CPI TEMP,0x64 ;compare with 100
BRLO X10 ;jump to x10 if less
SUBI TEMP,0x64 ;sub 100
INC V100 ;inc V100
RJMP X100
X10: . . . .
; У меня работает быстрее :
Код: Выделить всё
. . . . . . . . . . .
X100: SUBI TEMP,100
BRCS X10
INC V100
RJMP X100
X10: SUBI TEMP,-100
В цикле только SUBI вместо CMPI -- SUBI
Re: декодер для индикации чисел
Добавлено: Чт сен 16, 2010 09:16:00
Rimsky
Здесь поглядите, может чем поможет.

Re: декодер для индикации чисел
Добавлено: Чт сен 16, 2010 10:02:10
Engineer_Keen
Jack_A писал(а): У меня работает быстрее :
Зачетно! Если перевести числа от 0 до 255 - разница в 730 циклов. Хотя при некоторых числах (0 например) у меня на 2 цикла быстрее

Re: декодер для индикации чисел
Добавлено: Чт сен 16, 2010 23:26:45
Jack_A
Engineer_Keen писал(а):Jack_A писал(а): У меня работает быстрее :
Зачетно! Если перевести числа от 0 до 255 - разница в 730 циклов. Хотя при некоторых числах (0 например) у меня на 2 цикла быстрее

За честное признание - решпект и уважуха
