![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#3
|
||||
|
||||
|
hola fide, disculpa si te ofendo, pero por tus anteriores posts, se me ha ocurrido hacerte una pregunta:
¿alguna vez has estado en alguna escuela para retrasados mentales? aqui te va algo, solo necesitas tener conocimientos de ensamblador, y conmigo no cuentes para eso: ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ;Compilar con MASM 5.0, luego el LINK y ejecuta el fichero.exe obtenido. ;Programa de arranque similar al de los sistemas operativos que arrancan ;desde disquetes o discos duros. Estos programas arrancan en modo real ;X86 basados en un estandar que cumplen todos los ordenadores compatibles ;con IBM-PC. Hasta la fecha los KXP-7 y Pentium-IV lo siguen haciendo. ; Todo ordenador luego de ejecutar el POST de su BIOS, cargan del disco ;duro o disquetes la informacisn contenida en un sector especmfico ;situado en cara 0, pista 0 y sector 1. Estos 512 bytes, de los cuales ;todos no son csdigo de maquina o ejecutable directamente por la CPU, ;se depositan en un segmento y desplazamiento especifico de su ordenador. ; Segmento y desplazamiento 0000:7C00H, y automaticamente se le transfiere el ;control de ejecucion al primer byte del sector cargado, es decir el puntero ;de instruccion IP de la CPU apunta a 0000:7C00H. Generalmente esta posicisn ;contiene un salto intrasegmento, desplazandose unos 53 bytes ;donde se encuentra el resto del codigo ejecutable del arranque de su ordenador. ;Este salto se debe a que cada disquete, tiene una zona especifica para indicar ;su formato, es decir cantidad de caras, sectores por pistas, cantidad de copias ;de la FAT y otros datos de interes que no debemos borrar. ;Este programa vale para su Disco duro, PERO CON MUCHOS CAMBIOS y hay que saber ;que se esta haciendo en todo momento para no perder la informacisn del disco duro. ;BIOS, Sistema basico de entrada y salida brindado por los fabricantes para acceder ;a sus dispositivos sin utilizar los puertos. Son rutinas en csdigo de maquina ;almacenadas en ROM o EPROM en trajetas, perifiricos y metherborad. ;FAT, Tabla de localizacisn de ficheros utilizada por los sistemas operativos MS-DOS, ;Windows 3.XX, 9X, 2000, NT y XP.Para los zltimos, en el caso que no desee utilizar NTFS, ;pues el estnadar segzn la capacidad de su disco duro puede ser FAT 8 bits, FAT 16 bits ;y FAT 32 bits. NTFS, es algo como la FAST, pero con menos documentacisn de su estructura ;para almacenar la informacisn el los discos duros. ;BOOT SECTOR, Sector de arranque de disquetes o Discos duros, el mismo se utiliza para ;almacenar un pequeqo programa de arranque de su ordenador, que ira cargando poco a poco ;su Sistema Operativo. Ademas contiene informacisn del tipo de soporte magnitico, como ;capacidad, sectores por cara, cantidad de FAT, Copias de Fat... .8086 alfa segment para public 'code' org 0100h assume cs:alfa,es:alfa,ds:alfa,ss:alfa inicio proc near push cs pop ds push cs pop es mov ax,0201h ;Servicio 02H para leer un sector del disco mov cx,0001h ;pista y numero del sector a leer dentro de la pista mov dh,00h ;Cara donde se encuentra el sector a leer mov dl,0 ;Unidad fisica a leer,en este caso Torre "A" no cambie esto. mov bx,offset final ;Zona donde cargaremos los 512 bytes del sector leido int 13h ;Interrupcion del BIOS dada por el fabricante para ;acceder a los discos. ; todo esto es para leer el sector 1, cara 0, pista 0 de su disquete, ; el cual debe estar ubicado en la torre "A" de su ordenador. mov si,offset inicio mov bx,offset mensx jnc notERRORread ;Salata si no hay error en la lectura del disquete errorINdisk: dec cs:[flagDISK] ;Como hay error hago la ultima operacion 3 veces jz Print ;Si ya se ha intentado realizar 3 veces, Aborto xor ah,ah ;Servicio 0H para recalibrar unidad de disco mov dl,0 ;Unidad "A a recalibrar producto a un error int 13h jc errorINdisk ;Si hay error al recalibrar salto a chequear veces recalibro: ;Si salta aqui, es que no hay problemas en recalibracion push si ;En este registro comienza la rutina pendiente ret ;Se apila y luego se le dice a la CPU que retorne al valor ;que hay en la pila que es el de la rutina pendiente. ;Esto es un recurso de programacion, pues normalmente ;Un "RET", va acompa$ado de un "CALL" notERRORread: ;Si salta aqui, es que pudo leer el Boot sector mov cs:[flagDISK],03h ;Restablece a 3 veces los intentos de la ultima operacion mov si,offset final+03h ;Posicion donde estan los datos del disquete Para el S.O mov di,offset reservados;Posicion donde salvare esos datos para cuando escriba mov cx,0033h ;Cantidad de bytes a mover cld rep movsb ;Permite mover bytes de DS:SI a ES:SI segun la cantidad ;puesta en CX mov si,offset write1 ;Pongo posicion de la rutina a realizar con el disquete write1: mov ax,0301h ;Servicio 03H para escribir en disco mov cx,0001h ;Pista 0, primer sector mov dh,00h ;Pista 0 mov dl,0 ;Unidad donde escribiremos, Torre "A" mov bx,offset bootEXEC ;Datos a escribir, en realidad es el BOOT SECTOR personlizado int 13h ;Interrupcion del BIOS que permite el acceso al disco jnc exitDOS ;Salta si no hay error mov bx,offset mensb5 ;Mensaje a Imprimir si no se puede realizar la escritura jmp errorINdisk ;Rutina que trata de recalibrar el disco para luego escribir exitDOS: mov bx,offset mensE7 ;Si salta aqui es que ya se ha escrito correctamente ;el boot sector o sector de arranque personalizado print: ;Rutina para Imprimir Una cadena en Pantalla mov ah,09h ;Servico 09H de la interrupcion 21H del S.O push cs ;Segmento DS debe apuntar al segmento donde esta mi cadena pop ds mov dx,bx ;En DX debe estar el puntero donde comienza la cadena int 21h ;Interrupcion multiple del S.O para varios propositos exit: mov ax,4c00h ;Servicio que le indica al S.O que la aplicacion ha finalizado int 21h flagDISK db 3 ;Variable para controlar intentos de repeticion de una operacion mensE7 db 0ah,0dh,' Disco con Arranque Personalizado:',0ah,0dh mensE8 db ' Ya puede reiniciar su Ordenador, recuerde que debe establecer en su SETUP',0ah,0dh mensE9 db 'la opcion de arrancar por Unidad A o disquete...',0ah,0dh,'$' mensx db 0ah,0dh,' ERROR:',0ah,0dh mensx1 db ' Imposible leer. No hay disco en la Unidad A: o sectores da$ados...',0ah,0dh,'$' mensb5 db 0ah,0dh,' ERROR:',0ah,0dh mensb4 db ' Imposible escribir. Disco Protegido contra escritura o sectores da$ados...',0ah,0dh,'$' ;---------------------------------------------------------------------------- bootEXEC: ;reservo 512 bytes para el programa que estar en el ;boot sector, el cual imprimira en pantalla las teclas que pulse ;y saldra para arrancar por su disco duro con la tecla ESCAPE "ESC" jmp boot ;Cuando esto es escrito en el boot sector de su disquete ;y es cargado por el BIOS en el arranque de su ordenador ;esta es la primera instruccion a ejecutar por la CPU ;SALTAMOS, pues los bytes restantes es el area de datos ;utilizadas por el S.O para saber que tipo de disco es ;reservo los datos de gu!a para el DOS reservados: r1 dw 0 r2 dw 0 r3 dw 0 r4 dw 0 r5 dw 0 r6 dw 0 r7 dw 0 r8 dw 0 r9 dw 0 r10 dw 0 r11 dw 0 r12 dw 0 r13 dw 0 r14 dw 0 r15 dw 0 r16 dw 0 r17 dw 0 r18 dw 0 r19 dw 0 r20 dw 0 r21 dw 0 r22 dw 0 r23 dw 0 r24 dw 0 r25 dw 0 r26 db 0 boot: cli ;Desactivo las interrupciones. xor si,si ;Posiciono el segmento de pila en el segmento 0000 mov ss,si mov sp,7c00h ;Posiciono el puntero de pila(SP) en 7C00H y el puntero base(BP) mov bp,7c00h sti ;Activo las interrupciones. Esto en realidad se hace ;por un motivo, pero es largo de explicar. mov ds,si ;Apunto mi segmento de datos(DS) y extra(ES) a 0000 mov es,si mov ax,0003h int 10h ;Con esto pondr el modo texto 80X25 mov ah,02h ;Posiciona el cursor en fila 0 columna 0 mov bh,0 mov dx,0100h int 10h ;Interrupcion de video que permite estas funciones mov dx,7c00h+(offset Welcome-offset bootEXEC) ;Imprimo Mensaje de Bienvenida en pantalla mov cx,0000h call PrintString ;Subrutina que permite imprimir una cadena en pantalla readKEY: xor ah,ah ;Leo el teclado hastya que pulsen una tecla int 16h ;Interrupcion que permite leer el teclado cmp al,00h ;Comparo el tipo de tecla que devuelve al pulsarlas je readKEY ;Si no es tecla imprimible en pantalla,entonces no se imprime mov ah,0eh ;Imprimo en pantalla el caracter correspondiente a la tecla pulsada int 10H cmp al,1bh ;Controlo si la tecla pulsada es "ESC" jne readKEY ;De no serlo, sigo leyendo el teclado e imprimiendo mov dx,7c00h+(offset GoodBye-offset bootEXEC) mov cx,1400h call PrintString ;Como se pulso la tecla "ESC", entonces imprimo mensaje ;de despedida. xor ah,ah ;Espero a que presionen una tecla para volver a la int 16h ;secuencia de arranque del BIOS de su ordenador int 19h ;Esta interrupcion es la que invoca la secuencia de ;arranque del BIOS de su ordenador PrintString: ;Imprime una cadena directamente en pantalla mov ax,0b800h ;En CX fila y columna mov es,ax ;en DX puntero al comienzo de la cadena ;la cadena debe terminar en '$' Push cs pop ds mov ax,160 mul ch shl cl,1 xor ch,ch add ax,cx mov di,ax mov si,dx cld again_PrintString: lodsb cmp al,'$' je exit_PrintString mov ah,1fh stosw jmp again_PrintString exit_PrintString: ret GoodBye db 'Retire el disqute y presione una tecla para cargar su Sistema ' GoodBye1 db 'Operativo...$' Welcome db 'Ya puede teclear el texto que desee, Para salir, presione ESC$' final db 0 inicio endp alfa ends end inicio ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ahora, consigue un compilador y un linkeador suerte y no seas tan recortero!!! salu2!!! Última edición por aeff fecha: 26-12-2006 a las 03:20:17. |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Assembler desde delphi | lookmydoom | Varios | 3 | 30-06-2006 21:56:20 |
| assembler y el señor delphi | fcran | Varios | 2 | 26-06-2006 11:32:14 |
| Mover datos al LPT1 con Assembler en XP | Fralva | Varios | 3 | 08-08-2005 15:02:13 |
| Fuentes assembler o .asm | Leomedellin | Varios | 7 | 19-04-2005 07:09:33 |
| assembler en delphi | fcran | Varios | 4 | 23-05-2003 07:35:44 |
|