• Martes 19 de Marzo de 2024, 03:43

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - MantixD

Páginas: [1]
1
ASM (Ensamblador) / [DUDA] Escribir texto en archivo desde teclado
« en: Viernes 15 de Noviembre de 2013, 03:46 »
Si mandamos una cadena con una palabra ya definida a que te la imprima en el archivo pues obviamente lo hace, pero yo lo que quiero es pedir caracteres desde teclado y almacenarlos en una cadena y despues al presionar una tecla especial (en mi caso Flecha izq) te lo guarde en un archivo guardado en ruta. Si lo hace pero al abrir el archivo veo que solo almacena pura basura y nada de texto, la vdd no se que mas tenga que hacer uds que tienen mas experiencia en esto me podran ilustrar ya que apenas estoy aprendiendo. De ante mano gracias aqui esta el codigo que les explique:

El programa inicia pidiendote que escribas el texto que va a almacenar en la variable cadena, despues lo contenido en cadena lo pasa a FINAL, y ya escribimos el texto despues presionamos la tecla "FLECHA IZQ" y se cierra el programa eso quiere decir que ya almaceno lo contenido en FINAL al archivo, pero al abrir ese archivo me muestra solo basura

OJO: USO EL EMU8086

Código: [Seleccionar]
.model small
.stack
.data

  manejador dw 0
  ruta db "c:\materias\prueba.asm",0
  cadena db 0
  renglon db 0
  columna db 0
  pagina  db 0
  FINAL   db 200 DUP(" ")

;**************AREA DE MACROS***************
ABRIR_ARCHIVO MACRO RUTA,MODO
  MOV AH, 3DH
  LEA DX, RUTA
  MOV AL, MODO
  INT 21H
ENDM

LEER_ARCHIVO MACRO BYTES,MANEJADR,BUFFER
  MOV AH,3FH
  MOV CX,BYTES
  MOV BX,MANEJADOR
  LEA DX,BUFFER
  INT 21H
ENDM

IMPRIME_SINCOLOR MACRO CADENA
  MOV AH,9
  LEA DX,CADENA
  INT 21H
ENDM

 TECLA MACRO
    mov ah,0
    int 16h
   
 endm
 
CREA_ARCHIVO MACRO archivo_crear
    MOV AH,3ch
    LEA DX,archivo_crear
    mov cx,32
    int 21h
   
ENDM 

ESCRIBIR_ARCHIVO MACRO MANEJADOR,CUANTOS_CARACTERES,QUE_ESCRIBIR
    MOV AH, 40H
    MOV BX, MANEJADOR
    MOV CX, CUANTOS_CARACTERES
    LEA DX, QUE_ESCRIBIR
    INT 21H
   
ENDM

macro cursor renglon,columna,pagina
    mov ah,2
    mov dh,renglon
    mov dl,columna
    mov bh,pagina
    int 10h
endm 

imprime macro pagina,numero,caracter,color
    mov ah,9
    mov bh,pagina
    mov cx,numero
    mov al,caracter
    mov bl,color
    int 10h
 endm




;*******************************************


.code




Inicializa: mov ax,@data
             mov ds,ax
             mov es,ax
             
         
               
         CICLO:
             
             call tec
             cmp ah,4bh
             je manda
             
             
           
             mov cx,10
             rep lodsb
             mov final,al
             imprime 0,1,cadena,0fh
           
             inc columna
             cursor renglon,columna,pagina
             
             
             
             
             jmp ciclo   
                 
             
       manda: ABRIR_ARCHIVO ruta,2
                MOV MANEJADOR, AX;
               
                ESCRIBIR_ARCHIVO MANEJADOR,1,final

               
Salir: mov ax,4c00h
       int 21h
       
tec proc
    mov ah,0
    int 16h
    mov cadena,al
    ret
    tec endp   

2
Hola a todos mi intension no es que me hagan la tarea ni mucho menos solo quiero que me aconsejen pues tengo el codigo no se si a medias y no puedo terminarlo, lo que hago en el programa es que escribo una cadena en blanco con dup y despues creo otra cadena donde escribo la palabra que quiero que cambie de color, despues con el 01h escribo el caracter, despues uso el cmpsb para comparar la cadena escrita con la cadena que quiero que cambie de color y con REPE hago que la repita si son iguales y pues inicializo 2 variables iguales: y diferentes: que lanza si son iguales, lanza la 19h para imprimir cadena con color y pues ya la reemplaza con un color determinado. mi problema es que solo cambia de color 1 palabra y ya si escribo otra vez la misma palabra no me la cambia de color, y pues ahi estoy algo atorado si me pudieran aconsejar en que estoy mal o que me hace falta o simplemente que interrupciones usar seria de gran ayuda... les dejo el codigo completo para que lo chequen haber si me doy a entender mejor.

Programo en emu8086

Código: [Seleccionar]

.model tiny
.data
cadena db 10 dup (' '),'$'
carb   db "mov$"
.code
Inicializa: mov ax,@data
             mov ds,ax   
             mov es,ax   

mensaje macro
       mov ah,09h ;mostramos la cadena
       int 21h
endm

.startup

mov cx,3
lea di,cadena
repite:
mov ah,01h
int 21h ;lee un caracter
stosb ;pasa lo que ahy en al a la cadena
loop repite

       
lea si,cadena
lea di,carb
mov cx,3

REPE cmpsb

jz iguales
;jmp diferentes

iguales:
         mov ah,19
         mov cx, 3
         mov bl, 1
         mov al, 1
         lea bp, cadena
         int 10h 
         

;diferentes: mov ax,4c00h
 ;           int 21h
.exit
end

Páginas: [1]