1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.
  2. Informação: Pela 0:30 desta Sexta-feira (9 de Dezembro, 23:30 de Quinta-feira nos Açores) o Fórum e restantes sites da ZWAME vão estar offline para manutenção durante cerca de 1h30.
    Se necessário faremos actualizações via Twitter e Facebook.
    Remover anúncio

Divide overflow em assembly

Discussão em 'Programação' iniciada por Myself*, 27 de Maio de 2008. (Respostas: 3; Visualizações: 1026)

  1. Myself*

    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!
     
  2. k cena estranha... parece estar bem.
    alguém consegue ajudar???
     
  3. rj.rodrigues

    rj.rodrigues Power Member

    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)
     
  4. Capt_Malagueta

    Capt_Malagueta Power Member

    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.. :(
     

Partilhar esta Página