Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Computadoras
Clase 8
PROGRAMACIÓN EN ASSEMBLER
Arquitectura de
Computadoras
DESCRIPCION DE ALGUNAS
INSTRUCCIONES MAS USADAS DEL 8086
1
INSTRUCCIÓN “MOV”
Mueve bytes o palabras (words) desde/hacia
registros/memoria inmediato
Formato general MOV Destino,Fuente
Opciones
Mover en forma inmediata un valor a un registro
MOV DL,01 ;byte
MOV AX,1234H ;Word
Mover en forma inmediata un valor a la memoria
MOV MByte,12H ;byte
MOV MWord,1234H ;Word
INSTRUCCIÓN “MOV”
2
ALMACENAMIENTO DE DATOS EN
LA MEMORIA
INSTRUCCIÓN “PUSH”
Guarda información de 16 bits en la
memoria Stack.
Formato general PUSH Origen
Ejemplo: PUSH AX
3
INSTRUCCIÓN “POP”
Recupera información de 16 bits en la
memoria Stack.
Formato general POP Destino
Ejemplo: POP AX
4
EJEMPLO: PUSH, POP
5
INSTRUCCIONES PUSH,POP
PUSH AX
PUSH BX
PUSH CX
POP CX
POP BX
POP AX
INSTRUCCIÓN “XCHG”
Intercambia el contenido de dos operandos
Formato general XCHG Destino,Fuente
Ejemplo:
XCHG AX,BX
6
INSTRUCCIÓN “XLAT”
MOV AL,01
MOV BX,1000H
XLAT
INSTRUCCIÓN “LEA”
Transfiere el desplazamiento del
operando fuente al destino.
El operando fuente debe de ser un
operando de memoria (byte o palabra)
El operando destino es un registro de
16 bits pero no es un registro de
segmento.
Ejemplo: LEA CX,DIRECCION
7
INSTRUCCIÓN “ADD”
Suma dos operandos y el resultado lo
deposita (o almacena en el operando
destino).
Formato: ADD destino,fuente
(Fuente)+(Destino) Destino
Se puede sumar:
El contenido de dos registros
ADD AL,BL
ADD BX,CX
INSTRUCCIÓN “ADD”
Una constante a un registros
ADD AL,2AH
ADD BX,1234H
Un registro a memoria
ADD MWORD,DX
El contenido de memoria a un registro
Una constante a memoria
8
INSTRUCCIÓN “INC”
Incrementa en uno el contenido de un
registro o un contenido de la memoria
Formato General: INC destino
Ejemplo:
INC CX
INC BL
INC WORD_VAR
INC BYTE_VAR
INSTRUCCIÓN “CMP”
Compara dos valores, los Flags se modifican
de acuerdo al resultado
Formato General:
CMP destino,Fuente
Se pueden hacer las siguientes comparaciones
Entre registros
CMP AL,BL
CMP BX,CX
Con un valor en forma inmediata
CMP AL,11H
CMP CX,10H
9
INSTRUCCIÓN “CMP”
Registros con memoria
CMP CL,Mbyte
CMP BX,MWord
Ejemplo
CMP AL,BL
JL menor
Continua
.
.
Menor:
INSTRUCCIÓN DE ROTACION A LA
IZQUIERDA “ROL”
Formato: ROL destino contador
Ejemplo:
1. MOV CL,3
ROL BX,CL
2. ROL AL,01
10
INSTRUCCIONES DE ROTACION
INSTRUCCIONES DE ROTACION
11
INSTRUCCIONES DE ROTACION
INSTRUCCIONES DE
DESPLAZAMIENTOS
12
INSTRUCCIÓN “TEST”
Realiza un AND entre los operandos pero no
los cambia
Formato General: TEST destino,fuente
Ejemplos:
TEST AL,BL
TEST BX,CX
TEST DL,03H
Esta instrucción es frecuentemente usada
para ver si un bit o un conjunto de bits
tienen el valor 1 ó 0
INSTRUCCIÓN “MOVS”
Mueve un string de (bytes/words) de una
localidad de memoria a otra (se usa
repetidas veces la instrucción MOVS)
El string fuente está en el segmento de
datos y apuntado por el registro SI y es
transferido a un buffer del segmento extra
apuntado por DI.
El numero de bytes (words) a ser movidos
está especificado en el registro CX
13
INSTRUCCIÓN “MOVS”
Cada vez que el MOVS es ejecutado:
1. El SI y el DI es incrementado (o
decrementado dependiendo del valor del
Flag de dirección “D”)
2. El CX es decrementado hasta que llegue
a cero.
INSTRUCCIÓN “MOVS”
Ejemplo
LEA SI,FUENTE
LEA DI,DESTINO
MOV CX,100H
CLD
REP MOVS ;(MOVSB ó MOVSW)
14
INSTRUCCIÓN USADAS EN EL
MANEJO DE STRINGS
Instrucción REP
Causa que la siguiente de String se repita.
La siguiente instrucción a “REP” se repetirá
hasta que CX sea cero.
Instrucción CLD: pone el Flag de dirección
D a cero, para el incremento de SI y DI
Instrucción STD:pone el Flag de dirección
D a uno, para el decremento de SI y DI
INSTRUCCIÓN “CMPS”
Compara un string (byte/word) de una
localidad de memoria con otro de otra
localidad
Es usada después de la instrucción REPE.
El string en el segmento de datos apuntado
por SI es comparado con el string del
segmento extra apuntado por DI
El numero de bytes a ser comparados está
especificado en el registro CX
15
INSTRUCCIÓN “CMPS”
Ejemplo
LEA SI,FUENTE
LEA DI,DESTINO
MOV CX,100H
CLD
REPE CMPS ;(CMPSB ó CMPSW)
JZ IGUAL
Si Z=1 son iguales
Si Z=0 son diferentes
INSTRUCCIÓN REPE
Origina que la siguiente instrucción
se repita CMPS se repita hasta que
CX sea cero ó el resultado de la
comparación genere que el Flag de
Z=0 como resultado de que 2 byes o
words no son iguales.
REPE CMPS
Z=1 Iguales
Z=0 Diferentes
16
INSTRUCCIÓN “SCAS”
Opera sobre un sólo un string
(byte/word) ubicado en el segmento
de datos y apuntado por el registro SI
El contenido del registro AL (ó AX si es
word) es comparado con sucesivos
bytes (words) del string.
Es usado normalmente con la
instrucción REPNE (repetir mientras no
son iguales).
INSTRUCCIÓN “SCAS”
Ejemplo
LEA SI,FUENTE
MOV Al,05H
MOV CX,100H
CLD
REPNE SCAS ;(SCASB ó SCASW)
JZ ENCONTRE
Si Z=1 Se encontró el Byte
Si Z=0 No se encontró el Byte
17
INSTRUCCIÓN “REPNE”
Las instrucciones REPNE Y SCAS se
repetirán hasta que CX=0 o hasta
que el resultado de la operación
cause que el Flag Z sea puesto a 1
INSTRUCCIÓN “CALL”
Formato CALL Rutina
Transfiere el control a la rutina y
pone la dirección de retorno en el
Stack.
Esta instrucción puede ser corta ó
cercana (NEAR).
Esta instrucción puede ser larga o
lejana (FAR)
18
INSTRUCCIÓN “CALL”
Cuando es corta ó cercana (NEAR) el
contenido del IP es puesto en el
Stack.
Cuando es larga o lejana (FAR) el CS
y el IP es puesto en el Stack
INSTRUCCIÓN “CALL”
Ejemplo:
CALL Jules
.
.
Jules PROC NEAR
RET
Jules ENDP
19
INSTRUCCIÓN “RET”
Retorna de la sub-rutina
NEAR RET recupera del Stack el IP
FAR RET recupera del Stack el CS y
el IP.
20
Arquitectura de
Computadoras
PROGRAMACION EN ASSEMBLER
8086
ETAPAS DE ENSAMBLAJE,
LINKEO Y EJECUCIÓN
EDITOR
EDITAR PROGRAMA
PROG.ASM
iMac
PROG.ASM
ASSEMBLER
OTROS OBJETOS
ENSAMBLAR EL
PROGRAMA
FUENTE
PROG.LST OPCIONAL
PROG.OBJ
PROGRAMA LINKEO
OBJETO
21
FORMATO DE UNA INSTRUCCIÓN EN
ASSEMBLER
LABEL OP-CODE OPERAND COMENTARIO
SEUDO-INSTRUCCIONES
Son instrucciones al ensamblador
para que ensamble adecuadamente el
programa en assembler
Las seudo-intrucciones no tienen
traducción a lenguaje de maquina
22
EJEMPLO DE PROGRAMA EN
ASSEMBLER
;**********************************************************
; ESTRUCTURA DE UN PROGRAMA ASSEMBLER
PAGE 60,132
TITLE PROGASM
PUBLIC BEGIN, ESCRIBIR
PUBLIC TEXTO
;----------------------------------------------------------
; SEGMENTO DE STACK
STACKSG SEGMENT PARA STACK 'STACK'
DW 32 DUP(?)
STACKSG ENDS
;----------------------------------------------------------
; SEGMENTO DE DATOS
DATASG SEGMENT PARA 'DATA'
TEXTO DB 'ESTO ES UNA PRUEBA',0AH,0DH
DB '$'
DATASG ENDS
;----------------------------------------------------------
; SEGMENTO DE CODIGOS
CODESG SEGMENT PARA 'CODE'
BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:NOTHING
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATASG
MOV DS,AX
;
LEA DX,TEXTO
CALL ESCRIBIR
RET
BEGIN ENDP
;-------------------------------------------------------
; SUB-RUTINA ESCRIBIR
ESCRIBIR PROC NEAR
PUSH AX
MOV AH,09H
INT 21H
POP AX
RET
ESCRIBIR ENDP
CODESG ENDS
END BEGIN
23
PAGE Y TITLE
SEGMENT
24
SEGMENT
PROC
25
ASSUME
END
26
DB Y DW
DB Y DW
27
EQU
EQU
28