Problema con Ensamblador y entrada de nº por teclado

Me estoy volviendo loco! Tengo un problema de lenguaje ensamblador para Intel que me ha llevado toda la noche, y sigo sin encontrarle solución. El caso es que estoy seguro de q es algo muuuy sencillo, pero no veo como hacerlo [triston]

El tema es el siguiente... Quiero leer por teclado un número (cuidado, que sea un número y no un caracter), que me lo muestre por pantalla y finalmente que me lo guarde en donde sea para luego yo poder operar con ese número.

Una vez solucionado este problema, creo q podré solucionar sin ninguna complicación el programa que pretendo hacer. En concreto lo que quiero es:
1º Entrar por teclado un número y guardarlo en posy
2º Imprimir por pantalla a partir de la columna 30 hasta la 49, y en la fila que me indique el número que guardé en posy, un "vector" de caracteres 'O' (ojo, que realmente no es un vector, pq lo escribo posición a posición, y ojo tb q cuando digo 'O' me refiero a la letra o (aunque no tiene mayor importancia))


A continuación el código del programa:

.MODEL SMALL
.STACK 200h

.DATA
car DB 'O' ;el caracter que quiero imprimir por pantalla
posy DB ? ;filas, hay 25 en pantalla (0-24)
posx DB ? ;columnas, hay 80 en pantalla (0-79)

.CODE

Principal PROC
mov ax,@DATA
mov ds,ax
push ax ;Llamo a subrutina que pretende
call Fila_comienzo ;introducir numero por teclado
pop ax
;mov al,3 ;Si activo estas 2 instrucciones vemos que lo unico
;mov posy,al ;que falla es la captura por teclado del numero
push ax ;Llamo a subrut que imprime posición a
call Impr_fila ;posicion los 20 caracteres 'O'
pop ax
mov ah,4Ch ;Salgo del programa
int 21h
Principal ENDP


Fila_comienzo PROC ;La subrutina que no funciona
mov ah,01h ;Llamo al operativo, funcion 21h, servicio 1
int 21h
mov posy,al
ret
Fila_comienzo ENDP


Impr_fila PROC
;Desde columna 30 hasta 49 voy llamando a PosicionaImprime
mov bl,30
ACTUALIZA_COLUMNA:
mov posx,bl
push ax
call PosicionaImprime
pop ax
inc bl
cmp bl,50
jl ACTUALIZA_COLUMNA
ret
Impr_fila ENDP


PosicionaImprime PROC
;Se coloca en la posicion posx,posy
mov dl,posx
mov dh,posy
mov bh,0
mov ah,2
int 10h
;Imprime caracter en posx,posy
mov al,car
mov cx,1
mov bh,0
mov ah,0Ah
int 10h
ret
PosicionaImprime ENDP

END Principal


Supongo q mi error está en el servicio de la función 21h, pero no lo tengo nada claro :?
¿Alguna aclaración?
ojala te pudiese ayudar tio pero solo estoy en 1º de informatica y de momento tengo de sobra con el c++ xD


por cierto, es muy complicado el lenguaje ensamblador??¿


salu2
Chungo no es, lo q tienes q tener en cuenta muchas más cosas a la vez q con C o basic o lo que sea.

Por ejemplo, lo q me pasa a mi es q no sé como meterle un dato por teclado y q me lo reconozca como un número :( Esto en cualquier lenguaje sería fácil de programar.
2 respuestas