Asembler błąd przy dzieleniu

0

Witam mam problem z dzieleniem program dzieli dx/bx gdzie powinien ax/bx

Proszę o pomoc.

;=============================================================================;
;                                                                             ;
; Plik           : arch1-7c.asm                                               ;
; Format         : COM                                                        ;

; Uwagi          : Program obliczajacy wzor: (b*b-4*a)/d                      ;
;                                                                             ;
;=============================================================================;
 
				.MODEL  TINY
				
a               EQU     20
b               EQU     10
d               EQU     3

Kod             SEGMENT


                ORG    100h
                ASSUME  CS:Kod, DS:Kod, SS:Kod

Poczatek:
		xor 	ax, ax
		xor 	bx, bx
		mov     al, b			;al = b
		mul     al			;ax= al * bl
                mov     bx, a           	;bx = a
                shl     bx, 2	        	;bx*2*2
                sub     ax, bx			;ax = ax - bx
                mov	bx, d			;bx = d	
		div     bx			;ax/bx
                mov     Wynik, al       
                
Wynik           DB      ?

Koniec:         mov     ax, 4C00h
                int     21h

Kod             ENDS

                END     poczatek
2
  1. Ale wiesz że div dzieli int/int i wynik masz w al a resztę z dzielenia w ah? Bo ten twój kod zadziała poprawnie tylko w szczególnej sytuacji kiedy dzielenie jest bez reszty.
  2. W ogóle to nie ma sensu bo nigdzie nie robisz mov bl, b więc efektywnie twoje mul al ;ax= al * bl daje 0
  3. Zelecam nauczyć sie korzystać z debuggera, dla 8086 możesz użyć emu8086.
0

Wiem że div dzieli int/int i to może zostać

czyli wystarczy że przed mov al, b wstawię mov bl, b

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