TASM Suma de numeros

Iniciado por lexoazul, 4 Marzo 2012, 04:36 AM

0 Miembros y 1 Visitante están viendo este tema.

lexoazul

Hola a todos tengo un problema con este codigo, resulta que capturo dos numeros del 0 al 9 y lo sumo, para luego mostrar el resultado.
El problema que tengo es que si el resultado de la suma es de dos dijitos solo me muestra el primero ejemplo:
si sumo 4 + 9 = 13
del resultado solo me muestra el 3
Nota: si el resultado de la suma es de un dijito lo muestra bien; ejemplo 3 + 3 = 6

agradezco mucho su atencion y de antemano Gracias a todos.
Les dejo aqui el codigo, por cierto el ensamblador que estoy utilizando es TASM



pila segment stack "stack"
   dw 64h dup(?)
pila ends
data segment
   var db "ingrese numero",13,10,"$"
   resul db 0
data ends
code segment
       assume cs:code, ds:data, ss:pila
   inicio:
       mov ax,data
       mov ds,ax
       mov cl,0
       jmp mostrar
   datos:
       cmp cl,2
       je formato
       mov ah,01h
       int 21h
       sub al,30h
       add resul,al
       inc cl
       jmp mostrar
   formato:
       mov ah,02h
       mov dl,10
       int 21h
       
       mov ah,02h
       mov dl,13
       int 21h
       jmp imprimir
   imprimir:
       mov ah,0
       mov al,resul
       mov cl,10
       div cl
       
       ;add al,30h
       ;add ah,30h
       mov bl,ah
       
       mov dl,al
       add dl,30h
       mov ah,02h ;IMPRIME DECENA
       int 21
       
       mov dl,bl
       add dl,30h
       mov ah,02h ;IMPRIME UNIDAD
       int 21h
       jmp fin
       
   mostrar:
       mov ah,09h
       mov dx, offset var
       int 21h
       jmp datos
   fin:
       mov ax,4c00h
       int 21h
code ends
end inicio
end datos
end formato
end imprimir
end mostrar
end fin



EI: juntando mensajes.

bueno de tanto checar el codigo no habia algun error; pero para que me funcionara tube que volver a copiar la parte de la etiqueta imprimir y ya funciono.
Nota: son varias veces que pasa que cuando escribo codigo no funciona pero si lo vuelvo a reescribir entonces ya funciona alguien tiene alguna idea porque????

Bueno gracias a todos y Saludos

Eternal Idol

No se ... asegurate de guardar bien los cambios y ensamblar antes de volver a probar.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

lexoazul

Cita de: Eternal Idol en  4 Marzo 2012, 10:44 AM
No se ... asegurate de guardar bien los cambios y ensamblar antes de volver a probar.

OK gracias Eternal Idol lo tendre muy encuenta
Ahora tengo un problema tratando del mismo tema de sumas de numeros resulta que quiero imprimir el resulttado de tres dijitos de una ssuma.
ejemplo:
55 + 175 + 112 = 342

bueno en este codigo no he realizado la suma solo estoy probando mostrar el resultado es decir el numero 342 pero me muestra 3R.

segui el mismo concepto de ir dividiendo entre 100,10 para ir mostrarndo cada caracter pero no funciona si alguien me pudiera decir que esta mal se lo agradeceria mucho.

SAludos y gracias a todos


pila segment stack "stack"
pila ends
data segment
    var dw 342
    ;var2 dw ?
data ends
code segment
        assume cs:code, ds:data, ss:pila
    inicio:
        mov ax,data
        mov ds,ax
       
        mov dx,0
        mov dx,var
        mov ax,var
        mov cl,100
        div cl
        mov bx,dx
       
        mov dl,al
        add dl,30h ;CENTENA
        mov ah,02h
        int 21h
        ;---------------------
       
        mov dx,0
        mov dx,bx
        mov ax,bx
        mov cl,10
        div cl
        mov bx,dx
       
        mov dl,al
        add dl,30h ;Decena
        mov ah,02h
        int 21h
        ;-----------------------------

        mov dl,bl
        add dl,30h
        mov ah,02h
        int 21
       
       
    fin:
        mov ax,4c00h
        int 21h
code ends
end inicio


_Enko

No te ha funcionado porque seguramente tienes que imprimer el codigo ASCII.
Es decir:

0 <> '0'

http://www.asciitable.com/

El valor ascci de 0 es 48, 1 es 49, 2 es 50 etc... hasta que 9 es 58

Saludos.

lexoazul

Cita de: _Enko en  7 Marzo 2012, 15:21 PM
No te ha funcionado porque seguramente tienes que imprimer el codigo ASCII.

Muchas gracias _Enko Tienes razon hay que tomar en cuenta el codigo ASCII, de hecho si lo tomo encuenta y antes de mandar a mostrar el caracter le sumo los 30H ó 48 Decimal, para que me muestre el codigo correspondiente al numero que tengo guardado despues de la divicion(entre 100,10).
pero volvere a hechar un vistazo al codigo.

De antemano Muchas gracias a todos por contestar