Instrucciones en Ensamblador
Instrucciones en Ensamblador
Instrucciones en Ensamblador
Instrucciones en ensamblador
Lenguaje ensamblador
Instrucciones en ensamblador1
El lenguaje ensamblador como leguaje de programacin no est excluido de estructura. Todas las buenas
prcticas (sangrado, legibilidad, documentacin) en la escritura de programas se vuelven de una mayor
importancia, pues ayudarn al programador, y a terceros, si es el caso, a tener un correcto mantenimiento del
cdigo para su posible reso.
Entonces, para solucionar un problema de cmputo recurrimos a estructuras probadas que son comunes en
los lenguajes de programacin, por ejemplo, los ciclos for, while, la condicional if, la escalera if then else, la
estructura case, funciones para la entrada y salida de datos, etc.
En ensamblador estas estructuras no forman directamente parte de las instrucciones bsicas los nemnicos.
Pero todas ellas se pueden implementar sin mayor problema a travs de instrucciones base.
Para esta unidad an no se han introducido las interrupciones, que nos permitiran interactuar con el usuario a
travs del teclado y la pantalla, por lo que todos los ejemplos que desarrollamos hasta el momento hacen
operaciones internas que verificaremos en los valores de los registros de la PC.
Ahora que conocemos de manera general los tipos de instrucciones, combinaremos unos y otros para crear
procesos cada vez ms complejos.
Una primera tarea que se puede realizar es trabajar con arreglos de valores, que en el caso de contener
cdigo ASCII les llamamos cadenas. La forma de definir estos arreglos o cadenas como variables es
declararlos en el segmento .DATA, definir el tipo de arreglo (DB para bytes, DW para palabras dos bytes-),
definir el tamao y el contenido, si lo conocemos.
En el caso de las cadenas de texto siempre se terminan con el carcter $ para que el sistema sepa dnde
termina. Para inicializar los arreglos se usa la directiva DUP (valor), con el valor de inicializacin; puede
usarse DUP(?) si no nos interesa un valor particular inicial.
1
Las variables de tipo arreglo son conjuntos de localidades de memoria contiguas. Esto quiere decir que la
direccin de una variable de tipo arreglo simplemente apunta al primer elemento de la variable. Para ir
apuntando a la siguiente posicin es suficiente con incrementar la direccin en 1, en el caso de arreglos de
tipo byte, o incrementar en 2 si se trata de un arreglo del tipo word.
No olvide que en las operaciones para direccionar las posiciones de un arreglo debe usarse el registro ndice
de destino DI para arreglos a los que se les va escribir un valor. Y el registro ndice fuente SI para un arreglo
del que estamos leyendo valores. Para escribir un valor usaremos el formato MOV [DI], valor y para leer un
valor MOV AH, [SI].
Note en el siguiente ejemplo el uso de la instruccin LOOP para realizar repeticiones fijas de bloques de
cdigo, que en este caso nos ayudarn a realizar operaciones a lo largo de los arreglos:
.MODEL SMALL
;Modelo pequeo
.STACK 100h
CR EQU 13
;Retorno de carro
LF EQU 10
;nueva lnea
.DATA
;Segmento de datos
Opcin DB 'x'
Casilla: DB ?
Pos dB 0,0
.CODE
MOV AX,@DATA
MOV DS, AX
LEA DX,TEXTO1
;Carga el texto
MOV AH,9h
;imprimir en pantalla
INT 21h
;Llama al sistema operativo
MOV CX,10
LEA DI, ARREGLO
MOV AH,0FFh
llenandoFF:
; valor
MOV [DI], AH
INC DI
LOOP llenandoFF
MOV CX,10
MOV AH,0h
llenando:
MOV [DI], AH
; valor inicial
INC DI
INC AH
LOOP llenando
MOV CX,10
Pasando:
MOV AH,[SI]
MOV [DI], AH
INC DI
INC SI
LOOP Pasando
MOV AX,4C00h
; Funcion 4ch
INT 21h
END
Programa 1
Con los comandos de control de flujo y el direccionamiento de vectores se pueden hacer funciones de
bsqueda o de sustitucin de valores o caracteres. En el siguiente programa se desarrollan tres tareas sobre
una cadena:
Note que en la segunda tarea no se necesita recorrer toda la cadena, una vez que obtiene la posicin de la
primer ocurrencia del caracter se salta el loop. Note adems el uso de caracteres ASCII extendido para
imprimir en la pantalla vocales con acento.
.MODEL SMALL
;Modelo pequeo
.STACK 100h
CR EQU 13
;Retorno de carro
LF EQU 10
;nueva linea
.DATA
;Segmento de datos
Opcin DB 'x'
Casilla: DB ?
Pos dB 0,0
.CODE
MOV DS, AX
LEA DX,TEXTO1
;Carga el texto
MOV AH,9h
;imprimir en pantalla
INT 21h
;Llama al sistema operativo
MOV BH,'a'
; Letra a buscar
MOV CX,18
LEA SI,CADENA
MOV AL,0
conteo:
CMP AH,BH
JNE noes
INC AL
noes:
INC SI
LOOP conteo
MOV BH,'u'
; Letra a buscar
MOV CX,18
LEA SI,CADENA
MOV AL,0
MOV DL,1
; posicin inicial
; no encontrado
search:
; Inicio de la busqueda
CMP AH,BH
JE found
INC DL
; aumentar AL
INC SI
LOOP search
JMP fin
found:
MOV AL,DL
fin:
MOV BH,'e'
; Letra a buscar
MOV CX,18
LEA SI,CADENA
; el destino es CADENA
susti:
; Inicio de la bsqueda
CMP AH,BH
JNE salta
; salta si no es 'e'
MOV [DI],'E'
INC SI
INC DI
LOOP susti
salta:
MOV Ax,4c00h
;Funcin 4ch
INT 21h
END
Programa 2