Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
Curso 2009/10
Cuaderno de Prcticas
Laboratorio de Fundamentos de
Computadores
PARTE II:
Programacin en ensamblador
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
La Mquina Rudimentaria:
Arquitectura del repertorio de instrucciones
1. Registros y memoria visibles al programador
1.1. Registros de propsito general: R1-R7
Los registros R1-R7 son registros de 16 bits que se pueden utilizar como registros
fuente y destino en operaciones aritmeticolgicas.
Ejemplos:
Instruccin
Operacin realizada
ADD R1,R2,R3
R3 R1 + R2
SUB R1,R2,R3
R3 R1 - R2
Operacin realizada
LOAD 4(R1),R2
R2 Mem(R1 + 4)
STORE R1,-10(R2)
Mem(R2 - 10) R1
1.2. El registro R0
El registro R0 es un registro especial, tambin de 16 bits, que siempre contiene el
valor 0. Este registro puede utilizarse como registro fuente (por ejemplo para
inicializar otros registros a 0), pero no debe utilizarse para guardar el resultado de
una operacin.
Ejemplos:
Instruccin
Operacin realizada
ADD R0,R0,R3
R3 0
LOAD 16(R0),R2
R2 Mem(16)
STORE R1,200(R0)
Mem(200) R1
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Significado
Se actualiza si
Cero
Negativo
1.4. La memoria
La memoria contiene 256 palabras de 16 bits. Las direcciones de memoria son por
tanto de 8 bits (de la 0 a la 255).
Operacin realizada
ADD R1,R2,R3
R3 R1 + R2
SUB R1,R2,R3
R3 R1 - R2
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Operacin realizada
ADDI R1,#8,R3
R3 R1 + 8
SUBI R1,#10,R3
R3 R1 - 10
Operacin realizada
LOAD 4(R1),R2
R2 Mem(R1 + 4)
STORE R1,10(R2)
Mem(R2 + 10) R1
Facultad de Informtica
Universidad Complutense de Madrid
Instruccin
Operacin realizada
BR 56
PC 56
3. Repertorio de instrucciones
3.1. Instrucciones aritmeticolgicas
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
El proceso de ensamblado
1. Directivas de ensamblador
Las directivas de ensamblador controlan acciones auxiliares que se realizan
durante el proceso de ensamblado, tales como reservar posiciones de memoria,
inicializar posiciones de memoria a un determinado valor, definir etiquetas, indicar
el inicio y el final del programa, o definir macros. Las directivas no son traducibles a
cdigo mquina.
2. El ensamblado de programas
El proceso de ensamblado consiste en la traduccin de un programa escrito en
ensamblador a lenguaje mquina. Esta traduccin es directa e inmediata, ya que
las instrucciones en ensamblador no son ms que nemotcnicos de las
instrucciones mquina que ejecuta directamente la CPU.
2.1. Ensamblado de programas sin macros
Si el programa no contiene macros, lo editaremos con un editor de texto (por
ejemplo, notepad) con la extensin .asm, por ejemplo: prog.asm
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
posten prog.asm
posten
prog.asm
Facultad de Informtica
Universidad Complutense de Madrid
posten
Curso 2009/10
prog.asm
Esta orden genera un fichero con el mismo nombre, pero con extensin .cod
(prog.cod), que contiene el programa binario en lenguaje mquina.
El procedimeinto completo sera el siguiente:
pren prog.mr macros.mr
posten prog.asm
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Mr.exe
Se abrir la siguiente ventana:
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Suma = X + Y
X, si X Y
Mayor =
Y, si X < Y
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
Inicio
R1 X
R2 Y
R2 R1 + R2
Suma R2
R2 Y
no
R1 R2
Mayor R1
Mayor R2
Fin
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
Tras el diagrama de flujo en donde, como vemos, hemos reflejado las etiquetas, las
variables intermedias, etc, editaremos el cdigo sustituyendo las expresiones por
instrucciones en ensamblador, resultando el siguiente listado, que corresponde al
programa fuente:
.BEGIN ini
Valor1: .DW
Valor2: .DW
Suma: .RW
Mayor: .RW
ini:
then:
fin:
2
7
1
1
;
;
;
;
palabra
palabra
palabra
palabra
para
para
para
para
Valor1 inicializada a 2
Valor2 inicializada a 7
guardar resultado de Suma
guardar resultado de Mayor
load Valor1(R0),R1
load Valor2(R0),R2
add R1,R2,R3
store R3,Suma(R0)
sub R1,R2,R3
bge then
store R2,Mayor(R0)
br fin
store R1,Mayor(R0)
;
;
;
;
;
;
;
;
;
Carga Valor1 en R1
Carga Valor2 en R2
Suma R1 + R2 y guarda resultado en R3
Guarda en memoria resultado de la suma
Realiza resta para comparar valores
Si R1 >= R2 salta a etiqueta then
R2 > R1 Guarda R2 en Mayor
Salta a fin del programa
R1 >= R2 Guarda R1 en Mayor
.END
; Fin de programa
NOTAS IMPORTANTES:
1) Las directivas (.BEGIN, .END, .DW, .RW) deben escribirse en MAYSCULA
2) Al editar el programa, introducir una lnea extra en blanco al final del cdigo
fuente (detrs de la directiva .END)
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
ESPECIFICACIONES:
Parte A:
Realizar un programa que multiplique dos nmeros naturales de longitud WORD
usando la instruccin de suma (ADD).
El algoritmo es sencillo y puede expresarse brevemente en pseudo-PASCAL de
la siguiente manera:
PROGRAM Mult;
CONST
Val1 = 35;
Val2 = 58;
VAR
Mult1, Mult2 : WORD;
Resul
: DOUBLE WORD;
BEGIN
Mult1 := Val1;
Mult2 := Val2;
Resul := 0;
WHILE Mult1 > 0 DO BEGIN
Resul := Resul+Mult2;
Mult1 := Mult1-1;
END;
END.
Parte B:
Realizar una macro que realice la operacin de multiplicacin y reescribir el
programa para que utilice dicha macro.
El diagrama de flujo asociado a este programa sera el siguiente:
Facultad de Informtica
Universidad Complutense de Madrid
Inicio
R1 Val1
R2 Val2
R3 0
NO
Resul R3
R1 > 0
SI
R3 R3 + R2
R1 R1 - 1
Fin
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
SOLUCIN:
Parte A:
PRACT1A.ASM
.BEGIN
ini
valor1: .DW 3
valor2: .DW 5
produ: .RW 1
ini:
bucle:
fin:
load Valor1(R0),R1
load Valor2(R0),R2
add R0,R0,R3
subi R1,#1,R1
bl fin
add R2,R3,R3
br bucle
store R3,produ(R0)
.END
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Parte B:
MACROS.MR
.DEF
mul $1,$2,$3
bucle:
add R0,R0,$3
subi $1,#1,$1
bl fin
add $2,$3,$3
br bucle
fin:
.ENDDEF
NOTA IMPORTANTE
Al editar la macro, introducir una lnea extra en blanco al final del cdigo fuente
(detrs de la directiva .ENDDEF)
PRACT1B.MR
.BEGIN
ini
valor1: .DW 3
valor2: .DW 5
produ: .RW 1
ini:
load Valor1(R0),R1
load Valor2(R0),R2
mul R1,R2,R3
store R3,produ(R0)
.END
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
ESPECIFICACIN:
Parte A:
Realizar un programa que multiplique un escalar por un vector de 8
componentes y deposite el resultado en un segundo vector, utilizando la
estructura de control "bucle FOR. Para ello se utilizar la macro de multiplicar
realizada en la Prctica 1.
IMPORTANTE: tanto el valor escalar como las componentes del vector deben
ser nmeros naturales.
Parte B:
Realizar un programa que genere un vector resultado de invertir el orden de
las componentes de otro dado (ambos vectores de 8 componentes)
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
condiciones,
ESPECIFICACIN:
Disear un programa que calcule el mximo comn divisor de dos nmeros
por el algoritmo de Euclides.
PROGRAM Mcd;
CONST
A := 51; B := 595;
VAR
BEGIN
Num1 := A; Num2 := B;
IF Num1 > 0 AND Num2 > 0 THEN
BEGIN
WHILE Num1 <> Num2 DO
IF Num1 > Num2 THEN Num1 := Num1-Num2
ELSE Num2 := Num2-Num1;
Resul := Num1
END
ELSE Resul := 0;
END.
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
R1 A
R2 B
R3 0
NO
SI
R1 > 0
NO
SI
R2 > 0
R1 < > R2
NO
SI
R1
> R2
NO
SI
R1 R1-R2
Resul R3
Fin
R3 R1
NO
R2 R2-R1
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
ESPECIFICACIN:
Disear, implementar y verificar un programa en ensamblador que realice la
siguiente operacin:
Dada una matriz cuadrada NxN, el programa calcula el nmero de
componentes con valor cero, con valor positivo y con valor negativo que hay
en cada fila de la matriz. Los resultados se almacenan en tres vectores,
Vcero, Vpos y Vneg respectivamente, de dimensin N cada uno de ellos.
Ejemplo (dimensin 3x3):
Matriz=
1 1 0
-1 0 1
-1 -1 -1
Vcero=
1
1
0
Vpos=
2
1
0
0
Vneg= 1
3
Facultad de Informtica
Universidad Complutense de Madrid
Curso 2009/10
Inicio
Curso 2009/10
Facultad de Informtica
Universidad Complutense de Madrid
Diagrama de flujo:
Inicio
R1 0
No
R1 < N
S
Vcero[R1] 0
Vpos[R1] 0
Vneg[R1] 0
R1 0
No
R1 < N
R1 R1 + 1
S
R2 0
No
R2 < N
A[R1,R2] > 0
R1 R1 + 1
No
S
Vpos[R1] Vpos[R1] +1
No
A[R1,R2] < 0
Vneg[R1] Vneg[R1] + 1
Vcero[R1] Vcero[R1] + 1
R2 R2 + 1
Fin