ORGANIZACIÓN DE COMPUTADORAS
Integrantes: Santiago Noboa, Jorge Herreria
Nivel: 3 Sistemas
Tema: Asembler
1. INTRODUCCIÓN
Los ensambladores son programas que procesan los enunciados del programa origen en
lenguaje ensamblador y los traducen en archivos en lenguaje máquina que son ejecutados
por un microprocesador o un microcontrolador.
Los ensambladores permiten que los programas origen se escriban y se editen en una
computadora para generar un código ejecutable en otra computadora. El archivo en
lenguaje objeto ejecutable resultante se carga y se ejecuta en el sistema destino.
Asembler es un código que maneja las funciones del procesador, memoria, mediante líneas
de comando, es el primer lenguaje de programación, base para los developers actuales
como C++, Visual Basic, C# entre otros.
2. DEFINICIÓN BÁSICA DE UN ENSAMBLADOR
El lenguaje simbólico que se utiliza para codificar los programas origen que se procesan
por el ensamblador es llamado lenguaje ensamblador.
Este lenguaje es una colección de símbolos mnemónicos que representan: operaciones
(mnemónicos de instrucciones para la máquina o de directrices para el ensamblador),
nombres simbólicos, operadores y símbolos especiales.
El lenguaje ensamblador proporciona códigos de operación de los mnemónicos para todas
las instrucciones de la máquina contenidas en la lista de instrucciones.
Además, el lenguaje ensamblador contiene mnemónicos directrices, los cuales especifican
acciones auxiliares que se llevan a cabo por el ensamblador.
Estas directrices no siempre son traducidas a lenguaje maquina.
Un programador escribe el programa origen en lenguaje ensamblador utilizando cualquier
editor de textos o procesador de palabras que sea capaz de producir una salida de texto en
ASCII.
Una vez que el código origen ha sido escrito, el archivo origen es ensamblado mediante su
procesamiento a través de algún ensamblador. 1
3. ESTRUCTURA DE UN PROGRAMA
; HOLA.ASM
; Programa clasico de ejemplo. Despliega una leyenda en pantalla.
STACK SEGMENT STACK ; Segmento de pila
DW 64 DUP (?) ; Define espacio en la pila
STACK ENDS
DATA SEGMENT ; Segmento de datos
SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena
DATA ENDS
CODE SEGMENT ; Segmento de Codigo
ASSUME CS:CODE, DS:DATA, SS:STACK
INICIO: ; Punto de entrada al programa
MOV AX,DATA ; Pone direccion en AX
MOV DS,AX ; Pone la direccion en los registros
MOV DX,OFFSET SALUDO ; Obtiene direccion del mensaje
MOV AH,09H ; Funcion: Visualizar cadena
INT 21H ; Servicio: Funciones alto nivel DOS
MOV AH,4CH ; Funcion: Terminar
INT 21H
CODE ENDS
END INICIO ; Marca fin y define INICIO
4. INSTRUCCIONES BÁSICAS
20 - ADD [mem]: Sumar: AX = AX + el contenido de la dirección de memoria
60 - ADDF [mem]: Suma números de 32 bits: En BX y AX queda el resultado de la suma de estos más el
contenido de [mem] y mem+1
11 - AND [dest,orig]: Y lógico, hace un Y lógico entre todos los bits de los dos operandos escribiendo el
resultado en el destino. Los parámetros pueden ser direcciones de memoria o Registros.
04 - CLA: Hace AX = 0
25 - CLC: Limpia el Carry Flag. C = 0
27 - CMC: Complementa (invierte) el Carry Flag. Si C = 1 vuelve C = 0 y viceversa.
32 - CMP [mem]: Compara AX con [mem], si AX es mayor, Z=0 N=0, si es igual Z=1 N=0, si es menor Z=0 N=1
09 - DEC [dest]: Decremento en 1 el destino especificado (Si el destino queda = 0, se vuelve Z = 1)
23 - DIV [mem]: Dividir: AX = AX / el contenido de la dirección de memoria, BX=AX % el contenido de la dir
de memoria (BX = modulo o residuo).
63 - DIVF [mem]: Division: BX y AX = BX y AX / [mem]y mem+1, en CX queda el residuo de la division en
entero de 16 bits
41 - EAP: Escribe en Pantalla el contenido del registro AX
65 - FTOI: Conversión de Real a Entero: Convierte un número Real(32bits) a su equivalente en entero BX y
AX en un entero (16bits), el Resultado queda en AX. Los registros de control cambian de acuerdo al numero
convertido: "Z" si el numero es cero, "N" si el numero es negativo, "O" si el numero real es mayor de 65535
99 – HLT: Terminar Programa (todo programa lleva esta instrucción para indicarle al simulador que el
programa ha terminado su ejecución)
80 - IN [registro,Puerto]: Lleva al Registro el valor retornado por el puerto especificado
08 - INC [dest]: Incrementa en 1 el destino especificado, el parámetro puede ser una dirección de memoria o
un registro.
64 – ITOF: Conversión de Entero a Real: Convierte un número entero (16bits) almacenado en AX al mismo
número pero representado en Real IEEE754(32bits), el Resultado de la conversión queda en BX (bits mas
significativos) y AX. Los registros de control cambian de acuerdo al numero convertido: "Z" si el número es
cero, "N" si el numero es negativo.
35 - JC [mem]: Saltar si el Carry Flag esta activado. Si C = 1, PC = contenido de memoria
31 - JEQ [mem]: Saltar si son iguales Si Z = 1, PC = contenido de la memoria.
34 - JMA [mem]: Saltar si es Mayor. Si Z = 0 y N = 0, PC = contenido de memoria.
33 - JME [mem]: Saltar si es Menor. Si N = 1, PC = contenido de la memoria
30 - JMP [mem]: Salto incondicional. PC = dirección de memoria donde esta la siguiente instrucción a
ejecutar"
36 - JNC [mem]: Saltar si el Carry Flag no esta activado. Si C = 0, PC = contenido de memoria
39 - JNE [mem]: Saltar si no son iguales. Si Z = 0, PC = contenido de memoria
38 - JNO [mem]: Saltar si el Overflow Flag no esta activado. Si O = 0, PC = contenido de memoria
37 - JO [mem]: Saltar si el Overflow Flag esta Activado
01 - LDA [mem]: Cargue en AX el contenido de la dirección de Memoria especificada. (hay casos donde es
mejor usar MOV si se desea pasar datos sin tener que pasarlos por AX)
50 - LDB [mem]: La instrucción carga en AX el contenido de memoria almacenado en [mem] + BX
55 - LDF [mem]: Carga en BX y AX un numero de 32 bits (IEEE) que esta almacenado en la dir [mem] y
mem+1. En BX quedan los digitos mas Significativos
40 – LDT: Lee un valor del Teclado y lo lleva al registro AX
29 - LOOP [mem]: Decrementa CX y salta a la Pos de memoria si CX no es cero.
10 - MOV [dest,orig]: Copia el valor almacenado en el origen al destino. El destino y/o origen pueden ser
registros o direcciones de memoria o combinación de estos.
42 – MSG: Muestra un mensaje en pantalla
22 - MUL [mem]: Multiplicar: AX = AX * el contenido de la dirección de memoria. (Si el número resultante
supera su longitud en binario de 16 bits, este resultado se parte almacenando los bits más significativos en el
Registro BX.)
62 - MULF [mem]: Multiplicación: BX y AX = BX y AX * [mem]y mem+1
90 – NOP: Esta operación no hace nada.
12 - NOT [destino]: NO lógico, invierte los bits del operando formando el complemento del primero.
13 - OR [dest,orig]: O inclusive lógico, todo bit activo en cualquiera de los operándoos será activado en el
destino
81 - OUT puerto,registro: Escribe en el puerto especificado, el valor del registro
07 - POP [registro]: Trae de la Pila el último valor llevado por PUSH (indicado por el registro SP) y lo
almacena en el registro especificado.
06 - PUSH [registro]: Envía el valor del registro especificado a la pila
15 - ROL [dest,veces]: Rota los bits a la izquierda las veces especificadas(en decimal), los bits que salen por
la izquierda re-entran por la Derecha. En el Carry Flag queda el último bit rotado.
16 - ROR [dest,veces]: Rota los bits a la derecha las veces especificadas(en decimal), los Bits que salen por la
derecha re-entran por la izquierda. El Carry Flag guarda el último bit rotado.
17 - SHL [dest,veces]: Desplaza los bits a la izquierda el numero de veces especificado(en decimal),
agregando ceros a la derecha, el Carry Flag guarda ultimo bit desplazado.
18 - SHR [dest,veces]: Desplaza los bits a la Derecha el numero de veces especificado(en decimal),
agregando ceros a la izquierda, el Carry Flag guarda ultimo bit desplazado.
02 - STA [mem]: Guarde el contenido de AX en la dirección de Memoria especificada
51 - STB [mem]: guarda el contenido de AX en la dirección [mem] + BX
26 – STC: Pone el Carry Flag. C = 1
56 - STF [mem]: Guarda en [mem] y mem+1 el contenido de BX y AX
21 - SUB [mem]: Restar: AX = AX - el contenido de la dirección de memoria
61 - SUBF [mem]: Resta el numero de 32 bits: BX y AX = BX y AX - [mem] y mem+1
03 - XAB: Intercambia los valores de los registros AX y BX (Esta instrucción no necesita parámetros.)
14 - XOR [dest,orig]:O exclusivo, realiza un O exclusivo entre los operándos y almacena el resultado en
destino.2
5. EJERCICIOS
El siguiente código es ejecutado en el simulador del procesador, simuproc
SUMA
cla;
ldt;
mov 10,ax;
msg +;
ldt;
add 10;
msg =;
eap ;
hlt;
RESTA
cla;
ldt;
mov B,ax;
msg -;
ldt;
mov C,ax;
mov ax,B;
msg =
sub C;
eap;
hlt;
MULTIPLICACIÓN
cla;
ldt;
mov 9,ax;
msg *;
ldt;
mul 9;
msg =;
eap ;
hlt;
DIVISIÓN
cla;
ldt;
mov B,ax;
msg /;
ldt;
mov C,ax;
mov ax,B;
div C;
msg =;
eap;
hlt;
6. BIBLIOGRAFÍA
Universidad Nacional de la Matanza SimuProc Introducción a la Informática
(MANUAL DE SIMUPROC).
7. LINKOGRAFÍA
http://proton.ucting.udg.mx/dpto/maestros/mateos/novedades/ensamblador/68HC11.html
http://homepage.mac.com/eravila/asmix862.html
http://www.mitecnologico.com/Main/EstructuraProgramaEnEnsamblador
1
http://proton.ucting.udg.mx/dpto/maestros/mateos/novedades/ensamblador/68HC11.html
2
Universidad Nacional de la Matanza SimuProc Introducción a la Informática (MANUAL DE SIMUPROC)