[an error occurred while processing this directive] [an error occurred while processing this directive]
Приблизительно так, экспромт.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Sdl 27 сентября 2001 г. 11:13
В ответ на: извините, не понял отправлено nvn 27 сентября 2001 г. 10:13

Через таблицу. кажется 33 байта.
table:
.db 0 ; 0b0000
.db 1 ; 0b0001
.db 1 ; 0b0010
.db 2 ; 0b0011
.db 1 ; 0b0100
.db 2 ; 0b0101
.db 2 ; 0b0110
.db 3 ; 0b0111
.db 1 ; 0b1000
.db 2 ; 0b1001
.db 2 ; 0b1010
.db 3 ; 0b1011
.db 2 ; 0b1100
.db 3 ; 0b1101
.db 3 ; 0b1110
.db 4 ; 0b1111

; r0 - исходный байт, на выходе в А - количество бит
count:
mov dptr, #table
mov a, r0
anl a, #00fh
movc a, @dprt+a
mov r1, a
mov a, r0
swap a
anl a, #00fh
movc a, @dptr+a
add a, r1
ret

Второй вариант - сдвигать байт через перенос и суммировать переносы, покороче, но по дольше.
Если подумать, то наверняка есть что-то и покрасивее.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru