Длинная арифметика

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Khelleos
Сообщения: 1
Зарегистрирован: 19 дек 2010, 10:28

Помогите, пожалуйста.У меня проблема(((. Нужно реализовать умножение длинных чисел(длинная арифметика). Не получается закончить внешний цикл(mul_2). Подскажите что-нибудь, что бы все работало как надо, пожалуйста!!!! Заранее благодарю!

void mul(unsigned short *arg1, unsigned short *arg2, unsigned short *res)
{
unsigned short b = 2;
__asm
{
mov edi, res // в edx указатель на элемент массива res
mov esi, arg1 // в esi указатель на элемент массива arg1
mov edx, arg2 // в esi указатель на элемент массива arg2
add edx, 62
mov ax, 0
mul_2:
mov ecx, 31 // ecx - счетчик внутреннего цикла
mov bx, word ptr [edx] // bx = b
mul_1:
add ax, word ptr [esi + 2 * ecx] // ax = a

mul bx // ax = ax * bx

mov word ptr [edi + 2 * ecx + 64], ax // res = ax
mov ax, dx

dec ecx // ecx = ecx + 1
cmp ecx, 0 // сравниваем ecx и 32
jge mul_1 // перейти, если меньше
sub edx, 2
//cmp [edx], 0
jge mul_2
}
}
Ответить