Równanie w asemblerze

0

Witam muszę napisać poniższe równanie w asemblerze , żeby chodziło pod emu 8086?

1/((a-b)*(b-a))

Ja napisałem coś takiego ale wychodzą mi złe wyniki. Macie jakiś pomysł?

mov ax,5
sub ax,2
mov bx,2
sub bx,5
imul bx
mov bx,1
xchg ax,bx
idiv bx
mov cx,ax

0

no, nie obliczysz tego używając arytmetyki całkowitej - to tak jakbyś chciał pokazać na palcach liczbę 1/3.
nie wiem, czy na emu x86 mozna używać FPU, jesli tak, to kod wyglądać moze tak:
[zakładamy w tym kodzie, ze zmienne A,B,C sa float-ami.]

    
1.    fld1
2.    fld dword ptr[A]    //A
3.    fsub dword ptr[B] //B
4.    fmul st(0),st(0)
5.    fdivp st(1),st(0)
6.    fstp dword ptr[C]  //wynik do c

co do Twojego kodu, jeśli już coś dzielisz, to zawsze przedtem zeruj rejest dx - to MSB liczby dzielonej, jesli masz tam śmietnik, to z dzielenia wyjdzie smietnik. Druga sprawa, jesli jednak musi to być wykonane na intach, to mozesz zamiast jedynki podstawić liczbę 1000.
np. 1/4 = 0.25 ( ale ax=0), wiec niech bedzie 1000/4 = 250 i w ax to samo - traktujesz później tysiące jako jednostki, wszystko co mniejsze od 1000 jako resztę ułamkową.

1 użytkowników online, w tym zalogowanych: 0, gości: 1