Programación General > ASM (Ensamblador)

 Entrada Y Salida De Datos

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa