Ejecutar un programa sin sistema operativo

Todo pc ejecuta código máquina: Ya sea en el arranque (La bios no es más que código máquina), en la carga del sistema operativo (el kernel esta programado en su mayor parte en código maquina) y en la ejecución de programas (el código fuente compilado o interpretado se transforma de una u otra manera en código máquina). Esta forma de trabajar hace que realmente no sea necesario un sistema operativo para ejecutar aplicaciones (y si me lo poneis dificil, hasta tampoco haría falta la bios). Es por ello que hay aplicaciones como los gestores de arraque (lilo, grub, nt loader), virus, etc que no necesitan de un sistema operativo para funcionar.

Siguiendo este camino, cualquiera podría crear una aplicación que, manteniendola y añadiendola nuevas funcionalidades, podría convertirse en el kernel que Linus Torvalds desarrolló de minix y que posteriormente se transformaría en linux.

Mi intención esta lejos de desarrollar un sistema operativo propio… aún :-), sin embargo a continuación pongo una aplicación, que ejecutada desde un disquete nada más arrancar el pc, muestra un menú y realiza operaciones básicas (chorras). Necesitareis un disquete ya formateado, el programa debug del msdos (por defecto en todos los windows) y que como primera unidad de arranque del pc sea la disquetera (próximamente hablaremos de como pasarlo a un cd mediante el estandar «el torito»). Para los linuxeros de pc, próximamente pondré algo parecido al rawrite. Las instrucciones para hacerlo funcionar son las siguientes:

1-cargad una consola msdos (en windows 9x: inicio/ejecutar/command, en windows nt,2000 o xp: inicio/ejecutar/cmd)

2-Insertad un disquete ya formateado en la disquetera y que no tenga nada importante (ya que perdereis toda la información que contuviera)

3-copiad el siguiente texto a un fichero de texto en vuestro disco duro (dejad al final un retorno de carro), por ejemplo codigo.txt:

a
jmp 1f7
db ‘Seleccione una opcion del menu’
db ‘1- Mostrar hora’
db ‘2- Coche Fantastico’
db ‘3- Salir’
db ‘Desarrollado por Oscar Rodriguez http://sistemasorp.blogspot.com’
db ’00:00:00′
db ‘Fijese en las luces del teclado’
db ‘Retire el disco o cd de la unidad de arranque y pulse una tecla’
cli
xor ax,ax
mov ss,ax
mov sp,7c00
mov es,ax
mov ds,ax
sti
mov ah,0
mov dl,0
int 13h
mov ax,201
mov bx,7e00
mov cx,2
xor dx,dx
int 13h
mov ax,3
int 10h
mov ax,1001
mov bh,1
int 10h
mov ax,1300
mov bx,2
mov cx,1e
mov dx,0119
mov bp,7c03
int 10h
mov ax,1300
mov bx,2
mov cx,0f
mov dx,0519
mov bp,7c21
int 10h
mov ax,1300
mov bx,2
mov cx,13
mov dx,0619
mov bp,7c30
int 10h
mov ax,1300
mov bx,2
mov cx,8
mov dx,0719
mov bp,7c43
int 10h
mov ax,1300
mov bx,4
mov cx,46
mov dx,1705
mov bp,7c4b
int 10h
mov ah,0
int 16h
push ax
mov ax,700
mov bh,0
mov cx,0900
mov dx,094f
int 10h
pop ax
cmp ah,2
je 29f
cmp ah,3
je 2fd
cmp ah,4
jne 29d
jmp 32f
jmp 278
mov ah,2
int 1ah
push cx
mov bx,7c91
mov al,ch
mov cl,4
shr al,cl
add al,30
mov [bx],al
inc bx
mov al,ch
and al,0f
add al,30
mov [bx],al
add bx,2
pop cx
mov ch,cl
mov al,ch
mov cl,4
shr al,cl
add al,30
mov [bx],al
inc bx
mov al,ch
and al,0f
add al,30
mov [bx],al
add bx,2
mov al,dh
mov cl,4
shr al,cl
add al,30
mov [bx],al
inc bx
mov al,dh
and al,0f
add al,30
mov [bx],al
mov ax,1300
mov bx,7
mov cx,8
mov dx,0919
mov bp,7c91
int 10h
jmp 278
mov ax,1300
mov bx,7
mov cx,1f
mov dx,0919
mov bp,7c99
int 10h
mov cx,3
mov ah,2
call 346
mov ah,4
call 346
mov ah,1
call 346
mov ah,4
call 346
loop 311
mov ah,0
call 346
jmp 278
mov ax,1300
mov bx,7
mov cx,3f
mov dx,0908
mov bp,7cb8
int 10h
mov ah,0
int 16h
int 19h
push cx
cli
mov al,ed
out 60,al
in al,64
test al,2
loopnz 34c
mov al,ah
out 60,al
sti
mov ah,0
int 1ah
mov bx,dx
add bx,9
mov ah,0
int 1ah
cmp bx,dx
jnz 360
pop cx
ret

w 100 0 0 2
q

4-Ejecutad el siguiente comando: debug < codigo.txt

5-Reiniciad el ordenador con el disquete dentro

Este proceso lo que hace es ejecutar tanto comandos del debug del msdos, como intrucciones en ensamblador. Con esto guardamos en el sector de arranque del disquete (no del disco duro) un programa que se ejecutará nada más reiniciar el ordenador, antes de que se cargue el sistema operativo. Este programa tiene un menú con 3 opciones:
1- Mostrar hora: Muestra la hora actual del sistema.
2- Coche Fantastico: Simula las luces del coche fantástico en los led del teclado
3- Salir: Sale del programa, cuando se retira el disquete carga el sector de arranque del disco duro.

Con este programa se muestra todo lo que que se puede necesitar de un pc:
-interfaz con el usuario de entrada (teclado)
-interfaz con el usuario de salida (monitor)
-lectura de disco (lectura del resto del programa en otro sector)
-gestión de memoria (las cadenas de texto y la pila)
-gestión de dispositivos (luces de teclado)

Las instrucciones del debug son:
a: introducir código en ensamblador.
w 100 0 0 2: escribir el programa en los primeros sectores de arranque del disquete desde la posicion de memoria 100.
q: salir del debug.

No voy a explicar que hace cada cosa en el programa, sin embargo si alguien tiene dudas puede preguntarme que significa cualquier parte del código en ensamblador. A grosso modo usa las funciones de la bios para poder funcionar: la interrupción 10h la uso para mostrar cadenas, la interrupción 13h para leer un segundo sector del disquete, la interrupción 16h para leer caracteres pulsados del teclado, la interrupción 19h para reiniciar el sistema sin tener que testearlo todo de nuevo, la interrupción 1ah para hacer retardos y averiguar la hora del sistema. Escribo en el puerto 60 para modificar el estado de los leds del teclado. Su arquitectura se basa en la peculiaridad de la bios de guardar nada más arrancar el primer sector del disquete en la zona de memoria 0000:7C00 y luego enviar la ejecución a ese punto.

El hecho de haber usado la herramienta debug es porque lo tiene todo el mundo en su windows. Sin embargo no esta orientada a usarse para programar sectores de arranque, más bién para editarlos, editar ficheros o crear ficheros ejecutables con extensión .COM; por este último motivo he tenido que ir jugando con los saltos relativos a pelo, es decir, como los programas en debug empiezan en el desplazamiento 100h de la memoria (típico de los ficheros .COM) he estado poniendo los destinos de los saltos en base a esa posición 100h, por lo que cuando he necesitado modificar una instrucción, he tenido que cambiarlos también. Por suerte al ser saltos relativos (e internamente el debug los convierte así) no influye en el resultado final.

Por último si teneis curiosidad por el mundo del pc y sus interioridades, saber como es el proceso de arranque del pc, cambiar las luces del teclado y muchísimo más, teneis el maravilloso y gratuito libro EL UNIVERSO DIGITAL DEL IBM PC, AT Y PS/2 de Ciriaco García de Celis, el cual explica con mucho detalle las tripas de los pcs.

91 comentarios en “Ejecutar un programa sin sistema operativo

  1. Rafael

    Hola, leer el contenido de un diskette, es decir, los archivos almacenados en un diskette. Espero puedas ayudarme. Saludos y gracias.

    Responder
  2. sistemasorp

    Bién, para ello debes usar las funciones 1Ah, 4Eh y 4Fh de la INT 21h.

    mov ah,1ah ; la función de establecer el area de datos de disco
    mov dx,offset datos ; el area de datos de disco
    int 21h

    mov ah,4eh ; la función de buscar el primer fichero coincidente
    xor cx,cx ; el tipo de atributo (0 = ficheros normales)
    mov dx,offset cadena ; la cadena a buscar, por ejemplo db ‘*.txt’,0
    int 21h

    jc no_encontrados ; si carry no es 0 entónces no ha encontrado nada

    sigue_buscando:
    ;hacer lo que sea en este punto con el area de datos
    mov ah,4fh ; la función de buscar el siguiente fichero coincidente
    int 21h
    jnc sigue_buscando; si carry es 0 entónces que siga buscando más ficheros

    no_encontrados:

    .
    .
    .

    El area de datos consiste en la siguiente información:

    bytes
    0-20 reservados
    21 atributos
    22-23 hora del fichero
    24-25 fecha del fichero
    26-29 tamaño del fichero
    30-42 nombre y extensión del fichero

    Responder
  3. Jesus

    Hola sistemasorp, quisiera q me des una mano para un trabajo final en la U. debo hacer un programa que dibuje una linea y luego la borre con el cursor del mouse. Ojala puedas hacerme ese favor. Gracias.

    Responder
  4. Anonymous

    muy buen articulo oscar, quisiera que me ayudaras por fabor a realizar un movimiento de una letra por toda la pantalla que se vea el efecto de rebote, todo esto mediante debug

    Responder
  5. Anonymous

    usr: juanitux
    Esta es la segunda vez que escribo en tu blog. Lo hago con el motivo de que falta un parámetro en la interrupción 19h el Bootstrap(línea 151) deberias indicar en el registro `DL’ el dispositivo al que quieres cargar, en nuestro caso HDD0. Por lo que quedaría asi:
    ;—————
    mov dl, 80
    int 19h
    ;—————
    Mas… habría que corregir los saltos línea 158 y 169.
    Ante todo felicitaciones de nuevo!!!

    Responder
  6. sistemasorp

    juanitux, una pregunta, ¿de donde has sacado que la int 19h usa el registro dl para iniciar el arranque en una determinada unidad?. No me sonaba, pero buscando por internet tampoco lo he encontrado.

    En cuanto a los saltos no entiendo que problema tienen:

    El de la linea 158 (157 en realidad) es un bucle que espera un tiempo entre el envío de comandos al teclado.

    El de la linea 169 (168 en realidad) es un salto que comprueba que el tiempo pasado sea más de 9 ticks (en la anterior llamada se coge el tiempo, se le suma 9 y se repite una y otra vez las llamadas al segundo tiempo hasta que concide con 9 ticks)

    Responder
  7. Arbey Dario Muñoz Gomez

    Hola, me llamo arbey, quisiera primero felicitarte por tu programa, la verdad esta muy bacano el hecho de poderlo correr sin sistema operativo. con respecto a esto, quisiera preguntar varias cositas:
    yo necesito hacer un sistema operativo que corra desde una usb, entonces para mi, tu programa puede ser un sistema operativo, solo que el menu no va a ser 1, 2, o 3, sino una especie de ventana de comando, entonces una de mis preguntas es, como cambio el codigo para que no corra desde un diskette sino desde una USB?? ademas, mi sistema operativo lo que tiene que hacer es reconocer un comando que se puede llamar por ejemplo copytousb, entonces deberia copiar todo el sistema operativo, en este caso tu programa a otra usb, sabrias que comandos puedo usar para hacer esto??

    muchas gracias

    Responder
  8. Anonymous

    Necesito un programa que me muestre mi nombre como tal por panatlla pero no he podido hacerlo me podrias colabirar es mi exman final, debe ser un ejecutable
    Ejmplo:

    andres

    gracias por tu colaboracion

    Responder
  9. Percy

    Bueno te felicito por tu programa no se en realidad cual es tu nombre.Con manuales de este tipo se aprende mucho.

    Un saludo grande

    Percy

    Responder
  10. alberto

    Hola, lo primero felicitarte por tu blog y por tus articulos, porque me parecen muy interesantes y acabas de formar parte de mi lista de favoritos.
    Ahora la pregunta que te quería plantear:
    Me gustaría diseñar un programa para que te una vez que lo instalas en un portatil, si te lo roban mande una señal (via internet) para detectar donde esta el ladrón (mediante la direccion IP) y la policia puede actuar.

    El tema esta en que me gustaria que ese programa se ejecutara desde la bios, para evitar que pierda la efectividad si formatean. Para ello supongo que haria falta escribir todo el código en ensamblador, no?. Las preguntas son:

    1) Como puedo guardar un programa en la bios?
    2) Sé que se puede obtener de un trozo de código en C++ por ejemplo, su equivalente en ensamblador, pero como se podria hacer?

    La verdad esque este programa lo queria proponer para proyecto fin de carrera y antes me gustaria saber si es factible.

    Mi correo es thinkill@gmail.com, si puede ser aunque contestes por aqui (para que todo el mundo lo lea) mandame la respuesta por correo, ok?(es por leerla en cuanto la mandes, que tengo mono) xD

    Muchas gracias por todo.

    Responder
  11. Enrique

    AYUDA NECESITO UN PROGRAMA EN ENSAMBALDOR QUE LEA UNA CADENA DEL TECLADO, DESPUES IMPRIMA EN PANTALLA CUANTAS VECES SE REPITE CADA CARACTER DE LA CADENA

    EJEMPLO:

    Rodrigo

    R:1 o:2 d:1 r:1 g:1

    EJEMPLO 2:

    AAAABBBOoOOO

    A:4 B:3 O:4 o:1

    Responder
  12. Enrique

    —me super urge—

    AYUDA NECESITO UN PROGRAMA EN ENSAMBALDOR QUE LEA UNA CADENA DEL TECLADO, DESPUES IMPRIMA EN PANTALLA CUANTAS VECES SE REPITE CADA CARACTER DE LA CADENA

    EJEMPLO:

    Rodrigo

    R:1 o:2 d:1 r:1 g:1

    EJEMPLO 2:

    AAAABBBOoOOO

    A:4 B:3 O:4 o:1

    Responder
  13. Anonymous

    antes q na quiero felicitarte, quisiera pedirte si es posible q me detalles sentencia por sentencia las instrucciones sino es mucha molestia, recien estoy empezando a estudiar assembler, mi correo es angel30422@hotmail.com te agradeceria qlo envies a mi email.

    Responder
  14. juanitux

    De: JUANITUX:
    Hola chaval siento haber tardado en la repuesta a tu pregunta: «¿de dónde has sacado que la int 19h usa el registro dl para iniciar el arranque en una determinada unidad?». la primera vez que probé tu programa no cargo el bootloader por tanto comencé a investigar y me tope con una página super completa en la que describe todas las interrupciones conocidas. Por cierto, no recuerdo bien por que te mencioné que cambiaras algunos saltos, si lo recuerdo te contestaré tan pronto pueda. reescribi parte de tu código pero no me acuerdo los cambios, tengo el código fuente reeditado para NASM. A continuación te escribo el link en dónde encontré el listado de interrupciones.
    LINK:http://www.htl-steyr.ac.at/~morg/pcinfo/hardware/interrupts/inte1at0.htm
    PD0: los número para los dispositivos más comúnes son: 0=A:, 1=2nd floppy, 80h=drive 0(hd0 || C:), 81h=drive 1
    PD1: Te sigo felicitando por tu página !!!

    Responder
  15. Ednia

    Saludos mi nombre es Edit, pues veras tengo un gran problema… buscando en la red me encontre con tu artículo y pense q me podias ayudar.

    Aca en la school me piden realizar una aplicación en visual basic, pero no debe ser interrumpida por ninguna interrupción de windows y aunque esto se puede hacer desde msdos, requieren la interfaz grafica de VB en windows, crees q me puedas ayudar? RTO, WINDOWS CE embedded deberas q ya no se…

    gracias.

    Responder
  16. Egroj

    Hola, me ha gustado mucho tu web, no sé si me podrás decir de algún sitio donde diga como hacer una cosa:

    Quiero escribir un programa en ensamblador, meterlo en un diskette y que al iniciar al ordenador se booteé desde con ese programa, sin usar ningún sistema operativo, es decir que pueda utilizarse en un ordenador que no tiene ningún SO, he probado con este código y no me ha funcionado, y ya no sé ni que buscar en google.

    Responder
  17. yamil

    hola, estoy impresionado con tus publicaciones,excelente queda corto, yo tengo la tarea de realizar un trabajo que consiste en reutilizar una pc vieja y convertirla es un sistema que controle un motor con el puerto paralelo sin la presencia del sistema operativo, me gustaria que que ayudes no tengo muchas ideas…gracias…no dejes las publicaciones!

    Responder
    1. admin Autor

      Hola, gracias por los ánimos.

      Este artículo te puede servir ya que para manejar el puerto paralelo sólo tienes que usar el comando OUT en ensamblador y enviar 8 bits al puerto paralelo (normalmente 378h) con lo que podrías controlar hasta 4 motores en ambas direcciones. Luego los cables de datos y de masa del puerto paralelo los llevarías a tu circuito.

      Responder
  18. bruno cosio

    kisiera saber la explicacion de este codigo:

    a
    jmp 1f7
    db ‘Seleccione una opcion del menu’
    db ‘1- Mostrar hora’
    db ‘2- Coche Fantastico’
    db ‘3- Salir’
    db ‘Desarrollado por grupo JBCI’
    db ‘00:00:00′
    db ‘Fijese en las luces del teclado’
    db ‘Retire el disco o cd de la unidad de arranque y pulse una tecla’
    cli
    xor ax,ax
    mov ss,ax
    mov sp,7c00
    mov es,ax
    mov ds,ax
    sti
    mov ah,0
    mov dl,0
    int 13h
    mov ax,201
    mov bx,7e00
    mov cx,2
    xor dx,dx
    int 13h
    mov ax,3
    int 10h
    mov ax,1001
    mov bh,1
    int 10h
    mov ax,1300
    mov bx,2
    mov cx,1e
    mov dx,0119
    mov bp,7c03
    int 10h
    mov ax,1300
    mov bx,2
    mov cx,0f
    mov dx,0519
    mov bp,7c21
    int 10h
    mov ax,1300
    mov bx,2
    mov cx,13
    mov dx,0619
    mov bp,7c30
    int 10h
    mov ax,1300
    mov bx,2
    mov cx,8
    mov dx,0719
    mov bp,7c43
    int 10h
    mov ax,1300
    mov bx,4
    mov cx,46
    mov dx,1705
    mov bp,7c4b
    int 10h
    mov ah,0
    int 16h
    push ax
    mov ax,700
    mov bh,0
    mov cx,0900
    mov dx,094f
    int 10h
    pop ax
    cmp ah,2
    je 29f
    cmp ah,3
    je 2fd
    cmp ah,4
    jne 29d
    jmp 32f
    jmp 278
    mov ah,2
    int 1ah
    push cx
    mov bx,7c91
    mov al,ch
    mov cl,4
    shr al,cl
    add al,30
    mov [bx],al
    inc bx
    mov al,ch
    and al,0f
    add al,30
    mov [bx],al
    add bx,2
    pop cx
    mov ch,cl
    mov al,ch
    mov cl,4
    shr al,cl
    add al,30
    mov [bx],al
    inc bx
    mov al,ch
    and al,0f
    add al,30
    mov [bx],al
    add bx,2
    mov al,dh
    mov cl,4
    shr al,cl
    add al,30
    mov [bx],al
    inc bx
    mov al,dh
    and al,0f
    add al,30
    mov [bx],al
    mov ax,1300
    mov bx,7
    mov cx,8
    mov dx,0919
    mov bp,7c91
    int 10h
    jmp 278
    mov ax,1300
    mov bx,7
    mov cx,1f
    mov dx,0919
    mov bp,7c99
    int 10h
    mov cx,3
    mov ah,2
    call 346
    mov ah,4
    call 346
    mov ah,1
    call 346
    mov ah,4
    call 346
    loop 311
    mov ah,0
    call 346
    jmp 278
    mov ax,1300
    mov bx,7
    mov cx,3f
    mov dx,0908
    mov bp,7cb8
    int 10h
    mov ah,0
    int 16h
    int 19h
    push cx
    cli
    mov al,ed
    out 60,al
    in al,64
    test al,2
    loopnz 34c
    mov al,ah
    out 60,al
    sti
    mov ah,0
    int 1ah
    mov bx,dx
    add bx,9
    mov ah,0
    int 1ah
    cmp bx,dx
    jnz 360
    pop cx
    ret

    w 100 0 0 2
    q

    por favor amigo necesito saber la explicacion de este codigo para un trabajo del instituto. Debido a que tube un accidente y no pude ir a clases, ademas es mi trabajo final del instituto y llevo dias tratando de comprender este codigo.

    GRACIAS DE ANTEMANO. bruno

    Responder
  19. rolando

    felicidades por tu articulo, me ha indicado por donde es el camino pero tengo una duda.

    Tengo un unico programa en C++ que va a ser ejecutado en una pc al iniciar, no deseo meterle disco duro asi que lo quiero cargar desde usb ¿debo crear un programa de arranque en ensamblador o hay forma de hacerlo en c++?

    Responder
    1. admin Autor

      Me temo que el arranque de un pc desde un disco duro/cdrom/disquete/usb tiene que estar en ensamblador ya que los programas en C++ necesita de un sistema operativo para ejecutarse.

      Responder
  20. oswaldo

    hola ….gracias
    tengo una pregunta
    una ves echo el programa en c++ que sellama diseño
    agarro el archivo diseño.exe
    ¿COMO AGO PARA CORRER EL PROGRAMA DESDE UNA USB CUNDO ENCIENDO LA COMPUTADORA? CON EL DOS

    Responder
  21. Luis

    Hola…tengo una pregunta…para cargar un programa (creado con un compilador) antes de iniciar el sistema operativo, desde una tarjeta pci…como seria el programa..o que comandos puedo usar?…ayuda urgente porfavor :S

    Responder
    1. admin Autor

      ¿Desde una tarjeta PCI? Nunca he oido que se pueda cargar nada desde una tarjeta PCI, si acaso de un disco usb. Por otro lado en qué lenguaje está hecho el programa? porque como este necesite las funciones de un sistema operativo no lo podrás ejecutar, lo tendrías que programar tu a mano (acceso a la pantalla, al teclado, al ratón, al disco, etc.). ¿No te sirve arrancar desde una distribución linux live?

      Responder
  22. Luis

    en realidad es un proyecto, tengo que codificar un programa en ensamblador, compilarlo..usar los pines de una tarjeta pci(solo los pines) y diseñar un circuito con una memoria RAM o ROM para que al encender..la pc al arrancar lea el programa en la memoria y no el arraque el sistema operativo…alguna idea o recomendacion?

    Responder
    1. admin Autor

      No conozco el modo de acceso del PCI, pero como en ensamblador se trata de acceder al puerto 0xcf8, no sería complicado. ¿Desde donde se ejecutaría ese programa en ensamblador? usb, cd, disquete…

      Responder
  23. Luis

    el programa se ejecutara desde una memoria RAM o ROM externa .. que estara dentro de un circuito que diseñare y este circuito ira conectado a los pines de la tarjeta PCI…al arrancar el sistema se debe cargar el programa desde dicha memoria externa, es lo mismo que tu programa pero el programa arranca desde una memoria externa conectada a una PCI…recomendanciones para el codigo?

    Responder
    1. admin Autor

      Pues me temo que eso excede mis conocimientos, ya que cuando hice el artículo investigué para hacerlo a través de un disquete (pero que sería fácilmente reproducible en un usb o cd), pero que el pc arranque directamente desde una tarjeta PCI personalizada no sabría cómo hacerlo, tendría que comportarse como si de un disco duro scsi se tratase, pero eso para mi es bastante complicado.

      Responder
  24. Luis

    entiendo, entonces eso tiene mas que todo que ver con lo que use como arrancador verdad? …no es cuestion de comandos de ensamblador? …tenia la idea que existia un comando que me permitiera hacer esta interrupcion. De todos modos se agradece por el tiempo para leer y responder mis comentarios y felicitacion por el desarrollo de tu investigacion, esta interesante tambien :).

    Responder
  25. Jesus M

    hola, necesito ayuda, tengo como proyecto crear un programa que se pueda ejecutar sin necesidad de un SO o ayuda como el debug, para hacer mas sencillo todo, sin disco duro, solamente dejando el programa en una memoria flash y que se ejecute al iniciar la pc, su post es el unico que e encontrado que se asemeje a lo que necesito pero aun no comprendo como hacer que lo cargue al inicio podria ayudarme?

    Responder
  26. Jesus M

    dependiendo de como este configurado en la bios se inician los dispositivos si el HDD esta como de primero busca en el sector 0 para buscar un archivo arrancable, mi intencion es dejar a una memoria flash como primer arranque el problema es que aun que tengo hecho un programa en ensamblador todavia no comprendo com hacer para que cargue ese programa y tambien quisiera saber si en el mismo programa necesito hacer que reconozca los perifericos, gracias

    Responder
  27. yeiler ros cobas

    muy bien la informacion me saco de dudas pero me referia a si puedo ejecutar un programa almacenado en mi disco duro

    Responder

Responder a admin Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *