5

Click here to load reader

ensamblador

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