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
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?