Divide overflow em assembly

Myself*

Power Member
Boa noite...

Ao executar o programa em assembly, da me o erro divide overflow. Não é problema de divisão por 0 nem o resultado excede os 8 bits. Abaixo, segue o codigo onde está o erro.

Código:
imprime:
   mov di, c_a ; di = endereço alvo
   mov cl, 0x30 ; cl = '0'
   mov ax, [copia_anterior] ; ax = valor a se conv
converte:
   mov bl, 10
   idiv bl  ; divide por 10 -> AL = ax/10 || AH = ax%10
   add ah, cl ; ah = ax%10 + '0'
   mov byte[di], ah ; guarda o 1o caracter
   mov ah, 0 ; força ah a 0 pra aproveitar o valor de al usando assim ax
   inc di ; di ++
   cmp al, 0
   jg converte
   mov byte[di], 0 ; termina a String (guarda '\0')
   ; Agora vamos colocar a String pela ordem correcta
   mov si, c_a ; si = inicio da String || di já esta no fim da String
reverse:
   cmp si, di
   jae endReverse
   mov bl, byte[si]  ; aux = [si]
   mov bh, byte[di]
   mov byte[di], bl
   mov byte[si], bh
   inc si ; si ++
   dec di ; di --
   jmp reverse
endReverse:

Nota: o valor de ax é 7 e o erro aparece na linha onde está idiv.


Ajudem-me, por favor!
 
Faz uma coisa,
faz um printInt antes de mas ainda dentro do ciclo
Código:
converte:
;printInt
mov bl, 10
idiv bl
testa com um numero e diz quantas vezes ele faz printInt e posta aki esses resultados (nr testado e nr de vezes printInt)
 
Experimenta a divisão por outro número, por exemplo dividir por 2 fazendo um shift e não plo comando idiv e vê se resulta.


Eu já não me recordo muito de assembly, lamento n poder ajudar mais.. :(
 
Back
Topo