Programación General > ASM (Ensamblador)
Entrada Y Salida De Datos
Sotrono:
Hola como va?
Soy bastante novato con la programacion en ensamblador, estuve leyendo algunos textos y realize algunos programas muy basicos.
Que instrucciones me permiten escribir en pantalla algo o leer un dato ingresado por el teclado??
Super_G:
Para MS-DOS:
lo mas sencillo es usar las funciones de la int 21h
las funciones mas basicas:
AH = 01h: lee del teclado y guarda el Ascii en AL.
AH = 02h: escribe en pantalla el Ascii del contenido de DL.
AH = 09h: escribe en pantalla la cadena apuntada por DX, esta cadean debe terminar en '$'.
AH = 0Ah: lee del teclado a una cadena de longitud fija hasta que se pulse ENTER o se llegue al fina de la cadena. El primer elemento de la cadnea indica el tamaño de la cadena.
Dennis:
--- Cita de: "Super_G" --- Para MS-DOS:
lo mas sencillo es usar las funciones de la int 21h
las funciones mas basicas:
AH = 01h: lee del teclado y guarda el Ascii en AL.
AH = 02h: escribe en pantalla el Ascii del contenido de DL.
AH = 09h: escribe en pantalla la cadena apuntada por DX, esta cadean debe terminar en '$'.
AH = 0Ah: lee del teclado a una cadena de longitud fija hasta que se pulse ENTER o se llegue al fina de la cadena. El primer elemento de la cadnea indica el tamaño de la cadena.
--- Fin de la cita ---
Disculpa, yo tambien son novato en el lenguaje ensamblador. Mi duda es similar a lo que pediste respecto a escribir en pantalla, solo que y quiero leer un caracter desde el teclado.
He hecho algunos pequeños programas en el TASM42 de escribir un caracter y repetirlo con un ciclo. Ahora necesito leer desde el teclado un carcter, Super_G te respondio citando las interrupciones del Int 21h , en la cual me seria util AH = 01h que es la que pide un valor desde el teclado, mi duda es con respecto a como se utiliza tal interrupcion.
La has utilizado? si es asi entonces puedes ayudarme, necesito saber como la utilizo en el programa.
O si no, podria ayudarme a contactar a Super_G, ya que el te respondio a tu pregunta y el podria ayudarme dandome algun ejemplo.
Gracias. :hola:
REDD:
hola, te pongo un ejemplo
--- Citar ---.model small
.stack 100h
.code
start:
;Aqui lees el caracter y se guarda en al
mov ah,01
int 21h
;movemos el caracter al registro dl para despues visualizarlo
mov dl,al
;visualizamos lo que hay en dl mediante la funcion 02 de la int 21h
mov ah,02
int 21
;leemos otro caracter para alcanzar a ver lo que hicimos
mov ah,01
int 21h
;salida del programa
mov ax,4c00h
int 21h
end start
--- Fin de la cita ---
Logan:
Dennis te coloco aqui un programa que pide dos digitos desde teclado y muestra la suma resultante.
En este ejemplo se piden SOLO UN digito (puede ser un caracter si no fuera suma) a la vez, esto se hace usando la funcion 01h de Int 21h que menciona Super G. Si deseas introducir una palabra o una cadena de caracteres por teclado te recomiendo que uses la funcion 0Ah de int 21h, como ya se ha mencionado anteriormente.
Espero que te sirva.
;suma de dos digitos introducidos desde teclado
title suma.asm
pila segment para stack'stack'
db 64 dup('stack')
pila ends
datos segment para public 'data'
pide1 db 'escribe un numero','$'
pide2 db 'escribe otro numero','$'
resul db 'la suma es:','$'
n1 db ?
n2 bd ?
salto db 10,13,'$'
datos ends
codigo segment para pulic'code'
inicio proc near
assume ss:pila,ds:datos,cs:codigo
mov ax,datos
mov ds,ax
mostrar macro mssg
mov ah,09h
lea dx,mssg
int 21h
endm
mostrar pide1
mov ah,01h ;aqui se toma el valor desde el teclado
int 21h
sub al,30h ;con esta suma convertimos el Ascii a decimal
mov n1,al
xor al,al
mostrar salto
mostrar pide2
mov ah,01h ;aqui tomamos el segundo digito por el teclado
int 21h
sub al,30h
add n1,al
xor al,al
cmp n1,9d
ja dos_digit
jmp un_digit
dos_digit:
xor al,al
mov al,n1
mov bl,10d
sub al,bl
mov n1,1d
add n1,30h
mov n2,al
add n2,30h
mostrar salto
mostrar resul
mov ah,09h
lea dx,n1
int 21h
jmp salir
un_digit
add n1,30h
mostrar salto
mostrar resul
mov ah,09h
lea dx,n1
int 21h
salir:
mov ah,4ch
int 21h
inicio endp
codigo ends
end inicio
:hola:
Navegación
[#] Página Siguiente
Ir a la versión completa