Hola,
Hace unos días posteé un código en un foro que puede serte de utilidad. Imprime la suma de 2 números. Lo posteé en:
http://www.programmingforums.org/thread30456.html
Lo útil del código es la parte que transforma un entero sin signo en una cadena de caracteres. Como quien preguntaba usaba el servicio 9h de la interrupción 21h, la cadena la terminaba con el carácter '$'. Puedes finalizarla con cero o con lo que prefieras. No soluciona directamente tu pregunta, pero te puede ayudar bastante. Si pese a este código no solucionas tu problema házmelo saber y te vuelvo a contestar. Ahí va el código:
.model small
.stack 248
.data
num1 db 12
num2 db 13
;Quien preguntaba usaba bytes.
;podría haber usado palabras: num1 dw 12...
mystring db 40 dup(?) ;I need room for the target string
;Necesito espacio para la cadena de destino.
.code
start:
mov ax, @data
mov ds, ax
xor ax, ax
;Como quien preguntaba usaba bytes, primero pongo la palabra a cero
;Ahora opero con el byte de menor peso.
mov al, num1
add al, num2
;Entre aquí...
mov bx, offset mystring
call inttostr
mov dx, offset mystring
printing:
mov ah, 09h
int 21h
;...y aquí, podrías crear un bucle
mov ax, 4c00h
int 21h
inttostr:
;In bx the offset to the target string
;In ax the unsigned integer to convert to string
;It converts an unsigned integer to an ascii string
;En bx el desplazamiento a la cadena de destino.
;En ax el entero sin signo a convertir a cadena
;Convierte un entero sin signo en una cadena ascii.
push ax
push bx
push cx
push dx
push si
xor cx, cx
xor dx, dx
mov si, 10
label2:
;I divide the number by 10 repeatedly
; and I put the remainders in the stack.
;Divido el número entre 10 repetidamente
;Pongo los restos (dx) en la pila. Recuerda que en ax queda el resultado
cmp ax, 10
jb label1
div si
push dx
inc cx
jmp label2
label1:
push ax
inc cx
label3:
;I retrive the numbers in the stack and
;I add to them the ascii value for '0' (character).
;Recupero los números que hay en la pila.
;Si el número era 123. Saldrán de la pila con el orden 1, 2, 3.
;En cx tengo la cantidad de números que tengo que recuperar
;Les sumo el valor ascii del carácter '0' (cero).
pop dx
add dx, '0'
mov byte ptr ds:[bx], dl
inc bx
dec cx
jnz label3
;The service 9h of the 21h interrupt prints a string
;terminated by the character '$'
;El servicio 9h de la interrupción 21h imprime una cadena
;terminada por el carácter '$'.
mov byte ptr ds:[bx], '$'
pop si
pop dx
pop cx
pop bx
pop ax
ret
end start
Espero que te sea útil. Si no lo acabas de solucionar házmelo saber.