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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Duda con bootsect.s - Linux
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con bootsect.s - Linux  (Leído 8,303 veces)
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Duda con bootsect.s - Linux
« Respuesta #10 en: 20 Diciembre 2013, 16:46 pm »

mh... creo que te estas confundiendo de lo que verdaderamente hace un org.

Te  conviene leer un poco mas de teoria, porque yo ya no la tengo presente en mi memoria xD

2)
Para llegar a los 510 bytes tendrias que hacer algo tipo:
Código:
db  510 - $;  dup 0
dw  0xAA55
mh... son 510 mas 2 bytes de la firma de un bootloader.

3)El inicio podria ser algo como:
Código:
use16
  org   0
  jmp  0x07C0:start
start:
  mov  ax, cs
  mov  ds, ax
  mov  es, ax


Citar
estoy en masm32
NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

eso no te sirve, ensambla para windows unicamente.

Necesitas un ensamblador que ensamble codigo de 16bit.
No se si masm16 serviria....

fasm, nasm segurisimo.




« Última modificación: 20 Diciembre 2013, 16:54 pm por _Enko » En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #11 en: 20 Diciembre 2013, 18:50 pm »

Bueno, al final lo solucione así:

Código
  1. .model TINY
  2.  
  3. .code
  4. _Main:
  5.  
  6. mov ax, 7C00h ; CARGAR EN 7C00H
  7. mov ds, ax
  8. mov ax, 1301h ; FUNCION 13, MODO 01
  9. mov bx, 000Ah ; PAGINA 00, COLOR 10 (VERDE CHILLON)
  10. mov cx, 11 ; TAMAÑO DEL STRING
  11. mov dx, 0202h ; FILA 02, COLUMNA 02
  12. push cs
  13. pop es
  14. mov bp, _MSG ; DIRECCION DEL STRING
  15. int 10h ; INTERRUPCION DEL BIOS
  16.  
  17. _MSG:
  18. db "Cargando...", 0
  19. SinUsar BYTE 474 dup(?)
  20.  
  21. _Exit:
  22. db 55h
  23. db 0AAh
  24.  
  25. end _Main

Citar
estoy en masm32
NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO

Si, la verdad que todos los ejemplos estan en Nasm o Fasm,, pero ahora me da terrible pereza pasarme de sintaxis, aunque lo voy a tener que hacer.. Masm32 ensambla de 16 Bits si,, y/o linkea también,, (con link16.exe), despues hay que pasar eso por otra herramienta que es exe2bin (para sacar código binario, sin cabeceras de windows) mucho mas complicado que otros ensambladores,, pero bueno,, es la costumbre..

Bueno,, la cosa es que ahora funciona! (A medias) lo que hago es generar ese binario de 512 bytes, después abro un disco de la unidad A: con un visor hexadecimal, y en el sector 0 del disquette le meto el binario,, meto el disquette en la pc y la inicio ( tengo veintipico de PC's para hacer pruebas :p ) la cosa es que lo lee!!! (EA! EA! EA!!!) pero me imprime cualquier cosa menos "Cargando..." me salen unos caracteres raros,, como si la codificación no fuese la correcta por así decirlo.. ) Sugerencias??

Gracias man!


En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #12 en: 20 Diciembre 2013, 23:50 pm »

El registro %bp esta concatenado con el segmento %ss, creo que hay puede estar el problema.

Si te soy sincero no lo entiendo de el todo, pero estoy leyendo los codigos del nucleo, y el segmento %ss lo dejan en cero, creo que el procesador multiplicaba el valor del segmento por 16 y luego sumaba la direccion o algo asi, pruebalo no puedo decirte mas, pero si no muestra los caracteres buenos seguro que es porque no esta apuntando bien.

Un saludo.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #13 en: 21 Diciembre 2013, 00:22 am »

Citar
El registro %bp esta concatenado con el segmento %ss, creo que hay puede estar el problema.

Sip, todo el **** día y no lo resuelvo aun.. pero le saque el push y el pop (para ver que pasaba) y salen otros caracteres,, o sea que apunta a otro lado ahora.. lo voy a resolver, esto no va a quedar así  >:(

Saludos!!



EDITO: Aca debe estar la solucion,, pero ya tengo 8hs de continuo con esto y no doy mas,, lo sigo cuando me lea esto:

Citar
« Última modificación: 21 Diciembre 2013, 00:52 am por Vaagish » En línea

xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #14 en: 21 Diciembre 2013, 06:14 am »

Primero tienes que leer las funciones de cada segmento, veras que se concatenan con los registros, yo revisaria el push y el pop a esos segmentos y estate seguro de lo que estas haciendo.

Tu dijiste que no mostraban los caracteres correctos, bien el problema puede ser por el segmento %ss, que es usado por el stack %esp y %ebp, como estas en 16 bits %sp y %bp.

E leido esos papers que citas, veras la formula que tiene la CPU para calcular los offsets, si el segmento %ss tiene algun valor o lo que sea, apuntara mal.

Este comentario es casi como el anterior pero es para que veas. Como el codigo no es muy extenso es facil de buscar los problemas, los parametros no son, asi que seguro que son los segmentos, si no es el %ss sera otro ves comprobando, asi lo entienderas todo.

Un saludo.
En línea

Vaagish


Desconectado Desconectado

Mensajes: 875



Ver Perfil
Re: Duda con bootsect.s - Linux
« Respuesta #15 en: 23 Diciembre 2013, 22:12 pm »

Citar
Primero tienes que leer las funciones de cada segmento, veras que se concatenan con los registros, yo revisaria el push y el pop a esos segmentos y estate seguro de lo que estas haciendo.

Si, evidentemente me falta mucho,, estuve leyendo un poco esos enlaces, y otros,, al final me pase a nasm,, (en realidad no tiene mucha diferencia y se pueden usar los dos) el asunto es que con nasm se puede usar esto por ejemplo:

Código
  1. jmp 07C0h:_MAIN
  2.    mov ax, cs ; ''
  3.    mov ds, ax ; ''
  4.    mov es, ax ; ''

y con eso queda solucionado.. igual me falta aprender mucho sobre los segmentos, y sobre asm en general.. pero bue, de a poco..

ACTUALIZACIÓN:

Para MASM hacer:
Código
  1. org 0
  2. mov ax, 07C0h
  3. ; Update the segment registers
  4. mov ds, ax ; ''

Para NASM:
Código
  1. [BITS 16] ; Ensamblar en 16 Bits
  2. [ORG 0]
  3.  
  4. jmp 07C0h:_MAIN     ; Saltar el hilo principal a la posicion 07C0h
  5.  
  6. _MAIN:
  7. ; Update the segment registers
  8.    mov ax, cs ; ''
  9.    mov ds, ax ; ''
  10.    mov es, ax ; ''

Felicidades a todos en las fiestas! Gracias por las ayudas! Saludos!!  ;D
« Última modificación: 24 Diciembre 2013, 00:31 am por Vaagish » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda linux
Dudas Generales
nobelot 4 2,726 Último mensaje 27 Diciembre 2010, 17:13 pm
por Devilboy.Devil
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines