1 Objetivo General Adquirir una sólida comprensión
del funcionamiento interno de los microprocesadores. Conocer y
emplear eficientemente el entorno de programación del
Lenguaje Ensamblador. Elaborar programas a nivel avanzado que
permiten manejar eficientemente los recursos del
microprocesador
2 Objetivo Terminal Conocer los registros internos y la forma
como operan en un microprocesador.
3 Objetivo Instruccional Conocer y comprender las partes y el
contenido de un programa fuente.
4 COMENTARIOS EN EL LENGUAJE ENSAMBLADOR EL USO DE COMENTARIOS A
LO LARGO DEL PROGRAMA PUEDE MEJORAR SU CLARIDAD, EN ESPECIAL EN
EL LENGUAJE ENSAMBLADOR. UN COMENTARIO EMPIEZA CON PUNTO Y COMA
(;) ; TODA LA LINEA ES UN COMENTARIO ADD AX,BX ; COMENTARIO EN LA
MISMA LINEA LOS COMENTARIOS NO GENERAN CODIGO DE MAQUINA
5 PALABRAS RESERVADAS CIERTAS PALABRAS EN LENGUAJE ENSAMBLADOR
ESTAN RESERVADAS PARA SUS PROPOSITOS PROPIOS, Y SON USADAS SOLO
BAJO CONDICIONES ESPECIALES. INSTRUCCIONES : MOV , ADD DIRECTIVAS
: END , SEGMENT OPERADORES : FAR , SIZE SIMBOLOS PREDEFINIDOS :
@DATA , @MODEL EL USO DE UNA PALABRA RESERVADA PARA UN PROPOSITO
EQUIVOCADO PROVOCA QUE EL ENSAMBLADOR GENERE UN MENSAJE DE
ERROR
6 IDENTIFICADORES UN IDENTIFICADOR ES UN NOMBRE QUE SE APLICA A
ELEMENTOS EN EL PROGRAMA. LOS DOS TIPOS DE IDENTIFICADORES SON:
NOMBRE, QUE SE REFIERE A LA DIRECCION DE UN ELEMENTO DE DATO, Y
ETIQUETA, QUE SE REFIERE A LA DIRECCION DE UNA
INSTRUCCIÓN. UN IDENTIFICADOR PUEDE UTILIZAR LOS SIGUENTES
CARACTERES LETRAS DEL ALFABETO : A – Z DIGITO : 0 – 9
CARACTERES ESPECIALES : ? , _ , $ , @ , .
7 INSTRUCCIONES UN PROGRAMA EN LENGUAJE ENSAMBLADOR CONSISTE EN
UN CONJUNTO DE ENUNCIADOS. LOS DOS TIPOS DE ENUNCIADOS SON:
INSTRUCCIONES TAL COMO MOV Y ADD, QUE EL ENSAMBLADOR TRADUCE A
CODIGO OBJETO. DIRECTIVAS QUE INDICAN AL ENSAMBLADOR QUE REALICE
UNA ACCION ESPECIFICA, COMO DEFINIR UN ELEMENTO DE DATO.
SINTAXIS: [IDENTIFICADOR] OPERACIÓN [OPERANDO(S)] ;
COMENTARIO
8 INSTRUCCIONES EJEMPLO: [IDENTIFICADOR] OPERACION [OPERANDO(S)]
; COMENTARIO COUNTER DB 1 ; DIRECTIVA MOV AX , 0 ; INSTRUCCION
INC CX ; INCREMENTA CX EN 1 RET ; RETORNA
9 DIRECTIVAS EL LENGUAJE ENSAMBLADOR PERMITE USAR DIFERENTES
ENUNCIADOS QUE PERMITEN CONTROLAR LA MANERA EN QUE UN PROGRAMA
ENSAMBLA Y LISTA. ESTOS ENUNCIADOS, LLAMADOS DIRECTIVAS, ACTUAN
SOLO DURANTE EL ENSAMBLADO DE UN PROGRAMA Y NO GENERA CODIGO
EJECUTABLE DE MAQUINA.
10 DIRECTIVA: PAGE Y TITLE SINTAXIS : PAGE [LONGITUD] [ , ANCHO]
EJEMPLO: PAGE 60 , 132 ; 60 LINEAS POR PAGINA ; Y 132 CARACTERES
; POR LINEA LA DIRECTIVA PAGE DESIGNA EL NUMERO MAXIMO DE LINEAS
PARA LISTAR EN UNA PAGINA Y EL NUMERO MAXIMO DE CARACTERES POR
LINEA. SE UTILIZA LA DIRECTIVA TITLE PARA HACER QUE SE IMPRIMA UN
TITULO EN LA LINEA 2 DE CADA PAGINA. SINTAXIS : TITLE NOMBRE
Comentario EJEMPLO: TITLE EJERCICIO1 Mi primer programa
11 DIRECTIVA: SEGMENT FORMATO : NOMBRE OPERACIÓN OPERANDO
COMENTARIO NOMBRE SEGMENT [OPCIONES] ; INICIA SEGMENTO . . .
NOMBRE ENDS ; FIN DEL SEGMENTO UN PROGRAMA ENSAMBLADO EN FORMATO
.EXE CONSISTE EN UNO O MAS SEGMENTOS. UN SEGMENTO DE PILA DEFINE
EL ALMACEN DE LA PILA, UN SEGMENTO DE DATOS DEFINE LOS ELEMENTOS
DE DATOS Y UN SEGMENTO DE CODIGO PROPORCIONA UN CODIGO
EJECUTABLE.
12 DIRECTIVA: SEGMENT FORMATO: NOMBRE SEGMENT ALINEACION COMBINAR
‘CLASE’ EL OPERANDO DE UN ENUNCIADO SEGMENT PUEDE
TENER TRE TIPOS DE OPCIONES: ALINEACION, COMBINAR Y CLASE,
CODIFICADAS EN ESTE FORMATO. TIPO ALINEACION: PARA. ALINEA EL
SEGMENTO CON EL LIMITE DE UN PARRAFO, DE MANERA QUE LA POSICION
INICIAL ES MULTIPLO DE 16. SE CONSIDERA POR DEFECTO. TIPO
COMBINAR: STACK, COMMON, PUBLIC , AT. INDICA SI EL SEGMENTO SE
COMBINA CON OTROS SEGMENTOS CUANDO SON ENLAZADOS DEPUES DE
ENSAMBLAR.
13 DIRECTIVA: SEGMENT TIPO CLASE: CODE, DATA, STACK. LA ENTRADA
CLASE, ENCERRADA ENTRE APOSTROFES, ES UTILIZADA PARA AGRUPAR
SEGMENTOS CUANDO SE ENLAZAN. EJEMPLO: NOMBRE SEGMENT PARA STACK
‘STACK’
14 DIRECTIVA: PROC EL SEGMENTO DE CODIGO CONTIENE EL CODIGO
EJECUTABLE DE UN PROGRAMA. TAMBIEN TIENE UNO O MAS
PROCEDIMIENTOS, DEFINIDOS CON LA DIRECTIVA PROC. UN SEGMENTO QUE
TIENE SOLO UN PROCEDIMIENTO PUEDE APARECER COMO SIGUE: NOMBRE
OPERACION OPERANDO COMENTARIO NOMSEGMTO SEGMENT PARA NOMPROC PROC
FAR ; UN PROCEDIMIENTO . ; DENTRO DEL . ; SEGMENTO DE . ; CODIGO
NOMPROC ENDP NOMSEGMTO ENDS
15 DIRECTIVA: PROC EL OPERANDO FAR EN ESTE CASO ESTA RELACIONADO
CON LA EJECUCION DEL PROGRAMA. CUANDO SE SOLICITA LA EJECUCION DE
UN PROGRAMA, EL CARGADOR DE PROGRAMAS DEL DOS UTILIZA ESTE NOMBRE
DE PROCEDIMIENTO COMO EL PUNTO DE ENTRADA PARA LA PRIMERA
INSTRUCCIÓN A EJECUTAR. LA DIRECTIVA ENDP, INDICA EL FIN
DEL PROCEDIMIENTO. LA DIRECTIVA ENDS DEFINE EL FINAL DE UN
SEGMENTO.
16 DIRECTIVA: ASSUME UN PROGRAMA UTILIZA EL REGISTRO SS PARA
DIRECCIONAR LA PILA, AL REGISTRO DS PARA DIRECCIONAR EL SEGMENTO
DE DATOS Y AL REGISTRO CS PARA DIRECCIONAR EL SEGMENTO DE CODIGO.
PARA TAL FIN SE TIENE QUE INDICAR AL ENSAMBLADOR EL PROPOSITO DE
CADA SEGMENTO EN EL PROGRAMA: OPERACION OPERANDO ASSUME
SS:NOMSEGPILA, DS:NOMSEGDATO, CS:NOMSEGCODIGO TAMBIEN PUEDE
CONTENER UNA ENTRADA PARA ES. ASSUME ES:NOMSEGEXTRA
17 DIRECTIVA: END ASI COMO ENDS FINALIZA UN SEGMENTO Y LA
DIRECTIVA ENDP FINALIZA UN PROCEDIMIENTO. UNA DIRECTIVA END
FINALIZA TODO EL PROGRAMA. SU FORMATO ES: OPERACION OPERANDO END
[NOMBREPROCEDIMIENTO]
18 COMO INICIALIZAR UN PROGRAMA (.EXE) PARA SU EJECUCION PAGE
60,132 TITLE P04ASM1 ESTRUCTURA DE UN PROGRAMA .EXE
;—————————————————————————–
STACKSG SEGMENT PARA STACK ‘STACK’ … STACKSG
ENDS
;—————————————————————————–
DATASG SEGMENT PARA ‘DATA’ … DATASG ENDS
;——————————————————————————
CODESG SEGMENT PARA ‘CODE’ BEGIN PROC FAR ASSUME
SS:STACKSG,DS:DATASG,CS:CODESG MOV AX , DATASG ; OBTIENE
DIRECCION DEL SEGMENTO DE DATOS MOV DS , AX ; ALMACENA DIRECCION
EN DS … MOV AX , 4C00H ; PETICION INT 21H ; SALIDA A DOS
BEGIN ENDP CODESG ENDS END BEGIN
19 COMO INICIALIZAR UN PROGRAMA (.EXE) PARA SU EJECUCION CUANDO
EL DOS CARGA UN PROGRAMA .EXE DEL DISCO A LA MEMORIA PARA SU
EJECUCION CONSTRUYE UN PSP DE 256 BYTES (100H) EN UN LIMITE DE
PARRAFO EN MEMORIA INTERNA DISPONIBLE Y ALMACENA EL PROGRAMA
INMEDIATAMENTE DESPUES DEL LIMITE. DESPUES EL DOS: CARGA LA
DIRECCION DEL SEGMENTO DE CODIGO EN EL CS; CARGA LA DIRECCION DE
LA PILA EN EL SS; Y CARGA LA DIRECCION DEL PSP EN LOS REGISTROS
DS Y ES. EL CARGADOR DOS INICIALIZA LOS REGISTROS CS:IP Y SS:IP,
PERO NO LOS REGISTROS DS Y ES.
20 EJEMPLO DE UN PROGRAMA EXE PAGE 60,132 TITLE P04ASM1 (EXE)
OPERACIONES MOVER Y SUMAR
;—————————————————————————–
STACKSG SEGMENT PARA STACK ‘STACK’ DW 32 DUP(0)
STACKSG ENDS
;—————————————————————————–
DATASG SEGMENT PARA ‘DATA’ FLDA DW 250 FLDB DW 125
FLDC DW ? DATASG ENDS
;——————————————————————————
CODESG SEGMENT PARA ‘CODE’ BEGIN PROC FAR ASSUME
SS:STACKSG,DS:DATASG,CS:CODESG MOV AX , DATASG ; SE ASIGNA
DIRECCION DE DATASG MOV DS , AX ; EN REGISTRO DS MOV AX , FLDA ;
MOVER 0250 A AX ADD AX , FLDB ; SUMAR 0125 A AX MOV FLDC , AX ;
ALMACENAR SUMA EN FLDC MOV AX , 4C00H ; PETICION INT 21H ; SALIDA
A DOS BEGIN ENDP ; FIN DE PROCEDIMIENTO CODESG ENDS ; FIN DE
SEGMENTO END BEGIN ; FIN DE PROGRAMA
21 COMO INICIALIZAR EN MODO PROTEGIDO EN MODO PROTEGIDO BAJO EL
80386 Y PROCESADORES POSTERIORES, UN PROGRAMA PUEDE DIRECCIONAR
HASTA 16 MEGABYTES DE MEMORIA. EL USO DE DWORD PARA ALINEAR
SEGMENTOS EN DIRECCIONES DE PALABRAS DOBLES INCREMENTA LA
VELOCIDAD DE ACCESO A MEMORIA PARA BUSES DE 32 BITS. LA DIRECTIVA
.386 INDICA AL ENSAMBLADOR QUE ACEPTE INSTRUCCIONES QUE SON SOLO
PARA ESTOS PROCESADORES; EL OPERANDO U$E32 INDICA QUE GENERE
CODIGO APROPIADO PARA EL MODO PROTEGIDO DE 32 BITS.
22 COMO INICIALIZAR EN MODO PROTEGIDO .386 NOMSEG SEGMENT DWORD
U$E32 LA INICIALIZACION DEL REGISTRO DEL SEGMENTO DE DATOS PODRIA
PARECERSE A ESTO, YA QUE EN ESTOS PROCESADORES EL REGISTRO DS
TIENE UN TAMAÑO DE 16 BITS. MOV EAX , DATASEG ; OBTIENE LA
DIRECCION DEL SEGMENTO ; DE DATOS MOV DS , AX ; LAS INSTRUCCIONES
STI, CLI, IN Y OUT NO ESTAN DISPONIBLES EN MODO PROTEGIDO
23 DIRECTIVAS SIMPLIFICADAS DE SEGMENTOS LOS ENSAMBLADORES DE
MICROSOFT Y DE BORLAND PROPORCIONAN ALGUNAS FORMAS ABREVIADAS
PARA DEFINIR SEGMENTOS. PARA USAR ESTAS ABREVIATURAS, INICIALICE
EL MODELO DE MEMORIA ANTES DE DEFINIR ALGUN SEGMENTO. EL FORMATO
GENERAL INCLUYENDO EL PUNTO INICIAL ES .MODEL modelo de memoria
EL MODELO DE MEMORIA PUEDE SER: TINY , SMALL , MEDIUM , COMPACT O
LARGE.
24 DIRECTIVAS SIMPLIFICADAS DE SEGMENTOS LOS REQUISITOS DE CADA
MODELO SON: MODELO Nº SEGMENTOS CODIGO Nº SEGMENTOS
DATOS TINY * * SMALL 1 1 MEDIUM MAS DE 1 1 COMPACT 1 MAS DE 1
LARGE MAS DE 1 MAS DE 1 PUEDE UTILIZAR CUALQUIERA DE ESTOS
MODELOS PARA UN PROGRAMA AUTONOMO ( UN PROGRAMA QUE NO ESTE
ENLAZADO A OTRO). EL MODELO TINY ESTA DESTINADO PARA USO
EXCLUSIVO DE PROGRAMAS .COM, LOS CUALES TIENEN SUS DATOS, CODIGO
Y PILA EN UN SEGMENTO.
25 DIRECTIVAS SIMPLIFICADAS DE SEGMENTOS LOS FORMATOS GENERALES
(INCLUYENDO EL PUNTO INICIAL) PARA LAS DIRECTIVAS QUE DEFINE LOS
SEGMENTOS DE LA PILA, DE DATOS Y DE CODIGO SON: . STACK
[TAMAÑO] . DATA . CODE [NOMBRE] CADA UNA DE ESTAS
DIRECTIVAS HACEN QUE EL ENSAMBLADOR GENERE EL ENUNCIADO SEGMENT
NECESARIO Y SU CORRESPONDIENTE ENDS.
26 EJEMPLO PROGRAMA EXE CON DIRECTIVAS SIMPLIFICADAS PAGE 60,132
TITLE P04ASM1 (EXE) OPERACIONES MOVER Y SUMAR
;—————————————————————————–
. MODEL SMALL . STACK 64 ; SE DEFINE LA PILA . DATA FLDA DW 250
FLDB DW 125 FLDC DW ?
;——————————————————————————
. CODE ; SE DEFINE EL SEGMENTO DE CODIGO BEGIN PROC FAR MOV AX ,
DATASG ; SE ASIGNA DIRECCION DE DATASG MOV DS , AX ; EN REGISTRO
DS MOV AX , FLDA ; MOVER 0250 A AX ADD AX , FLDB ; SUMAR 0125 A
AX MOV FLDC , AX ; ALMACENAR SUMA EN FLDC MOV AX , 4C00H ;
PETICION INT 21H ; SALIDA A DOS BEGIN ENDP ; FIN DE PROCEDIMIENTO
END BEGIN ; FIN DE PROGRAMA
27 DIRECTIVAS .STARTUP Y .EXIT MASM 6.0 INTRODUJO LAS DIRECTIVAS
.STARTUP Y .EXIT PARA SIMPLIFICAR LA INICIALIZACION Y TERMINACION
DEL PROGRAMA. .STARTUP GENERA LAS INSTRUCCIONES PARA INICIALIZAR
LOS REGISTROS DE SEGMENTOS. .EXIT GENERA LAS INSTRUCCIONES DE LA
INT 21H, FUNCION 4CH PARA LA SALIDA DEL PROGRAMA.
28 DEFINICION DE DATOS SINTAXIS: [NOMBRE] Dn EXPRESION NOMBRE:
HACE REFERENCIA A UN ELEMENTO DE DATO DIRECTIVAS: DB (DEFINE
BYTE) , DW (PALABRA) , DD (DOBLE PALABRA) , DF (PALABRA LARGA) ,
DQ (PALABRA CUADRUPLE) , DT (DIEZ BYTES) EXPRESION: ES UN
OPERANDO QUE PUEDE CONTENER UN SIGNO DE INTERROGACION PARA
INDICAR UN ELEMENTO NO UTILIZADO.
29 DEFINICION DE DATOS SINTAXIS: [NOMBRE] Dn
CONTADOR_DE_REPETICIONES DUP [EXPRESION] DW 6 DUP (?) ; 6
PALABRAS NO INICIALIZADAS DB 5 DUP (10) ; 5 PALABRAS CON AAAAA DB
‘PRIMERA PRACTICA DE ASM’ OTROS: DD DEFINE UNA
PALABRA DOBLE DF DEFINE UNA PALABRA LARGA (6 BYTES) DQ DEFINE UNA
PALABRA CUADRUPLE DT DEFINE DIEZ BYTES
30 DIRECTIVA EQU NO DEFINE ELEMENTOS DE DATOS. EN LUGAR DE ESO,
DEFINE UN VALOR QUE EL ENSAMBLADOR PUEDE USAR PARA SUSTITUIR EN
OTRAS INSTRUCIONES: LO SIGUIENTE: TIMES EQU 10 FIELDA DB TIMES
DUP(?) ES EQUIVALENTE A, FIELDB DB 10 DUP(?)