Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Деление на i8051

18K
21 июня 2006 года
CeZium
2 / / 21.06.2006
Если кто сталкивался с реализацией деления 24х битных чисел с фиксированной точкой (2 байта целой части и байт дробной) либо целых 24-битных на этом контроллере, подскажите как под это приспособить его родную команду DIV (ведь не зря ж её ввели :) ).
Буду так же благодарен если найдётся алгоритм деления "столбиком" под это же.

P.S.: для земляков пиво :)
18K
25 июня 2006 года
aktivity
2 / / 27.04.2006
x делим на y и получаем x целое y остаток от деления.
в случае деления на 0 все биты устанавливаем в 1, так называемая
бесконечность.

if (y <> 0)
{
z = 0;
i = 0;
while (x >= y)
{
y = y * 2;
i = i + 1;
}
while (i <> 0)
{
y = y / 2;
if (x >= y)
{
x = x - y;
cf = 1;
}
else
{
cf = 0;
}
z = z * 2 + cf;
i = i - 1;
}
}
else
{
z = max;
x = max;
}
y = x;
x = z;
......................................................................................................
x - r6r7; y - r4r5
......................................................................................................
$nolist
;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;;
CSEG
;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;;
div_word:
push b
mov b,r2
push b
mov b,r3
push b
;****************************************************************************;
;if (y <> 0) }
mov a,r4
orl a,r5
jz div_word_if1_else
;............................................................................;
;z = 0;
mov r2,#00h
mov r3,#00h
;i = 0;
mov b,#00h
;while (x >= y) {
div_word_while1:
clr c
mov a,r6
subb a,r4
mov a,r7
subb a,r5
jc div_word_while1_end
;y = y * 2;
mov a,r4
add a,r4
mov r4,a
mov a,r5
addc a,r5
mov r5,a
;i = i + 1;
inc b
;}
jmp div_word_while1
;..........................................................................;
div_word_while1_end:
;while (i <> 0) {
div_word_while2:
mov a,b
jz div_word_while2_end
;y = y / 2;
clr c
mov a,r5
rrc a
mov r5,a
mov a,r4
rrc a
mov r4,a
;if (x >= y) {
clr c
mov a,r6
subb a,r4
mov a,r7
subb a,r5
jc div_word_while2_if1_else
;x := x - y;
clr c
mov a,r6
subb a,r4
mov r6,a
mov a,r7
subb a,r5
mov r7,a
;cf = 1;
setb c
;}
jmp div_word_while2_if1_end
;else
div_word_while2_if1_else:
;cf := 0;
clr c
;........................................................................;
div_word_while2_if1_end:
;z := z * 2 + cf;
mov a,r2
addc a,r2
mov r2,a
mov a,r3
addc a,r3
mov r3,a
;i = i - 1;
dec b
;}
jmp div_word_while2
;..........................................................................;
div_word_while2_end:
;}
jmp div_word_if1_end
;else {
div_word_if1_else:
;z = max;
mov r2,#0FFh
mov r3,#0FFh
;x = max;
mov r6,#0FFh
mov r7,#0FFh
;............................................................................;
div_word_if1_end:
;y = x;
mov a,r6
mov r4,a
mov a,r7
mov r5,a
;x = z;
mov a,r2
mov r6,a
mov a,r3
mov r7,a
;****************************************************************************;
pop b
mov r3,b
pop b
mov r2,b
pop b
ret
;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;;
; КОНЕЦ ;
;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;&#9618;;
$list

здесь 16 разрядное деление целых чисел, а впринципе можно хоть
256 бит определяется i.
с помощью команды div у меня неполучилось,
а так работает и неплохо.
Кстати алгоритм универсален можно делить хоть 24 бит на 8 бит и тд.
18K
25 июня 2006 года
aktivity
2 / / 27.04.2006
хм. текст фармотировал а отображается не форматировано.
242
25 июня 2006 года
Оlga
2.2K / / 04.02.2006
[quote=aktivity]хм. текст фармотировал а отображается не форматировано.[/quote]
при написании кода используй теги [ code ] [ /code ]. например:

 
Код:
void main(void)
{  
    printf("Hello world!")
}
14K
26 июня 2006 года
shoorick
48 / / 07.06.2006
ЗДЕСЬ я рассказывал как я когда-то делил на 580ВМ80 - может, пригодится :)
18K
28 июня 2006 года
CeZium
2 / / 21.06.2006
всем спасибо... без DIV оказалось написать достаточно просто (успел даже до появления первого ответа).
Но вот как к этому прикрутить DIV до сих пор не соображу.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог