![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problemas con la Int 13h
Saludos a todos Uds.
Agradeciendo sus comentarios y sobre todo la ayuda que me puedan brindar. Nuevamente molestandolos con mis dudas, y es que en un anterior hilo ya habia comentado de mi interes por explorar los sectores dañados de un disco. Con la sugerencia de muchos de Uds. estoy tratando de trabajar Assembler desde Delphi, el cual ya me dio los primeros desafios. La verdad es que lo que hice en Assembler en el pasado, fue operaciones basicas...pero lo que ahora estoy intentando hacer, lo hago por primera vez. Para ponerlos al tanto les paso el codigo que me da pelea: "Procedure PruebaCluster; {Encargado de probar un cluster en un disco utilizando codigo Assembler} Var bDLUnidad,bDHCara,bCHPista,bCLSector,bALNSectores,bResul:ShortInt; Label bOk,bErr; Begin //Asignamos los valores a ser revisados bDLUnidad:=0; //Unidad A: bDHCara:=0; //Cara 0 bCHPista:=3; //Pista 3 bCLSector:=7; //Sector 57 bALNSectores:=1; Asm //Inicio del codigo assembler Xor AX,AX //Ponemos a 0 el registro AX Mov AH,4 //Verificar sectores Mov DL,bDLUnidad Mov DH,bDHCara Mov CH,bCHPista Mov CL,bCLSector Mov AL,bALNSectores Int 13h //Llamar a la Interrupcion 13 Jnc bOk //Saltar si no hay error Mov bResul,1 //Si hay error Jmp bErr //Saltar a error bOk: Mov bResul,0 //No hay error bErr: //Terminar End; Form1.txtResultado.Text:=IntToStr(bResul); End;" El problema que tengo es que al llegar a la linea "Int 13h" la pantalla se pone azul con el siguiente mensaje: "Excepcion grave 0D en 0028:00002ABC en VXD VMM(01) +00001ABC" Haciendo la ejecucion paso a paso..todo va de maravillas (es lo que creo)hasta la linea que les indico... Por supuesto que las preguntas se viene a miles. Tengo por ayuda dos libros de ensamblador y dos de Delphi...pero el libro de Ensamblador, como es logico, solo trata de ensamblador y los de Delphi mencionan muy poco acerca de delphi y ensamblador...Asi que solo tengo buestra ayuda...para mis dudas. Estoy haciendo mis peripecias en una PII 400 mhz con Win98 SE, 64 MB de Ram. Estas son mis dudas: 1.- Es suficiente el codigo ensamblador que pongo, para lo que quiero hacer? (verificar un cluster si esta bien o mal es decir trabajar la Int 13 con la funcion 04 verificar sectores) 2.- De acuerdo al mensaje es un VXD el que esta dando lios..Sera por que estoy trabajando en Windows y este no deja acceder directamente al disco?. Les pediria que me den luces sobre esta oscura duda y experiencia. Mil gracias por su ayuda y por el tiempo que me brindan. PD. Disculpen por no usar las etiquetas Atentamente Carlo Última edición por carlocf fecha: 08-11-2005 a las 03:43:24. Razón: Disculpas por no usar las etiquetas |
#2
|
||||
|
||||
Pues acabo de hacer la prueba tecleando a mano el código en el Debug y me lee el disquete y no me da ningún error.
La bandera de acarreo sigue NC (Not Carry). En cualquier caso hecho de menos PUSH y salvar los registros que se van a usar y finalizar con POP Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
![]() |
#3
|
||||
|
||||
Cita:
Atentamente Carlo |
#4
|
||||
|
||||
Esta mañana hice la prueba con W98 y ahora acabo de hacerla con XP profesional funciona correctamente si introduzco la sentencias en el Debug desde el DOS.
Debug A 100 Xor Ax,Ax Etcétera, pero si hago la prueba desde Delphi me reporta un error, por el momento no sé por qué. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
![]() |
#5
|
||||
|
||||
Pues me estoy temiendo lo peor, acabo de ver por distintas páginas muchos ejemplos de Ensamblador en Delphi y se ejecuta prácticamente todo el juego de instrucciones, pero ninguna de ellas ejecutaba interrupciones, como por ejemplo la 21H no tan peligrosa como la 13H, por lo que de momento pienso que esté prohibidio la ejecución de interrupciones????
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
![]() |
#6
|
||||
|
||||
Cita:
![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#7
|
||||
|
||||
Cita:
De acuerdo al comentario que me dan creo que la pendiente se hace un poco mas inclinada. Pero creo que el final sera mas grato... En el link que les muestro lineas mas abajo encontre un articulo que trata del acceso direto a discos...pero la verdad que el codigo me parece C++ usando las estructuras propias de Windows. Buscando por la red encontre este link.. http://support.microsoft.com/default...d=kb;es;137176 imagino que el codigo esta en C++. Podre utilizar Delphi para crear un VXD? ya que creo que por ahi es el camino ojala que no...pero a estas alturas...me di cuenta que solo se ....que nada se... Gracias por los comentarios que puedan alcanzarme acerca de esta pagina Atentamente Carlo Última edición por carlocf fecha: 09-11-2005 a las 03:11:47. Razón: Aumentar comentarios |
#8
|
||||
|
||||
Saludos a todos Uds....gracias por el tiempo que se toman al leer mis mensajes....
Me veo frustrado por que una operacion simple de acceso a disco se me hace mas complicado...de lo que pense....entre las muchos pensamientos que tengo....se me ocurrio esta...Existen muchos virus que ingresan a Windows....muchos de ellos pueden infectar el boot de algun diskette que se encuentre en la disketera....ahora eso pasa por hacer uso de Interrupciones....creo que a estas alturas debo pensar en codigo que le saque la vuelta a a Windows para poder usar las Int. en otras palabras usar tecnicas viricas?....es decir mas investigacion....(y esto como broma....conocen de algun sitio para crear virus en delphi y que me enseñe a usar Int para acceder al disco de tal forma que Wndows o se de cuenta???).... Gracias por la ayuda estimados amigos del foro.. Atentamente Carlo |
#9
|
||||
|
||||
Cita:
Esta es una categórica respuesta de Nick Hodges en los foros de Borland: Cita:
|
#10
|
||||
|
||||
Cita:
Por lo expuesto... ![]() Atentamente Carlo |
#11
|
||||
|
||||
Resuelto
Saludos, casi despues de dos años les comento como resolvi mi problema. Definitivamente usando Delphi con codigo ASM no puedo acceder a la INT 13 pero probando descubri que PASCAL para windows si lo hace. Asi que introduje el codigo en PASCAL y este a su vez escribe un archivo txt en el disco. Desde Delphi llamo al EXE y luego leo el resultado en el txt. Solo de esta forma pude saltarme el ring0 de Windows que no deja acceder a las Interrupciones.
Saludos Amigos |
#12
|
||||
|
||||
Cita:
Una preguntita, ¿ese PASCAL para Windows es este o es otro? |
#13
|
||||
|
||||
Cita:
![]() ![]() ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#14
|
||||
|
||||
Cita:
Cita:
Saludos |
![]() |
|
|
![]() |
|