• Viernes 8 de Noviembre de 2024, 20:56

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.


Temas - Anthares

Páginas: [1]
1
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:

2
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.  

3
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

4
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:

5
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??

6
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]