elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / Programación C/C++ / C para interrupciones en: 21 Diciembre 2011, 01:38 am
Se utilizan en la práctica códigos en C para implementar interrupciones al procesador?

Simplemente por curiosidad, porque en la materia Arquitectura de Computadores nos piden escribir códigos de interrupciones en C, y después compilarlas a Ensamblador ( :¬¬ ).

Será que hoy en día hay alguna persona en el planeta que se dedique a programar en lenguaje ensamblador (quitando casos académicos)? Tal vez es un poco ignorante de mi parte preguntarlo, pero hay que tener mucho huevo para pasar 8 horas metiendo ensamblador, yo estoy deseando que termine el semestre jaja.

Saludos.

12  Programación / ASM / Re: [Ensamblador 8086] Recursión y uso del stack en: 20 Diciembre 2011, 01:45 am
Muchas gracias  ;D
13  Programación / ASM / Re: [Ensamblador 8086] Recursión y uso del stack en: 19 Diciembre 2011, 19:14 pm
Te agradezco la ayuda!

Me queda una duda con respecto a lo que se guarda en el stack cuando se llama a la recursión.

Con respecto a lo siguiente:

por otro lado, en la stack se almacenan los parámetros del procedimiento y las variables locales que se inidican en el mismo, por ejemplo, los valores de los registers ax, cx y bx.

Cuando decís que se guardan los registros ax, cx y bx, te referís a que se guardan automáticamente al hacer la llamada recursiva? Porque he visto ejemplos que eso se hace a mano (push) y no se me ocurre por qué debería hacerse en todos los casos.

Lo que sí pienso que se está guardando en el stack es el valor del registro IP, porque ret lo que hace es un salto al valor apuntado al tope de la pila, y pienso que ese tope, para que todo ande bien, debería ser el valor de IP al momento de llamar a la recursión. ¿Es correcto esto?

Ahora me surgió una duda con respecto al direccionamiento de memoria.
Siempre las palabras en memoria son del largo de los registros? O sea, para un procesador de 16 bits, los registros serán de largo 16 bits y la memoria estará dividida en bloques de 16 bits siempre?

14  Programación / ASM / [Ensamblador 8086] Recursión y uso del stack en: 19 Diciembre 2011, 07:25 am
Buenas gente.

Tengo bastantes dudas sobre el uso del stack en procedimientos recursivos, y sobre el diseño mismo de dichos procedimientos.

Me gustaría que alguien pueda aclararme la situación explicándome un poco o mediante alguna bibliografía que hable sobre eso específicamente, porque he googleado pero no encuentro mucha info.

Voy a citar un ejemplo de mi material de estudio para que quede claro, es el procedimiento recursivo asociado a el cálculo de la función factorial.

Código:
fact proc
   cmp ax,0  ; comparo n con cero
   je esCero
   dec ax    ; ajusto par·metro para la invocaciÛn
   call fact ; realizo la llamada recursiva
   inc ax
   mov cx,ax ; guardo ax pues mul lo modifica
   mul bx    ; calculo el paso recursivo
   mov bx,ax ; asigno el resultado del paso 
     ; recursivo
   mov ax,cx ; restauro ax
   jmp fin
esCero:
   mov bx,1  ; asigno el resultado del paso base
fin:
 ret
fact endp


Algunas dudas:
   
  • Cuando se llama recursivamente al procedimiento, no es igual que un salto con jmp no? Qué se hace al llamar a un procedimiento?
  • Cuál es la función del stack al llamar a la recursión? Qué es lo que se almacena en el stack? (supongo que es la dirección de la instrucción siguiente a la línea que contiene la llamada recursiva, y que cuando se hace "ret" se estaría regresando a dicho lugar, pero no estoy seguro)
    Esto se procesa automáticamente mediante la Unidad de Control?



Les agradezco cualquier ayuda que puedan brindarme .

Saludos.




15  Programación / Programación C/C++ / Re: AYUDA metodo de ordenamiento selccion en: 18 Diciembre 2011, 21:26 pm
La idea del Selection Sort es ordenar un arreglo, manteniendo el arreglo ordenado del lado izquierdo, y el desordenado del lado derecho (o como más te guste).

A medida que el algoritmo avanza, el tamaño de la parte ordenada va creciendo, y el de la parte desordenada decreciendo.

Un seudocódigo podría ser el siguiente:

Código:
SelectionSort( array desordenado, largo de array ) -> array ordenado
    desde i=0 a (largo-2)
         pos_men = menor(array, i) // posicion del elemento con menor valor desde i
         intercambiar(pos_men,i)
    fin-desde

Como verás se busca el elemento más chico (se guarda su posición en pos_men) y se inserta en el primer lugar, luego entre los que quedan por ordenar se busca el más chico y se inserta en el segundo lugar, así hasta el anteúltimo elemento. El último elemento quedará automáticamente ordenado en su lugar.

Si N es el largo del array, para insertar el primer elemento se hacen N-1 comparaciones, para el segundo N-2 y así sucesivamente hasta 1.

Por lo que en total se hacen (N-1 + N-2 + N-3 +...+ 2 + 1) comparaciones, o lo que es lo mismo la sumatoria de los primero N-1 naturales, cuyo valor es:

N(N-1)/2

Espero se haya entendido.

Saludos.




Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines