Witam,
Mam problem z konwersją liczby zakodowanej w formacie BCD na liczbę binarną, typ word - robię wszystko przez wstawki assemblerowe w Delphi. Zamianę na BCD już mam:
function bin2bcd(a:word):word;assembler;
asm
mov bx,a; //w bx jest moja liczba
mov ax,0 //zerowanie ax
mov ecx,4 //petla 4 razy - liczba word jest 2 bajtowa
mov si,10 //zmienna si -> dzielnik
@petla:mov dx,0 //zerowanie dx
xchg ax,bx //teraz moja liczba jest w ax
div si //dziele przez DX:AX przez SI -> reszta jest w DX, calkowita w AX
xchg ax,bx //znow moja liczba jest w bx
add ax,dx //dodaje reszte z dzielenia do liczby
ror ax,4 //przekrecam liczbe o 4 bity
loop @petla //wykonuje petle CX razy
end;
Jednak nadal nie mogę znaleźć prostego sposobu na zamianę z powrotem na liczbę binarną... Kombinowałem już trochę i na razie wymyśliłem, że mogę zrobić coś takiego, jednak nie przyniosło mi to rozwiązania...:
;Zakładam że mam liczbę w BCD w rejestrze BX
mov ax,bx
and ax,15 ;"wyjmuję" z liczby cyfrę jedności
add dx,ax ;dodaję cyfrę jedności do wyniku
rol bx,4 ;przekręcam liczbę o 4 bity
Jakiś pomysł?