Está en la página 1de 11

INSTITUTO TECNOLÓGICO

SUPERIOR DEL SUR DEL ESTADO


YUCATÁN

LENGUAJES DE INTERFAZ

MDEISW. DAVID A. AVILES POOT

2022A
6AVS
22/02/22

INSTRUCCIONES BÁSICAS DEL


LENGUAJE ENSAMBLADOR

CAMARA VELA JORGE CARLOS


Las instrucciones o nemónicos con las que cuenta el lenguaje ensamblador se
encuentran clasificadas de acuerdo con su función en instrucciones de
transferencia, aritméticas, saltos, lógicas y misceláneas.
• Instrucciones de transferencia: permiten el movimiento, carga y descarga de los
registros.
• Instrucciones aritméticas: encargadas de la aplicación de las pocas operaciones
aritméticas que contiene el lenguaje.
• Instrucciones lógicas: encargadas de la aplicación de las operaciones lógicas,
generalmente utilizan un solo operador.
• Instrucciones de salto: se caracterizan porque el operador contiene una dirección de
memoria en la cual debe continuar la ejecución en el caso que la instrucción así lo
determine.
• Instrucciones misceláneas: este pequeño conjunto de instrucciones consta de la
instrucción para finalización del programa, la instrucción para el llamado a subrutinas
de interrupción y la instrucción para leer una dirección efectiva.
MOV
Transfiere datos entre celdas de memoria y registros.
Sintaxis: MOV Destino,Fuente
Ejemplo:
MOV AX,0006h
MOV DX,AX
MOVS (MOVSB) (MOVSW)
Mueve cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el
destino direccionado por DI.
Sintaxis: MOVS
Este comando no necesita parametros ya que toma como dirección fuente el
contenido del registro SI y como destino el contenido de DI.
Ejemplo:
MOV SI, OFFSET VARIABLE1
MOV DI, OFFSET VARIABLE2
MOVS
Primero se inicializan los valores de SI y DI con las direcciones de las variables
VARIABLE1 y VARIABLE2 respectivamente, despues al ejecutar MOVS se copia
el contenido de VARIABLE1 a VARIABLE2.
Los comandos MOVSB y MOVSW se utilizan de la misma forma que MOVS, el
primero mueve un byte y el segundo una palabra.
LODS (LODSB) (LODSW)
Carga cadenas de un byte o palabra al acumulador.
Sintaxis: LODS
Toma la cadena que se encuentre en la dirección especificada por SI, la carga al
registro AL (o AX) y suma o resta 1 (segun el estado de DF) a SI si la transferencia
es de bytes o 2 si la transferencia es de palabras.
Ejemplo:
MOV SI, OFFSET VARABLE1
LODS
La primer linea carga la dirección de VARIABLE1 en SI y la segunda linea lleva el
contenido de esa localidad al registro AL.
Los comandos LODSB y LODSW se utilizan de la misma forma, el primero carga
un byte y el segundo una palabra (utiliza el registro completo AX).
NEG
Genera el complemento a 2
Sintaxis: NEG destino
Genera el complemento a 2 del operando destino y lo almacena en este mismo
operando.
Ejemplo, si AX guarda el valor de –2 (FFFE), entonces:
NEG AX
Dejaría como resultado en AX el valor 0002.
ADD
Adición de los operandos.
Sintaxis: ADD destino, fuente
Suma los dos operandos y guarda el resultado en el operando destino.
Ejemplo:
ADD R1,R2
SUB
Substracción
Sintaxis: SUB destino, fuente
Resta el operando fuente del destino.
SUB R1,R2
INC
Sintaxis:
INC reg
INC mem
Incrementa (suma 1 a) el contenido de un registro o de una posición de memoria.
Ejemplos:
INC AX ; AX=AX+1
INC DL ;DL=DL+1
INC WORD PTR ES:[DI+4] ; Increm. palabra contenida
; en ES:DI+4
DEC
Sintaxis:
DEC reg
DEC mem
Decrementa (resta 1 a) el contenido de un registro o de una posición de memoria.
Ejemplos:
DEC AX ; AX=AX-1
DEC DL ; DL=DL-1
DEC BYTE PTR ES:[DI+4] ; Decrem. byte contenido en
; ES:DI+4
NOT
Sintaxis:
NOT reg
NOT mem
Realiza un NOT lógico, bit a bit, con el operando, es decir, que invierte el valor de
cada uno de los bits del operando.
Ejemplos:
NOT DI
NOT BYTE PTR [BX]
AND
Sintaxis:
AND reg,reg
AND reg,mem
AND reg,inmediato
AND mem,reg
AND mem,inmediato
Realiza un AND lógico, bit a bit, entre el operando destino y el operando fuente,
almacenando el resultado en el operando destino. Como la filosofía de esta
operación es "valor 1 si los dos bits son 1", se puede utilizar como máscara, filtrando
sólo aquellos bits (1) del primer operando que coincidan con los bits (1) del segundo
operando.
Ejemplos:
AND AX,BX ; AX=AX AND BX
OR
Sintaxis:
OR reg,reg
OR reg,mem
OR reg,inmediato
Realiza un OR lógico, bit a bit, entre el operando destino y el operando fuente,
almacenando el resultado en el operando destino. La filosofía de esta
operación es "valor 0 si los dos bits son 0". Su utilidad es poner algunos bits a
1, inalterando el resto.
Ejemplos:
OR AL,BL ; AL=AL OR BL
OR DI,[BX] ; DI=DI OR [BX]
OR CL,34 ; CL=CL OR 34

El formato del set de instrucciones se caracteriza por un nemónico que determina


el código de operación y una serie de operandos sobre los que se ejecutan dichas
operaciones.
Ejemplo:
El siguiente ejemplo muestra 1 línea bicolor en el centro de la pantalla en modo de
video, que puede ser movida por los cursores del teclado.
Dosseg .Model small .Data
Col1 DW 0 Col2 DW 1
MACROS ********************************
Entrar Macro mov ah, 7 int 21H endm
Modo MACRO VALOR
PUSH AX
XOR AH, AH
MOV AL, VALOR
INT 10H
POP AX
ENDM
Paleta MACRO VALOR
PUSH AX
PUSH BX
Mov AH, 0BH
MOV BL, VALOR
MOV BH, 01H
Int 10h
POP BX
POP AX
ENDM
Linea MACRO Columna, Color
LOCAL Volver
PUSH AX
PUSH BX
PUSH CX MOV AX, 0B800H
MOV ES, AX
MOV AH, Color MOV DI, Columna MOV CX, 100 ; OJO VER CUAL ES EL
NUMERO DE FILAS Volver:
MOV ES: [DI], AH
MOV ES: [DI+2000H], AH ADD DI, 80 LOOP Volver
POP CX POP BX POP AX ENDM
Linea1 MACRO Columna, Color
LOCAL Volver
PUSH AX
PUSH BX
PUSH CX MOV AX, 0B800H
MOV ES, AX
MOV AL, Color MOV DI, Columna MOV CX, 100 ; OJO VER CUAL ES EL
NUMERO DE FILAS Volver:
MOV ES: [DI], AL
MOV ES: [DI+2000H], AL ADD DI, 80 LOOP Volver
POP CX POP BX POP AX ENDM
BorrarPantalla MACRO LOCAL Borrar
PUSH AX
PUSH BX
PUSH CX MOV AX, 0B800H MOV ES, AX MOV DI, 00H XOR AX, AX MOV CX,
2000H
REP STOSW
POP CX POP BX POP AX
ENDM
.Code .386 Main proc near
MOV AX, @Data
MOV DS, AX Modo 4 ; Modo Gráfico Paleta 2 ; Paleta Caliente MOV Col1, 39 ;
Ubicamos la primera línea una posición antes del centro MOV Col2, 40 ;
Ubicamos la primera línea una posición en el mismo centro
Linea Col1, 00000010B ; Pintamos las dos líneas, la primera con AH Linea1 Col2,
01000000B ;y la otra con AL, para que den la sensación de que son una sola
vuelvo: Entrar cmp al, 1BH ;verifico que si la tecla que presiona el usuario es ESC
je Salto ;si es así termina la aplicación
mov ah, 06H ;este servicio lo utilizamos para leer una tecla mov dl, 0FFH Int 21H
; leemos la tecla presionada
JE vuelvo cmp AL, 4BH JE izquierda ;Si presiona la flecha izquierda lo mandamos
a
cmp AL, 4DH ;mover las lineas hacia la izq
JE derecha ;Si presiona la flecha derecha lo jmp vuelvo ; mandamos a mover las
lineas hacia la der Int 21H STC
Salto: jmp Salir
-----------***-----------***
izquierda: BorrarPantalla ;aquí borramos la ubicación de las dos lineas anteriores
cmp Col1, 0 ;comparamos en caso de que la primera linea llegue al principio de la
pantalla je asignar1 cmp Col2, 0 ;comparamos en caso de que la primera linea
llegue al principio de la pantalla je asignar2 jmp colorear1 ;sino cumple con las
anteriores asecciones pinta normal decreciendo en 1
asignar1: mov Col1, 79 ;si la primera linea llego al inicio de la dec Col2 ;y la
segunda toma la posición que tenia la primera Linea Col1, 00000010B pantalla
pues debe pasar al final de la misma Linea1 Col2, 01000000B ; pintamos con las
nuevas posiciones jmp vuelvo ;regreso a espera aque se presione una tecla
asignar2: mov Col2, 79 ;si la segunda linea llego al inicio de la pantalla pues
;debe pasar al final de la misma
dec Col1 ;la primera continua moviendose a la izquierda Linea Col1, 00000010B
Linea1 Col2, 01000000B ;pintamos con las nuevas posiciones jmp vuelvo
;regreso a espera aque se presione una tecla
colorear1: dec Col1 ;este es el caso en el que las lineas solo se dec Col2 ;van
moviendo hacia la izquierda Linea Col1, 00000010B Linea1 Col2, 01000000B jmp
vuelvo
-----------***-----------***
-----------***-----------***
derecha: BorrarPantalla ;aquí borramos la ubicación de las dos lineas anteriores
cmp Col1, 79 ;comparamos en caso de que la primera linea llegue al final de la
pantalla je asignar3 cmp Col2, 79 ;comparamos en caso de que la primera linea
llegue al final de la pantalla je asignar4 jmp colorear2 ;sino cumple con las
anteriores asecciones pinta normal incrementando en 1
asignar3: mov Col1,0 ;si la primera linea llego al final de la pantalla pues debe
pasar al inicio de la misma inc Col2 ;y la segunda toma la posición que tenia la
primera
Linea Col1, 00000010B Linea1 Col2, 01000000B ; pintamos con las nuevas
posiciones jmp vuelvo ;regreso a espera aque se presione una tecla
asignar4: mov Col2, 0 ;si la segunda linea llego al final de la pantalla pues debe
pasar al inicio de la misma inc Col1 ;la primera continua moviendose a la derecha
Linea Col1, 00000010B Linea1 Col2, 01000000B ;pintamos con las nuevas
posiciones jmp vuelvo ;regreso a espera aque se presione una tecla
colorear2: inc Col1 ;este es el caso en el que las lineas solo se van moviendo
hacia la derecha inc Col2 Linea Col1, 00000010B Linea1 Col2, 01000000B jmp
vuelvo ;regreso a espera aque se presione una tecla
-----------***-----------***
Salir: MOV AX, 4C00H Int 21H
Main endp
End
Bibliografía
https://www.ecured.cu/Lenguaje_ensamblador#Ejemplos_de_lenguaje_ensamblador
http://virtual.umng.edu.co/distancia/ecosistema/odin/odin_desktop.php?path=Li4vb3Zhc
y9pbmdlbmllcmlhX2luZm9ybWF0aWNhL2FycXVpdGVjdHVyYV9kZV9jb21wdXRhZG9y
ZXMvdW5pZGFkXzQv#slide_3

También podría gustarte