Может ли кто-нибудь дать мне идею простого преобразования двоичного кода (base2) в десятичный (base10)?
Решение 1
///////////////////////////////////////////////////////////////////////// // преобразование 32-битного base2 в 32-битный base10 // // максимальное число = 99 999 999, возвращает -1 при большем значении // /////////////////////////////////////////////////////////////////////////
function Base10(Base2:Integer) : Integer; assembler; asm
cmp eax,100000000 // проверка максимального значения jb @1 // значение в пределах допустимого mov eax,-1 // флаг ошибки jmp @exit // выход если -1@1:
push ebx // сохранение регистров push esi xor esi,esi // результат = 0 mov ebx,10 // вычисление десятичного логарифма mov ecx,8 // преобразование по формуле 10^8-1@2:
mov edx,0 // удаление разницы div ebx // eax - целочисленное деление на 10, edx - остаток от деления на 10 add esi,edx // результат = результат + разность[I] ror esi,4 // перемещение разряда loop @2 // цикл для всех 8 разрядов mov eax,esi // результат функции pop esi // восстанавление регистров pop ebx@exit: end;