Descargar

Introducción al lenguaje ensamblador

Enviado por Pablo Turmero


    edu.red 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

    edu.red 2 Objetivo Terminal Conocer los registros internos y la forma como operan en un microprocesador.

    edu.red 3 Objetivo Instruccional Conocer y comprender las partes y el contenido de un programa fuente.

    edu.red 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

    edu.red 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

    edu.red 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 : ? , _ , $ , @ , .

    edu.red 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

    edu.red 8 INSTRUCCIONES EJEMPLO: [IDENTIFICADOR] OPERACION [OPERANDO(S)] ; COMENTARIO COUNTER DB 1 ; DIRECTIVA MOV AX , 0 ; INSTRUCCION INC CX ; INCREMENTA CX EN 1 RET ; RETORNA

    edu.red 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.

    edu.red 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

    edu.red 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.

    edu.red 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.

    edu.red 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’

    edu.red 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

    edu.red 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.

    edu.red 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

    edu.red 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]

    edu.red 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

    edu.red 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.

    edu.red 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

    edu.red 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.

    edu.red 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

    edu.red 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.

    edu.red 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.

    edu.red 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.

    edu.red 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

    edu.red 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.

    edu.red 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.

    edu.red 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

    edu.red 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(?)