• Viernes 8 de Noviembre de 2024, 20:50

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Anthares

Páginas: [1]
1
ASM (Ensamblador) / Re: creacion disco booteable con bootloader y kernel + rutina
« en: Domingo 7 de Noviembre de 2010, 15:45 »
ja van a pensar que soy una ignorante de miercoles!!!  :ouch:  pero hace pila que estoy luchando con esto  :hitcomp:  y cada vez que hago un cambio me deja de andar.

Y se que es por que no entiendo mucho!

En fin, resumo mi problema.......

Tengo una tarea donde tengo que crear:

- un bootloader.
- un microkernel.
- unas rutinas de atencion a interrupciones
- un disket booteable que contenga todo lo anterior.

1)    Cuando escribo el  archivo bootloader.asm si bien se como armar las estructuras de las GDT, LDT , IDT etc etc etc  no tengo ni la mas palidea idea en que partes del archivo tengo que hacer estas cosas:

times 510-($-$$) db 0    
times 1024-($-$$) db 0
times 1536-($-$$) db 0

Es decir yo se que cada sector del disket tiene 512 y que cuando se llena el primer sector hay que poner times 510-($-$$) db 0     seguido de         dw 0AA55h                

Pero como se bien en que altura del archivo tengo que ir poniendo estos llenados???

2) Al final para crear el disket booteable me quedo todo asi:

bootloader.bin  1538 o sea 4 sectores
kernel.bin 69763  o sea 14 sectores
rutinaX.bin      1 sector


Mi otra duda es como la cantidad de sectores es 19 >18 ..... como tengo que hacer con int 3h para leer con el tema de los cilindros y los head!!

Por que yo hago esto:

EI: juntando mensajes.

en el script hago esto:

dd if=/dev/zero of=boot.img bs=512 count=19
dd if=bootloader.bin of=boot.img bs=512 count=4
dd if=kernel.bin of=boot.img bs=512 count=14 seek=4
dd if=keyboard.bin of=boot.img bs=512 count=1 seek=18 conv=sync,notrunc

Saludos

2
ASM (Ensamblador) / Re: creacion disco booteable con bootloader y kernel + rutina
« en: Domingo 7 de Noviembre de 2010, 01:51 »
Muchas pero muchas gracias! si creo que fue eso jaja me lo habia comido :P

Gracias por responder tan rapido  :lol: , un beso  :hola:

3
ASM (Ensamblador) / creacion disco booteable con bootloader y kernel + rutina
« en: Sábado 6 de Noviembre de 2010, 23:24 »
Hola, estoy teniendo problemas con el booteo de un disket que yo hice que contiene un bootloader + kernel + rutina de interrupcion

Tengo los siguientes archivos

bootloader.bin  que ocupa 3 secotres
kernel.bin que ocupa 14 sectores
rutinaX.bin que ocupa 15 sectores

Entonces cuando voy a crear un disket booteable hago lo siguiente:

dd if=/dev/zero of=boot.img bs=512 count=15
dd if=bootloader.bin of=boot.img bs=512 count=3
dd if=kernel.bin of=boot.img bs=512 count=14 seek=3
dd if=rutinaX.bin of=boot.img bs=512 count=1 seek=17 conv=sync,notrunc

Pero no me bootea, el disket.

Yo se que con seek indico los sectores que tengo saltar.
Con count indico la cantidad de sectores que usa.

En fin se agradece cualquier ayuda por que llevo pila con esto aunque sea tonto

Saludos :hola:

4
ASM (Ensamblador) / Re: Bootloader GDT, dudas varias
« en: Lunes 1 de Noviembre de 2010, 18:49 »
;)  si no importa algo me defiendo con el ingles gracias!  :devil:

5
ASM (Ensamblador) / Re: Bootloader GDT, dudas varias
« en: Lunes 1 de Noviembre de 2010, 18:39 »
Gracais x la aclaracion la verdad que habia entendido mal  :argh:

Saludos  :)  :hola:

6
ASM (Ensamblador) / Re: Bootloader GDT, dudas varias
« en: Lunes 1 de Noviembre de 2010, 16:42 »
Gracias yo miro ahi, yo me referia igual a como se llena los campos  del descriptor que esta dentro de uno de los registros de dicha tabla, pero lo voy a mirar del manual muchas gracias  :)

7
ASM (Ensamblador) / Re: Bootloader GDT, dudas varias
« en: Lunes 1 de Noviembre de 2010, 12:56 »
Hola, si la idea es pasar a modo protegido, pero antes en modo real crear las estrucutras de la GDT para luego usar al pasar y ya tenerlas cargadas.

Esta la etiqueta que indica al compilador que hay que escribir luego a  32 bits o sea con [BITS 32]  

Por otro lado creo que antes de hacer el cambio tengo que cargar un bit en un registro para hacer el cambio de modo.

Pero mi gran duda era como carga el descriptor de la GDT

Gracias!!!! por responderme  :hola:

8
ASM (Ensamblador) / Bootloader GDT, dudas varias
« en: Lunes 1 de Noviembre de 2010, 02:05 »
Hola, estoy intentando entender crear un bootloader en intel 80386 usando nasm.

Soy novata con este tema asi que perdonen si pregunto cosas obvias pero la verdad es que estoy muy mareada.

Si bien entiendo para que sirve la estructura GDT, LDT y como acceder a los distintos segmentos que esten definidos en los descriptores que hay en ellas cargados no entiendo mucho como se crean estas estructuras.

Estoy mirando un articulo que queria poner la ulr pero me dice que no tengo privilegios para hacerlo, le pego mas abajo como hace.

Algunas cosas le entiedo pero otras no, seguramente no me ayuda en que este en ingles.

Mi duda son las siguientes:

1)
Para crear un semento en memoria tengo que crear un descriptor en la tabla GDT que lo defina, entre esos datos esta la base y el limite del mismo.

La base es una direccion de memoria y el limite es el tamaño del segmento verdad?

Ese tamaño es en bytes verdad?

2)

El descriptor tiene 2 Double word que tienen esta estructura:

la primera Double word tiene esta estrucutra      :
Bits                    Function                      Description
0-15                Limite 0:15              los primeros 16  bits del limite del segmento.
16-31            Base 0:15                      los primeros 16 bits  de la base del segmento

la segunda Double word tiene esta estrucutra      :

Bits                    Function                    Description
0-7                    Base 16:23           Bits 16-23 de la base del segmento
8-12                    tipo                           tipo del segmento y atributos
13-14            nivel de privilegio     que para el sitema operativo tiene que ser 0 el privilegio mas alto
15                    bandera de presencia
16-19            limete 16:19           los bits del  16-19 del limite del registro
20-22             atributos                   atributos que dependen del segmento que este definiendo (son interpretados segun el segmento que defina)
23                    granularidad           dice que este usado con el limite determina el tamaño del segmento
24-31            Base 24:31           los ultimos bits para la base del segmento

Alguien me puede explicar como se hace para llenar el descriptor dada la base y el limite?

En el ejemplo entiendo que comienzan llenando la primera palabra doble, usando dw. Es decir la van completando de a 16 bits.

Y la segunda la va completando usando db es decir de a bytes.

Pero estoy muy mareada y no enteindo como llena los valores

3) Lo otro que no entiendo es como uno selecciona en que areas de la memoria le conviene tener los distintos segmentos a usar: codigo, datos, pila

En fin perdonen mi ignorancia y espero que me puedan explicar por que tengo que hacer una tarea y a este ritmo voy a perder de lo lindo.  :hitcomp:

Muchas gracias  :hola:

Código: ASM
  1. [BITS 16]       ; We need 16-bit intructions for Real mode
  2.  
  3. [ORG 0x7C00]    ; The BIOS loads the boot sector into memory location 0x7C00
  4.  
  5.         cli                     ; Disable interrupts, we want to be alone
  6.  
  7.         xor ax, ax
  8.         mov ds, ax              ; Set DS-register to 0 - used by lgdt
  9.  
  10.         lgdt [gdt_desc]         ; Load the GDT descriptor
  11.  
  12.         mov eax, cr0            ; Copy the contents of CR0 into EAX
  13.         or eax, 1               ; Set bit 0
  14.         mov cr0, eax            ; Copy the contents of EAX into CR0
  15.  
  16.         jmp 08h:clear_pipe      ; Jump to code segment, offset clear_pipe
  17.  
  18.  
  19. [BITS 32]                       ; We now need 32-bit instructions
  20. clear_pipe:
  21.         mov ax, 10h             ; Save data segment identifyer
  22.         mov ds, ax              ; Move a valid data segment into the data segment register
  23.         mov ss, ax              ; Move a valid data segment into the stack segment register
  24.         mov esp, 090000h        ; Move the stack pointer to 090000h
  25.  
  26.         mov byte [ds:0B8000h], 'P'      ; Move the ASCII-code of 'P' into first video memory
  27.         mov byte [ds:0B8001h], 1Bh      ; Assign a color code
  28.  
  29. hang:
  30.         jmp hang                ; Loop, self-jump
  31.  
  32.  
  33. gdt:                    ; Address for the GDT
  34.  
  35. gdt_null:               ; Null Segment
  36.         dd 0
  37.         dd 0
  38.  
  39. gdt_code:               ; Code segment, read/execute, nonconforming
  40.         dw 0FFFFh
  41.         dw 0
  42.         db 0
  43.         db 10011010b
  44.         db 11001111b
  45.         db 0
  46.  
  47. gdt_data:               ; Data segment, read/write, expand down
  48.         dw 0FFFFh
  49.         dw 0
  50.         db 0
  51.         db 10010010b
  52.         db 11001111b
  53.         db 0
  54.  
  55. gdt_end:                ; Used to calculate the size of the GDT
  56.  
  57.  
  58.  
  59. gdt_desc:                       ; The GDT descriptor
  60.         dw gdt_end - gdt - 1    ; Limit (size)
  61.         dd gdt                  ; Address of the GDT
  62.  
  63.  
  64.  
  65.  
  66. times 510-($-$$) db 0           ; Fill up the file with zeros
  67.  
  68.         dw 0AA55h                ; Boot sector identifyer
  69.  

9
C/C++ / Re: Problema Con Entrada Estandar En C
« en: Domingo 6 de Abril de 2008, 14:26 »
Hola muchas muchas gracias lo voy a intentar con eso.

Tambien te cuento que vi en el deitel que dice que en los sistemas Linux el EOF se ingresa con <enter> + <control + d >

Intente con eso y lo que yo habia hecho funciono como  yo queria pero voy a intentar con lo tuyo por que si anda esta mucho mejo que no tenga que entrar un enter antes

Saludos y muchas muchas gracias  :D  :lol:

10
C/C++ / Problema Con Entrada Estandar En C
« en: Domingo 6 de Abril de 2008, 04:41 »
Hola  :o  tengo quiero leer de la entrada estandar de a un carácter, ya sea una letra del alfabeto, un símbolo especial, fin de linea etc… hasta que agluien ingrese un fin de archivo, es decir un "control + d".

Para ello probe en usar: fgetc, getc, getchar.
Hago un ciclo while carácter leido sea distinto de EOF.

Pero sucede algo que no quiero y no se como solucionarlo.

Si ejecuto mi programa e ingreso minimo un carácter  y hago control + d  no se termina si no que tengo que por segunda vez hacer control + d.

Si por otro lado minomo ingreso un carácter luego hago control + d luego ingreso minimo un carácter luego contol + d no sale, es decir solo sale si hago dos veces consecutivas control +d.

Pero yo quiero que cuando hago control +d  finalize y no tenga que hacerlo dos veces consecutivas.

Que puedo estar haciendo mal ¿??????

Por ejemplo si ejecutan este codigo van a ver que les pasa eso:

#include <stdio.h>
int main()
{

while( EOF != getc(stdin));


return 0;
}

A una cosa mas, no me sirve hacer control + c por que eso hace que termine la ejecución abruptamente yo solo quiero que cuando haga una vez sola control + d termine de leer de la entrada estandar para hacer otra cosa.


Espero que alguien me de una mano  :huh:  saludos

11
C/C++ / Filtros Para Unix
« en: Martes 1 de Abril de 2008, 16:20 »
Hola gente  ¡¡  :huh:

Les cuento que soy novata en cuanto a linux, me interesa aprender a crear filtros en C para dicho sistema.

En realidad empezando con un filtro sencillo por ahora me conformo.  :rolleyes:

Tengo la nocion de que es un filtro, es un programita que lee de la entrada estandar, hace algunas transformaciones y lo larga a la salida estandar.

Se pueden juntar varios filtros mediante "|" para poder conseguir una trasformación compuesta de varias pequeñas.

EL problema es que no se bien como hacer un filtro para linux.  ;)

Por otro lado supongamos que quiero crear un filtro "mifiltro" que use ciertos comandos inventados por mi, ejemplo -h -k -l

y que mi filtro sepa que cuando yo le mando una -h haga cierta cosa y cuando le mando una -k haga otra etc …

Que me sea permitido hacer esto

mifiltro –h | mifilto –k | mifiltro -h


Se entiende lo que quiero decir ????    :)

Perdonen si digo alguna tonteria  &lt;_&lt;  pero estoy tratando de aprender sobre el tema y me gustaria que alguien me diga donde puede leer sobre esto o me explique las ideas basicas a usar para poder hacer un filtro con estas funcionalidades    :P

 Saludos  :hola:

12
C/C++ / Uso Del Destructor Y Constructor De Una Clase
« en: Sábado 17 de Marzo de 2007, 16:26 »
Hola estoy muy preocupada con algo que no logro entender  ;)  si algun guru de programacion me puede ayudar estare muy agradecida :P

La duda es la siguiente, si yo estoy definiendo e implementando una clase, y tengo una funcion, por ejemplo asignacion, tal que dicha funcion le asigna al objeto implicito una copia de un objeto de la misma clase que me pasa como parametro de entrada

a mi megustaria hacer lo siguietne en dicha funcion

- destruir el objeto implicito (con el destructor de la clase)
- crearlo de nuevo (con el constructor por copia de la clase )
- retornar una referencia a el.

Esto esta mal hacerlo ????? o se puede ???? y si se puede como ????
Alguien seria tan amable de darme un ejemplo??

13
C/C++ / Re: Herramientas Para Correccion De Programas
« en: Miércoles 6 de Septiembre de 2006, 16:20 »
Muchas gracias  :)  voy a darles una mirada a ver que tal.

Saludos  :hola:

14
C/C++ / Herramientas Para Correccion De Programas
« en: Martes 5 de Septiembre de 2006, 21:19 »
Hola gente  :P ¡¡¡ Soy novata en el area de la programacion, estoy programando en c y c ++
Necesitaria que me ayuden un poquito con un tema que no tengo experiencia. ;)

Es sobre el testeo de programas, el tratar de hacer programas eficientes.

Me comentaron de un programita que nunca use y que no se como hacerlo, se llama "Purify"  se lo puede descargar de esta direccion

 http://www-306.ibm.com/software/awdtools/purifyplus/

Tal vez alguien ya lo esta usando y me podria explicar o decirme en donde encontrar informacion para aprender a usarlo.

Si es en lo posible en español,  :rolleyes:  ya que mi relacion con el ingles no es muy buena  :blink:

SI alguien me da una mano se lo agradezco muchisimo por que la verdad que es un tema que me interesa  :P  

Saludos  :kicking:

Páginas: [1]