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
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óninc
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:
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.