Está en la página 1de 28

Arquitectura de

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”

Mover registro a registro


MOV DL,BL ;byte
MOV AX,BX ;Word
Mover registro a memoria
MOV MByte,BL ;byte
MOV MWord,AX ;Word
Mover memoria a registro
MOV CL,MByte ;byte
MOV DX,MWord ;Word

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

EJEMPLO: PUSH, POP

4
EJEMPLO: PUSH, POP

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.

DIFERENCIAS ENTRE SUB-RUTINA


E INTERRUPCION
SUB-RUTINA INTERRUPCION
Son llamdas Son llamadas por
unicamente por Hardware o Software
instrucciones
(Software) Salva la dirección de
Salva en el Stack retorno y el estado del
unicamente la registro de Status
dirección de retorno No es necesario para
Necesitan un medio las interrupciones
para pasar datos al
programa principal o
viceversa

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

PROG.EXE EJECUCIÓN DEL


PROGRAMA

21
FORMATO DE UNA INSTRUCCIÓN EN
ASSEMBLER
LABEL OP-CODE OPERAND COMENTARIO

PASO1: MOV AX,01H ; AX=01H

Un programa en Assembler está formado por


instrucciones y seudo instrucciones

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

Revisión del programa PROGASM.ASM

;**********************************************************
; 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

También podría gustarte