• Domingo 22 de Diciembre de 2024, 13:13

Autor Tema:  Entrada Y Salida De Datos  (Leído 3986 veces)

Sotrono

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Entrada Y Salida De Datos
« en: Sábado 21 de Agosto de 2004, 07:33 »
0
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

  • Miembro MUY activo
  • ***
  • Mensajes: 375
    • Ver Perfil
Re: Entrada Y Salida De Datos
« Respuesta #1 en: Sábado 21 de Agosto de 2004, 20:05 »
0
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

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Entrada Y Salida De Datos
« Respuesta #2 en: Viernes 24 de Septiembre de 2004, 08:23 »
0
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.
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

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Entrada Y Salida De Datos
« Respuesta #3 en: Viernes 24 de Septiembre de 2004, 15:34 »
0
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

Logan

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Entrada Y Salida De Datos
« Respuesta #4 en: Viernes 24 de Septiembre de 2004, 15:42 »
0
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:
Estamos aqui porque jamás terminaremos de aprender....

misterwilliam

  • Miembro MUY activo
  • ***
  • Mensajes: 291
    • Ver Perfil
Re: Entrada Y Salida De Datos
« Respuesta #5 en: Sábado 25 de Septiembre de 2004, 00:12 »
0
Primero, pienso que hay que distinguir entre las interrupciones de D.O.S. y las de la B.I.O.S., pues si se busca informaciòn en un manual o en internet se puede llegar a una confusiòn.

Las interrupciones de DOS son màs sencillas de utilizar, funcionan con 21h y dependiendo de la funciòn, como ya se explicò, asì mismo serà la operatividad.

En el caso de interrupciones de la BIOS tambièn dependen de cuàl interrupciòn se utiliza (10h, 16h, 14h, 11h, etc) cada una se utiliza para una operaciòn distinta como leer del teclado, manejar video, puertos serial y paralelo, etc. Y cada una posee funciones tambièn distintas para especificar que se quiere hacer dependiendo de la interrupciòn para un dispositivo determinado. Por ejemplo la int10h utilizada para manejar video varia la funciòn para saber la posiciòn del cursor, del pixel, actualizar un caracter, cambiar color, etc.

Lo màs conveniente serìa comenzar a utilizar las de DOS y luego las de la BIOS.

Saludos, éxitos y Chao! :clown:
¡ Todo está en la mente !

Dennis

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Entrada Y Salida De Datos
« Respuesta #6 en: Sábado 25 de Septiembre de 2004, 19:32 »
0
Gracias por las enteriores respuestas me han servido de mucho, resolvi uno de los pequeños problemas que tenia, realmente el programa en el que estoy trabajando trata de pedir 10 caracteres guardarlos en el stack y luego sacarlos para imprimirlos en pantalla.
Ya estuve trabajando sobre mi programa, y logro que haga lo que debe hacer, solo que al correrlo imprime otros caracteres que no deberia imprimir, espero y me puedan ayudar a resolverlo. Y ademas si pueden decirme como puedo ver el contenido del stack mientras estoy probando el programa en el TASM40 ya que solo puedo visualizar los valores de los registro, pero no supe como en el caso del stack o la pila.

Les dejo mi pequeño codigo como referencia si alguno quiere echarle un vistazo.
Gracias.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.