Está en la página 1de 19

Assembler

Universidad Nacional de La Matanza


Dpto. Ingeniería e Investigaciones Tecnológicas
Arquitectura de Computadoras

Profesor Titular: Ing. Fernando Szklanny


Autor: Jaír E. Hnatiuk
Ver. 0.6 (2017)
Clasificación de los lenguajes de programación

Peor performance,
Menor dificultad
Mayor portabilidad

Máquina virtual
Java,.NET
Interpretados
Alto nivel Perl, PHP,etc.

Compilados
Lenguajes
Arquitectura determinada
C++,Delphi,VB,etc.

Bajo nivel
Assembler

Mejor performance,
Mayor dificultad
Menor portabilidad

Sistemas de Computación I / Arquitectura de Computadoras 2


Lenguajes de programación

Alto nivel Bajo nivel (assembler)


●Programador no conoce estructura de CPU ●El programador necesita conocer a fondo
●Abstracción del acceso a memoria
la estructura de la CPU
●Acceso explícito a posiciones de memoria
●Programador no se preocupa por la memoria
●Programador debe ser muy consciente de
disponible.
●Compilador determina el modo de
las limitaciones de la memoria.
●Programador determina el modo de
direccionamiento
●Múltiples y flexibles tipos de datos
direccionamiento
●Tipos de datos limitados
●Muchas decisiones recaen en el compilador.
●Control absoluto de lo que hará CPU
Frecuentes “cajas negras”
●Programación “a la go to” y con mucha
●Admiten paradigmas modernos de

programación (estructurada, objetos, etc). dificultad símil estructurada.


●Acceso a E/S a veces limitado mediante
●Acceso a E/S mediante S.O.,

frecuentemente mediante controladores. S.O. y frecuentemente solo en forma


directa.

Sistemas de Computación I / Arquitectura de Computadoras 3


Funcionamiento de un compilador

Código Lenguaje Código Binario


fuente simbólico Objeto ejecutable

Bibliotecas

Compilación

Compilador: programa de computadora que transforma programas escritos en un lenguaje de alto


nivel en lenguaje máquina. Son específicos para cada procesador. El proceso consta de los siguientes
pasos:
1. Traducción: el código fuente en alto nivel se transforma a lenguaje simbólico (assembler)
2. Ensamble: se traduce el lenguaje simbólico a código de máquina u objeto (binario)
3. Enlace: el objeto se vincula a otros programas objeto (linkedición)
La compilación para máquina virtual (o framework) produce un objeto que en lugar de ejecutarse
directamente en CPU, lo hará sobre dicha máquina virtual.
Sistemas de Computación I / Arquitectura de Computadoras 4
Proceso de ensamblado

Fuente en Análisis sintáctico, Código


lenguaje simbólico Generación del binario
ops aritméticas,
código objeto
gen. t. de símbolos

1er pasada 2da pasada

Tabla de
símbolos
Ensamblado

Ensamblado: proceso lineal, relativamente simple, de reemplazo entre las sentencias de lenguaje
simbólico y sus unívocas equivalencias en lenguaje máquina (binario).
Ensamblador: herramienta de software que además del proceso antes mencionado ofrece
prestaciones adicionales tales como:
●uso de rótulos simbólicos (etiquetas),

●permitir al programador especificar ubicaciones en memoria de variables y programas (origen),

●inicialización de valores en memoria,

●proveer expresiones mnemotécnicas para todas las instrucciones en lenguaje de máquina y

los modos de direccionamiento, y otras más.


Sistemas de Computación I / Arquitectura de Computadoras 5
Características del microcontrolador Motorola 68HC11

●Estructura de tres buses (E/S mapeada en memoria)


●Bus de datos de 8 bits, bus de direcciones de 16 bits

●En detalle: modos de direccionamiento y set de instrucciones $0000


●64 K de memoria (máximo)
R/W
$00FF
●El mapa puede variar entre versiones del HC11
N/A
$1000
E/S
Registro de código de condición (CCR):

$1041
N/A
$B600
7 0 R/W
S X H I N Z V C $B7FF
N/A
Carry / Borrow $C000
Overflow
Zero
ROM
Negative
I-Interrupt mask $FFFF
Half carry (bit 3)
X-Interrupt mask
Stop disable Mapa de memoria
default del THRSim

Sistemas de Computación I / Arquitectura de Computadoras 6


Características del microcontrolador Motorola 68HC11
DISPOSITIVO R/W ROM EPROM EEPROM

MC68HC11A0 256 0 0 0
MC68HC11A1 256 0 0 512
MC68HC11A7 256 8K 0 0
MC68HC11A8 256 8K 0 512
MC69HC11D0 192 0 0 0
MC68HC11D3 192 4K 0 0
MC68HC711D3 192 0 4K 0
MC68HC11ED0 512 0 0 0
MC68HC11E0 512 0 0 0
MC68HC11E1 512 0 0 512
MC68HC11E8 512 12K 0 0
MC68HC11E9 512 12K 0 512
MC68HC711E9 512 0 12K 512
MC68HC811E2 256 0 0 2K
MC68HC11E20 768 20K 0 512
MC68HC711E20 768 0 20K 512
MC68HC11F1 1K 0 0 512

Sistemas de Computación I / Arquitectura de Computadoras 7


Características del microcontrolador Motorola 68HC11

Registros de CPU:

Acumulador A (8 bits) Acumulador B (8 bits) El Acc D es un registro de 16 bits, cuya parte alta es el
Acc A y parte baja el Acc B, de 8 bits cada uno.

Acumulador D (16 bits)

Registros índice

Registro índice X (16 bits)

Registro índice Y (16 bits)

Contador de programa y puntero de pila: El contador de programa se incrementa


automáticamente luego de leer cada código
de operación u operando, de forma que
Stack Pointer (16 bits)
siempre apuntará a la siguiente posición de
memoria.
Program Counter (16 bits) Por eso los programas se ejecutan desde las
direcciones bajas de memoria hacia las altas.

Sistemas de Computación I / Arquitectura de Computadoras 8


Características del microcontrolador Motorola 68HC11
Modos de direccionamiento

Inmediato (IMM)
La instrucción va seguida del operando. Puede ser de uno o dos bytes (que se leerán consecutivos, primero
la parte alta). Se indica con un signo numeral antes del operando.
Por ejemplo: LDAA #1 (Carga en el acumulador A el valor 1)
Aunque el operando se encuentra en memoria, su dirección se obtiene del PC.

Extendido (EXT)
La instrucción va seguida de la dirección efectiva del operando. Dicha dirección es de 16 bits, por lo que se
indica como HH LL (parte alta, parte baja) sin dejar espacios. La dirección estará comprendida en el intervalo
$0000 - $FFFF. El signo $ (moneda) indica que se trata de un número en hexadecimal.
Por ejemplo: LDAA $2001 (Carga en el acumulador A el contenido de la dirección 2001H)

Directo (DIR)

El operando se encuentra en la página cero de la memoria (los primeros 256 bytes, cuyas direcciones inician
con $00xx). La instrucción va seguida de la parte baja (8 bits) de la dirección efectiva del operando.
La mitad de dirección proporcionada estará comprendida en el intervalo $00 - $FF, la dirección real efectiva
estará en el intervalo $0000 - $00FF. El signo $ (moneda) indica que se trata de un número en hexadecimal.
Por ejemplo: LDAA $01 (Carga en el acumulador A el contenido de la dirección 0001H)

Sistemas de Computación I / Arquitectura de Computadoras 9


Características del microcontrolador Motorola 68HC11
Modos de direccionamiento

Indexado (IND,X e IND,Y)


La instrucción va seguida del desplazamiento (8 bits) a aplicar al índice X o Y. Se indica además el índice a
emplear. Por ejemplo: LDAA 1,X (Carga en el acumulador A el valor contenido en la dirección apuntada por el
ìndice X más 1. Supongamos que X=7000H, entonces se cargará en A el contenido de la dirección 7001H).
El programador se encarga de inicializar y controlar los registros índice. El desplazamiento siempre debe
indicarse como una constante (en el HC11 no se admite emplear un registro para indicar el offset). Dicha
constante puede expresarse indistintamente en binario, decimal, octal o hexadecimal.
Relativo (REL)
Este modo solo aplica a saltos condicionales (BRANCH). Indica a CPU que aplique al PC un desplazamiento
hacia atrás o hacia adelante. Para ello emplea 8 bits con negativos en complemento a la base, dando un rango
de (-128;127). Sin embargo el salto lo efectúa luego de leer el código de operación y el desplazamiento, por lo
que se puede decir que realmente permite saltos 126 bytes hacia atrás y 129 hacia adelante. Note que se trata
de bytes, no de instrucciones (una instrucción puede constar de uno o más bytes). El software ensamblador
permite que el programador indique los saltos con etiquetas y se encarga él mismo de reemplazarlas por los
desplazamientos adecuados. Sin embargo siempre debe recordarse la limitación del alcance de los saltos.
Por ejemplo: BRA $FE (salta dos posiciones hacia atrás, lo que da como resultado un bucle infinito en BRA $FE).

Inherente (INH)
La instrucción no requiere acceso a memoria para obtener los operandos (si es que los necesita) sino que
los mismos están disponibles en registros. El código de operación indicará de cuáles se trata.
Por ejemplo: INX (incrementa el registro índice X).

Sistemas de Computación I / Arquitectura de Computadoras 10


Set de instrucciones del microcontrolador Motorola 68HC11

La misma instrucción tiene un código de Ciclos de CPU insumidos en la ejecución de la


operación distinto según el modo de instrucción según el modo de direccionamiento
direccionamiento empleado.

Cómo afecta al CCR la ejecución de cada instrucción:


Modos de direccionamiento admitidos:
- no lo cambia
●REL: Relativo
0 lo fija en cero (siempre)
●IMM: Inmediato
Operandos: 1 lo fija en uno (siempre)
●EXT: Extendido
hh: parte alta del operando Δ según la operación será cero o uno
●IND,X: Indexado (X)

●IND, Y: Indexado (Y)


ll: parte baja del operando
●DIR: Directo
dd: modo directo (solo offset)
●INH: Inherente
rel: modo relativo (solo desplaz.)
ii: modo inmediato

Sistemas de Computación I / Arquitectura de Computadoras 11


Estructura de un programa en assembler

●Archivos de texto simple o plano (sin formato)


●En cada línea se indica una instrucción o pseudoinstrucción (directiva)

●Cada columna se separa con tabuladores o espacios

Etiquetas Mnemónico Operandos Comentarios


(instrucción)

main LDAA #$10 Cargo en acc A el valor 10 hexa

●Todo lo que se indique a continuación de los operandos será ignorado por el ensamblador
●Se pueden incluir comentarios de línea completa comenzándola con el carácter * (asterisco)

●No distingue mayúsculas/minúsculas, tampoco es obligatorio que todas las líneas tengan etiqueta

●Aunque la mayoría de las directivas al ensamblador requieren etiqueta, otras no las admiten

Convención de prefijos en el ensamblador THRSim:


$ hexadecimal
@ octal
% binario
‘ ascii (comilla simple)
# modo de direccionamiento inmediato

Sistemas de Computación I / Arquitectura de Computadoras 12


Directivas al ensamblador

●Mejoran la claridad del código


●Facilitan el mantenimiento posterior

●Su uso está sujeto a la compatibilidad con el ensamblador

●Las emplea el ensamblador para generar el código binario ejecutable

●Cumplen una función similar a #define, #include, etc, en C/C++

●CPU no procesa las directivas, no tienen código de operación equivalente

●Puede observar en un ensamblado que no tienen cod op (imagen)

●Es fundamental diferenciarlas correctamente de las instrucciones

Sistemas de Computación I / Arquitectura de Computadoras 13


Directivas al ensamblador

ORG: Set origin to.


Sintaxis:
ORG <dirección/etiqueta>
Determina la dirección a partir de la que se ubicará el código siguiente. De no emplearse
las direcciones se asignan de forma consecutiva.
No admite etiqueta (a su izquierda). La dirección de origen puede expresarse como
números o como una etiqueta.

Ejemplo:

Sistemas de Computación I / Arquitectura de Computadoras 14


Directivas al ensamblador
EQU: Equate to.
Sintaxis:
<etiqueta> EQU <dirección/etiqueta/valor>
Es el equivalente a #define en C/C++. La etiqueta (de la izquierda) se asociará al
valor/dirección de la derecha. Si se especifica una etiqueta a la derecha, la misma debe
haberse definido. EQU puede usarse para crear símbolos de 8 o 16 bits.
Ejemplos:
• DATO ahora se utiliza como
constante. Observe que en el
código se usa modo
inmediato. Si se omite el
numeral se interpretará como
la dirección de memoria 7.
• MAIN se usa en conjunto con
la directiva ORG.

Sistemas de Computación I / Arquitectura de Computadoras 15


Directivas al ensamblador
RMB: Reserve memory bytes
Sintaxis:
<etiqueta> RMB <cantidad de bytes/etiqueta>
Reserva una cantidad de bytes y la asocia al identificador etiqueta (de la izquierda).
Aunque no define un tipo de dato, es similar a la declaración de variable en C/C++.
(Asigna memoria, determina tamaño, asocia un nombre). La etiqueta queda relacionada a
la dirección del byte más significativo (en palabras multi byte).
El ensamblador reemplazará <etiqueta> (de la izquierda) por la dirección
correspondiente. Para palabras multibyte puede indicársele al ensamblador que realice
alguna operación aritmética con dicha dirección.
Ejemplos:
• Las reservas dirIni y dirFin son de 2 bytes porque se
utilizarán para direcciones de memoria, que en el HC11
ocupan 16 bits.
• Recuerde que RMB no inicializa con ningún valor.

ZMB es una directiva similar a RMB que además llena con ceros
la memoria reservada. El simulador THRSim no la soporta.

Sistemas de Computación I / Arquitectura de Computadoras 16


Directivas al ensamblador

Ejemplos:
• Observe el uso combinado de EQU y RMB. Primero se
define que el identificador Word equivale a 2. Luego se
utiliza para reservar 2 bytes de memoria para las
direcciones.
• Lo mismo se hace con byte.

• La reserva gCont es de dos bytes. Sin


embargo la instrucción CLR gCont opera
sobre palabras de un byte, por tanto
fijará en cero la parte alta de gCont.
• La instrucción CLR gCont+1 limpia la
parte baja.

¿Qué pasaría si deja un espacio entre gCont y +1?


¿En qué momento se realiza la suma gCont+1?

Sistemas de Computación I / Arquitectura de Computadoras 17


Directivas al ensamblador

FCB: Form constant byte


Sintaxis:
<etiqueta> FCB <valores separados por coma>
Define un vector cuyos elementos ocupan un byte cada uno, y lo asocia a <etiqueta>.
Esta directiva asigna memoria y la inicializa. Puede usarse para un solo elemento.

Ejemplos:
• Observe que tanto vector como vector2 se generaron en memoria. Los valores de vector2
expresados como ascii o números negativos fueron convertidos por el ensamblador.
• Cuando se utiliza el símbolo “vector” o “vector2” se asocia a la dirección inicial del mismo.
• Se ha observado un bug del THRSim que falla en este punto.

FCB y DB son sinónimos.

Sistemas de Computación I / Arquitectura de Computadoras 18


Directivas al ensamblador

FDB: Form constant double byte


Sintaxis:
<etiqueta> FDB <valores separados por coma>
Define un vector cuyos elementos ocupan dos bytes cada uno, y lo asocia a <etiqueta>.
Esta directiva asigna memoria y la inicializa. Puede usarse para un solo elemento.
Ejemplos:

• Ahora los vectores están compuestos por elementos de 16 bits. Note que los valores 8 y 43 (que
podrían expresarse en 8 bits) se indican como 0008 y 002B respectivamente.

FDB y DW son sinónimos.

Sistemas de Computación I / Arquitectura de Computadoras 19

También podría gustarte