Práctica 1 Introducción a la programación en ensamblador

Anuncio
Práctica 1
Introducción a la programación en ensamblador
1. Generalidades
2. Introducción
3. Cuestiones
1. Generalidades
El desarrollo de las prácticas consistirá en una breve introducción del tema por parte del profesor,
aunque la mayor parte del tiempo se dedicará al trabajo individual e independiente del alumno.
En cada sesión el alumno deberá contestar a las cuestiones planteadas y entregar una hoja de
resultados al finalizar. Estas hojas de resultado junto con la actitud de alumno durante las
sesiones servirán para la evaluar y calificar las prácticas (que representan un 10% de la nota
final).
A partir de la práctica 2 el alumno debe traer algún medio de almacenamiento para guardar el
trabajo realizado en cada sesión.
2. Introducción
En esta primera práctica se hará uso de los conceptos básicos de la programación en
ensamblador, para ello se proponen una serie de cuestiones sencillas que el alumno debe
contestar en papel haciendo uso de los apuntes de ensamblador proporcionados en la copistería y
que están disponibles en la Web del departamento www.atc.us.es
Antes de contestar a las cuestiones de este boletín lea con detenimiento los apuntes de
ensamblador 80x86.
3. Cuestiones
A continuación se presentan una serie de cuestiones que el alumno debe contestar.
3.1. Uso de instrucciones aisladas.
1. Escriba una instrucción que almacene en el registro EAX lo que hay en el registro EBX.
1
Práctica 1: Introducción a la programación en ensamblador
2. Escriba una instrucción que almacene en el registro ECX lo que hay en la memoria en la
posición apuntada por EDX.
3. Escriba una instrucción que almacene el EAX el resultado de sumar los registros EAX y EBX.
4. Escriba un trozo de código que almacene en EAX el resultado de resta ECX y EBX.
5. Escriba un trozo de código que realice la multiplicación de los registros ECX y EDX, indique
dónde se almacenan los resultados.
3.2. Interpretación de instrucciones
Si el contenido de los registros EAX, EBX, ECX y EDX; y el de la memoria es el que se muestra;
Indique cómo se modifican (en el caso de que se modifiquen) después de la ejecución de cada
uno de los siguientes trozos de código (los códigos son independientes entre sí)
017F FF80
0000 1000
AABB CCDD
FFFF FFFF
2
00
11
22
33
44
55
66
77
Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla
6.
MOV EAX, [EBX]
ADD AEX, ECX
MOV [EBX], EAX
7.
MUL EAX, 200
MOV EAX, EDX
8.
MOV EBX, [EBX]
AND EBX, EAX
MOV [1000h], EBX
9.
CMP AX, 0
JNZ diferentes
MOV EAX, 5000h
diferentes: MOV EAX, 2000h
10.
CMP AX, 0
JNZ diferentes
MOV EAX, 5000h
JMP fuera
diferentes: MOV EAX, 2000h
fuera: NOP
3
Práctica 1: Introducción a la programación en ensamblador
3.3. Traducción de expresiones aritmético/lógicas
Traduzca a ensamblador las siguientes expresiones escritas en lenguaje C, considere la siguiente
declaración de variables:
int i,z;
byte v;
long int a, b c;
11.
i++;
12.
v=v+37;
13.
b=4*(a+3);
14.
a=b&c;
4
Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla
15.
z=1/(4*c);
3.4. Traducción de estructuras de control
Traduzca a ensamblador las siguientes sentencias escritas en lenguaje C. Considere que todas
las variables son de 32 bits.
16.
if (!b) a=a+3;
17.
if (b<30) a=a+3;
else a=a-3;
18.
do{
d=d+a-3;
}while (d<80);
5
Práctica 1: Introducción a la programación en ensamblador
19.
a=0;
for (i=1;i<10;i++) a=a*i;
20.
for (i=0;i<a;i++) b=b*b;
3.5. Interpretación de instrucciones en ensamblador.
Traduzca a lenguaje C las siguientes instrucciones en ensamblador, indique en cada caso el
tamaño de las variables usadas.
21.
MOV ECX 10
ini:
MOV EAX, a
MUL ECX
MOV a, EAX
LOOP ini
6
Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla
22.
MOV CL, a
SAR b, CL
23.
CMP
JGE
MOV
JMP
AX, 3
else
EBX, 1000
fin
else:
MOV EBX,-1000
fin:
NOP
24.
MOV EAX, a
MOV EBX, 20
ini:
MUL
DEC
CMP
JNZ
NOP
10
EBX
EBX, 0
ini
7
Práctica 1: Introducción a la programación en ensamblador
25.
LEA
LEA
LEA
MOV
ESI,
EDI,
EDX,
ECX,
datos
mayores
menores
16
MOV
CMP
JBE
MOV
ADD
jmp
EAX, [ESI]
EAX, 16
else
[EDI],EAX
EDI, 4
while
do:
else:
MOV [ECX],EAX
ADD ECX, 4
while:
ADD ESI, 4
CMP ESI,100
JBE do
NOP
8
Departamento de Arquitectura y Tecnología de Computadores: Universidad de Sevilla
Apellidos
DNI
Nombre
Turno
Fecha
Nota
Copie en esta hoja el resultado de las cuestiones que se indican.
Cuestión 7
Cuestión 15
Cuestión 18
9
Práctica 1: Introducción a la programación en ensamblador
Cuestión 20
Cuestión 22
Cuestión 25
10
Descargar