es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo escanear símbolos desde un archivo con llamadas DOS de 16 bits.

Tengo la tarea de calcular cuántos caracteres hay en un archivo .txt cuyo nombre ingresa el usuario y editar caracteres si es necesario. Soy nuevo en Assembly x86, por lo que necesito ayuda con la lectura de archivos y la lectura de símbolos en un archivo.

Como se muestra en mi código a continuación, uso int 21,3d para abrir el archivo y int 21,3f para leer el archivo. Pero no entiendo cómo leer símbolos del archivo correctamente, porque si tengo 100 símbolos aleatorios en mi archivo txt, ¿cómo puedo leer uno por uno y contarlos todos?

Mi código:
“`
.data
fname_input db 255,?,255 dup(“$”)
buff db 255,?,255 dup(“$”)
endl db 13,10,”$”
handle dw ?

.code
start:

mov dx, @data
mov ds, dx

mov ah, 0Ah
mov dx, offset fname_input ; entradas se colocan en el búfer
int 21h

mov ah, 3fh
mov al, 00 ; solo leer
mov dx, offset fname_input ; nombre del archivo a abrir
int 21h

mov ah,3fh
mov bx,[handle]
mov cx,4
mov dx,offset buff
int 21h

mov ax, 4c00h ;salida
int 21h 

end start

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para leer símbolos de un archivo en Assembly x86, se puede recorrer el búfer donde se lee el archivo e incrementar un contador por cada símbolo que no sea un marcador de fin de archivo. Se puede utilizar la instrucción cmp para comparar cada símbolo con el marcador de fin de archivo y la instrucción inc para incrementar el contador.

    Aquí hay un fragmento de código de ejemplo que muestra cómo contar el número de símbolos en un archivo:

    mov ah, 3fh ; leer archivo
    mov bx, [handle] ; identificador de archivo
    mov cx, 255 ; número de bytes a leer
    mov dx, offset buff ; búfer en el que se leerá
    int 21h
    
    mov si, dx ; apuntar al inicio del búfer
    mov cx, 0 ; contador para símbolos que no sean EOF
    
    read_loop:
        lodsb ; cargar el siguiente símbolo en AL
        cmp al, 1Ah ; verificar si AL es el marcador EOF
        je end_read ; si es así, salir del bucle
        inc cx ; incrementar el contador
        jmp read_loop ; saltar de nuevo para leer el siguiente símbolo
    
    end_read:
        ; CX ahora contiene el número de símbolos en el archivo
    

    Tenga en cuenta que este código asume que el archivo está utilizando una codificación de caracteres de un solo byte (por ejemplo, ASCII). Si el archivo está utilizando una codificación de caracteres de varios bytes (por ejemplo, UTF-8), deberá utilizar un algoritmo más complejo para contar correctamente el número de símbolos.

Comments are closed.