captura básica de cadenas
En el lenguaje ensamblador el tipo de dato cadena(string) no está definido, pero para fines de programación, una cadena es definida como un conjunto de localidades de memoria consecutivas que se reservan bajo el nombre de una variable.
Instrucciones para el manejo de strings
Instrucciones para el manejo de strings El lenguaje ensamblador cuenta con cinco instrucciones para el manejo de cadenas:
Instrucciones para el manejo de strings El lenguaje ensamblador cuenta con cinco instrucciones para el manejo de cadenas:
LODS (cargar un byte o palabra): carga el registro acumulador (AX o AL) con el valor de la localidad de memoria determinada por DS:SI se incrementa tras la transferencia.
En el siguiente ejemplo simplemente capturamos una cadena en un vector y la imprimimos cuantas veces quiera el usuario, en este programa aprendemos a usar vectores en MASM.
Los vectores se pueden declarar de cualquier tipo de dato que una variable cualquiera solo que se especifica la longitud del vector y con que tipo de dato inicia al crearse para ello se utiliza la palabra reservada dup.
Ejemplo de declaracion de un vector:
vector db 100 dup(‘$’)
En este caso declaramos un vector de tipo db con una longitud de 100 posiciones y la iniciamos con cadena vacia (‘$’).
Para manejar las posiciones de los vectores se utilizan los registros SI y DI.
Ejemplo del programa usuando un vector para almacenar una cadena digitada por el usuario.
.model small
.stack 64
.data
inicio db ‘Repetir Texto..’,10,13,’$’
ingresar db 10,13,’Ingresa tu nombre’, 10,13,’$’
nombre db ‘Su nombre es: $’
repetir db 10,13,’Quiere repetir s/n?’,10,13,’$’
;Declaracion del vector
vtext db 100 dup(‘$’)
.stack 64
.data
inicio db ‘Repetir Texto..’,10,13,’$’
ingresar db 10,13,’Ingresa tu nombre’, 10,13,’$’
nombre db ‘Su nombre es: $’
repetir db 10,13,’Quiere repetir s/n?’,10,13,’$’
;Declaracion del vector
vtext db 100 dup(‘$’)
.code
mov ax,@data
MOV DS,AX
lea dx,inicio
mov ah,09
int 21h
mov ax,@data
MOV DS,AX
lea dx,inicio
mov ah,09
int 21h
lea dx,ingresar
mov ah,09
int 21h
mov ah,09
int 21h
;Iniciamos nuestro conteo de si en la posicion 0.
mov si,00h
leer:
mov ax,0000
mov ah,01h
int 21h
;Guardamos el valor tecleado por el usuario en la posicion si del vector.
mov vtext[si],al
inc si ;Incrementamos nuestro contador
cmp al,0dh ;Se repite el ingreso de datos hasta que se teclee un Enter.
ja leer
jb leer
lea dx,nombre
mov ah,09
int 21h
mov si,00h
leer:
mov ax,0000
mov ah,01h
int 21h
;Guardamos el valor tecleado por el usuario en la posicion si del vector.
mov vtext[si],al
inc si ;Incrementamos nuestro contador
cmp al,0dh ;Se repite el ingreso de datos hasta que se teclee un Enter.
ja leer
jb leer
lea dx,nombre
mov ah,09
int 21h
ver:
mov dx,offset vtext ;Imprime el contenido del vector con la misma instrucción de una cadena
mov ah,09h
int 21h
lea dx,repetir ;imprime si quiere ver de nuevo el texto escrito.
mov ah,09
int 21h
mov ah,01h
int 21h
cmp al,73h ;Si la tecla presiona es una s se repite la impresión del vector.
je ver
mov dx,offset vtext ;Imprime el contenido del vector con la misma instrucción de una cadena
mov ah,09h
int 21h
lea dx,repetir ;imprime si quiere ver de nuevo el texto escrito.
mov ah,09
int 21h
mov ah,01h
int 21h
cmp al,73h ;Si la tecla presiona es una s se repite la impresión del vector.
je ver
salir:
mov ah,4ch
int 21h
mov ah,4ch
int 21h
end
Programa en ejecución:

Comentarios
Publicar un comentario