Ciao a tutti, stavo cercando di fare questo esercizio di assembler: chiede di calcolare il massimo comune divisore tra due numeri dati in memoria, applicando l'algoritmo di euclide; ho provato a implementarlo ma ho riscontrato un problema nella procedura. infatti alla riga:
codice:
jz fine
non so perchè ma quando bx diventa zero si pianta su questa istruzione! non vorrei aver sbagliato istruzione, ma mi pare che jz stia per "JUMP IF ZERO", quindi se bx è zero dovrebbe saltare all'etichetta fine! Invece rimane su quella istruzione e tipo va avanti fino a quando non da questo errore:
the emulator is halted.
Posto qua sotto tutto il programma sviluppato:
PS: programmo con emu86 su winXP.
codice:
.model small
.stack
.data

var1 dw 6
var2 dw 4
tmp  dw ?
mcd  dw 0

.code
.startup

mov ax, var1
mov bx, var2

call max_cm_div

mov mcd, ax

.exit

max_cm_div proc 
        
    ciclo: cmp bx, 0
           jz fine
           mov tmp, bx
           xor dx, dx
           div bx
           mov bx, dx
           mov ax, tmp
        jmp ciclo  
    
    fine:
endp

end