Click here to load reader
Upload
fernando-tapia-vaca
View
3
Download
0
Embed Size (px)
DESCRIPTION
practico ensamblador
Citation preview
UNIVERSIDAD AUTNOMA GABRIEL REN MORENO FACULTAD CIENCIAS EXACTAS Y TECNOLOGA.CARRERA DE INGENIERA INFORMTICA INF221 LENGUAJE ENSAMBLADOR GRUPO SA, SB, SC Semestre/Ao: 2/2014
EJERCICIOS DE PROGRAMACIN EN LENGUAJE ENSAMBLADOR PARA LA ARQUITECTURA x86-32(INTEL ARCHITECTURE 32 BITS)
USO DEL NASM, GCC Y OLLYDBG
Escribir en lenguaje ensamblador y probar el correcto funcionamiento de los siguientes programas de 32 bits para la arquitectura x86-32 de Intel:
1.-) Escribir un programa que sume 10 veces 5 y almacenar dicha suma en memoria en una variable denominada resultado. (Hacer uso de la instruccin loop).
2.-) Dado un arreglo A de enteros positivos de longitud N, calcular la suma de los elementos del mismo y almacenar el resultado en memoria en una variable llamada suma.
Realizar al efecto 3 programas:
a) usando el modo de direccionamiento indirecto por registrob) con el modo base + ndicec) utilizando el modo ndice escalado.
3.-) Programa que escriba o almacene los nmeros del 1 al 10 en un arreglo de 10 posiciones (inicialmente no inicializados).
4.-) Contar el nmero de elementos que sean pares y de los impares de un arreglo A de enteros positivos de longitud N y almacenar el resultado en las variables de memoria llamadas respectivamente pares e impares.
5.-) Contar el nmero de elementos positivos y negativos de un arreglo A de enteros con signo de longitud N y almacenar el resultado en las variables de memoria llamadas respectivamente positivos e negativos.
6.-) Dado un vector A de enteros positivos de longitud N, crear un nuevo vector que contenga los nmeros de dicho vector que sean mltiplos de 3.
7.-) Buscar el valor mximo y mnimo de un arreglo llamado A de enteros con signo de longitud N y almacenar el mximo y mnimo en las variables de memoria llamadas max y min respectivamente.
8.-) Definir una cadena de caracteres MAYUSCULAS, como por ejemplo PROGRAMACION ENSAMBLADOR (donde dicha cadena finaliza con el carcter ASCII NUL para indicar el fin de la misma) y convertir la misma a minsculas.
9.-) Escribir un programa que calcule x = 16*y sin utilizar la instruccin de multiplicacin.
10.-) Escribir un programa que calcule x = y/32 sin utilizar la instruccin de divisin.
11.-) Definir dos nmeros a multiplicar llamados respectivamente: multiplicando y multiplicador y realizar la multiplicacin por software de los mismo mediante el algoritmo de sumas repetidas, almacenando el resultado del producto en memoria en la variable llamada producto.
12.-) Definir dos nmeros a multiplicar llamados respectivamente: multiplicando y multiplicador y realizar la multiplicacin por software de los mismo pero ahora mediante el algoritmo de desplazamiento y sumas repetidas, almacenando el resultado del producto en memoria en la variable llamada producto.
13.-) Definir un nmero y contar el nmero de bits que se encuentran en 1, almacenar el resultado en memoria en la variable llamada unos.
14.-) Dado un arreglo A de enteros con signo de longitud N. El programa debe duplicar el contenido de cada elemento del arreglo, almacenando el resultado en la misma posicin del arreglo original A.
15.-) Dado dos arreglos A y B de enteros con signo de la misma longitud N, crear un nuevo arreglo C donde C[i] = A[i] + B[i]
16.-) Dado dos arreglos A y B de enteros con signo de la misma longitud N, crear un nuevo arreglo C donde C[i] = A[i] / 2 + 2*B[i]
17.-) Dado un arreglo A de enteros positivos de longitud N calcular el promedio de todos los elementos del mismo, almacenando el resultado en memoria en una variable llamada promedio.
18.-) Dado un arreglo A de enteros positivos de longitud N, calcular la suma de los elementos que se encuentran en las posiciones impares (ndice impar) (A[1] + A[3] + A[5] + ..), almacenando el resultado en memoria en una variable llamada suma_impar, el resultado de dicha suma.
19.-) Definir las variables inicializadas: 0x80, 0x40 a nivel de byte y las siguientes variables 0x2000, 0x8000 a nivel de word y realizar un programa que realice las siguientes multiplicaciones sea considerando en un caso como nmeros sin signo (SS) y en otro como nmeros con signo (CS):
a) 0x80 * 0x40
b) 0x8000 * 0x2000
c) 0x80 * 0x8000
Verificar los resultados realizando las respectivas multiplicaciones en decimal.
20.-) Definir las variables inicializadas: 0x80, 0x16 a nivel de byte y las siguientes variables 0x2000, 0x10, 0x1000 a nivel de word y realizar un programa que realice las siguientes divisiones, sea considerando en un caso como nmeros sin signo (SS) y en otro como nmeros con signo (CS):
a) 0x2000 / 0x40
b) 0x80 / 0x16
c) 0x100000 / 0x2000
d) 0x2000 / 0x1000
Verificar los resultados realizando las respectivas multiplicaciones en decimal.
revisado: septiembre 2014Corrado Vallet