Assembler - mnożenie wielobajtowe

0

Witam,

mam problem z mnożeniem. Gdyby ktoś mógł mnie oświecić gdzie popełniam błąd.. byłbym wdzięczny.
A oto fragment kodu "odpowiedzialny" za mnożenie:

        mov cx,5  ;zewnetrzny licznik
        mov si,4  ;licznik dla 2 zmiennej
        mov di,9  ;licznik dla wyniku
        push cx
        push si
        clc

zewnetrzna:
        push cx ; I)5 II)4
        push si ; I)4 II)3

        mov dl,[zm2+si] ; I)5bajt

        mov cx,5  ;I/II/III/IV/V) cx=5
        mov si,4  ;I/II/III/IV/V) si=4

        petla2:
              mov al,[zm1+si]  ; I)5bajt II) 4bajt
              mul dl           ; I)5b*5b II)5b*4b
              adc [wyn+di],al  ; I)9b+al II)8b+al
              dec di           ; I)8 II)7
              adc [wyn+di],ah  ; I)8b+ah II)7b+ah
              dec si           ; I)3 II)2
       loop petla2

pop si  ; I)4
pop cx  ; I)5
dec si  ; I)3
loop zewnetrzna  
 
0

Problem - to znaczy? Co jest nie tak?

1

emu8086 w dłoń i debuguj krok po kroku.

0
Proxima napisał(a):

Problem - to znaczy? Co jest nie tak?

Źle mnoży. A wydaje mi się, że robię to okey ;\

Shalom napisał(a):

emu8086 w dłoń i debuguj krok po kroku.

Próbowałem już uruchomić wiele debbugerów i każdy odmawiał współpracy z plikami FASM'owymi. Spróbuje Twojego debbugera :) Dzięki za odpowiedź

EDIT: No w końcu działający debbuger :) dziękuje bardzo

0

.

0
J0ras napisał(a):

jak mnożysz rejestr 1 bajtowy razy 1 bajtowy to otrzymujesz wynik 2 bajtowy czyli al jest jedno bajtowy to wynik będzie w ax

No tak mnoże 1 bajtowy * 1 bajtowy i wynik zapisuje się w AX i później młodsze 8bitów dodaje do ostatniego bajtu zmiennej wynik(10Bajt) a starsze 8 bitów w ah dodaje do 9bajtu wyniku. Przynajmniej wydaje mi się, że tak robie...

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