Зарегистрирован: Вт сен 07, 2010 02:23:03 Сообщений: 16
Рейтинг сообщения:0
всем привет. в написании программ я новичок, пишу на асме, и столкнулся с такой проблемой: иногда бывает надо вывести на индикацию какое либо число - но это понятно: можно сделать массив, иногда нужно вывести число от одного до двадцати: это тоже рашаемо... а если потребуется вывести число от одного и до ста? подскажите каким макаром можно написать код чтоб, скажем в неком регистре лежит число 3C (60) а надо чтоб программа при обращении к этому регистру выплевовала на индикацию число 60?
если на светодиодных семисегментных индикаторах, то очень просто. разлаживаешь свое число на единицы и десятки. (сотни, тысячи, и т.д. если нужно) в твоем примере 3с разложится на 0 и 6 создаешь знакогенератор выводишь на первое знакоместо из знакогенератора десятки (6), на второе единицы (0) любуешься.
асм не знаю. но наверное как и на С. делим число на десять. целая часть результата - десятки. из числа вычитаем десятки, получаем единицы. ваш пример. делим 3с на 10, получаем 6 (десятки). из 3с вычитаем 60 (десятки), получаем 0(единицы)
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 цикла.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения