begin process at 2012 05 29 13:19:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Systeme

 > 

mettre de l'assembleur en ligne sous Visual C++


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

mettre de l'assembleur en ligne sous Visual C++

vendredi 21 février 2003 à 17:58:06 | mettre de l'assembleur en ligne sous Visual C++

alain34270

alain

Bonjour,

Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.

Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).

Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?

Merci d'avance !

alain
vendredi 21 février 2003 à 18:34:07 | Re : mettre de l'assembleur en ligne sous Visual C++

BruNews

Administrateur CodeS-SourceS
Salut,
en VC++ tu fais une func en asm pur sans probleme
exemple, on fait a = a + b * -1:
__declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b)
{
__asm {
mov eax, [esp+8] ; b
mov ecx, [esp+4]
neg eax
inc eax
add [ecx], eax
ret 8
}
}
bien sur toi tu feras un truc utile, juste pour montrer.
Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux.
Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab.
Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl.
ciao...

-------------------------------
Réponse au message :
-------------------------------

> alain
>
> Bonjour,
>
> Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.
>
> Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).
>
> Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?
>
> Merci d'avance !
>
> alain
>
vendredi 21 février 2003 à 19:14:13 | Re : mettre de l'assembleur en ligne sous Visual C++

GoldenEye





-------------------------------
Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b
Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP.
-------------------------------

> Salut,
> en VC++ tu fais une func en asm pur sans probleme
> exemple, on fait a = a + b * -1:
> __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b)
> {
> __asm {
> mov eax, [esp+8] ; b
> mov ecx, [esp+4]
> neg eax
> inc eax
> add [ecx], eax
> ret 8
> }
> }
> bien sur toi tu feras un truc utile, juste pour montrer.
> Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux.
> Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab.
> Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl.
> ciao...
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > alain
> >
> > Bonjour,
> >
> > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.
> >
> > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).
> >
> > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?
> >
> > Merci d'avance !
> >
> > alain
> >
>
vendredi 21 février 2003 à 19:49:46 | Re : mettre de l'assembleur en ligne sous Visual C++

BruNews

Administrateur CodeS-SourceS
le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant.
Il y avait dans exemple 2 params donc 8 octets.
Donc ret 8 fera:
mov eip, [esp]
add esp, 8
Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc...
Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP.
la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc..
le prog peut continuer car il a recup adr next instruction.
Tu peux mettre int value sans probleme, a toi de coder value correctement.
ciao...

-------------------------------
Réponse au message :
-------------------------------

>
>
>
>
> -------------------------------
> Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b
> Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP.
> -------------------------------
>
> > Salut,
> > en VC++ tu fais une func en asm pur sans probleme
> > exemple, on fait a = a + b * -1:
> > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b)
> > {
> > __asm {
> > mov eax, [esp+8] ; b
> > mov ecx, [esp+4]
> > neg eax
> > inc eax
> > add [ecx], eax
> > ret 8
> > }
> > }
> > bien sur toi tu feras un truc utile, juste pour montrer.
> > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux.
> > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab.
> > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl.
> > ciao...
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > alain
> > >
> > > Bonjour,
> > >
> > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.
> > >
> > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).
> > >
> > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?
> > >
> > > Merci d'avance !
> > >
> > > alain
> > >
> >
>
samedi 22 février 2003 à 08:24:18 | Re : mettre de l'assembleur en ligne sous Visual C++

alain34270


alain

merci pour tous ces détails.

le 8 après le ret sert à dépiler 8 octets avant de faire le ret.


alain

-------------------------------
Réponse au message :
-------------------------------

>
>
>
>
> -------------------------------
> Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b
> Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP.
> -------------------------------
>
> > Salut,
> > en VC++ tu fais une func en asm pur sans probleme
> > exemple, on fait a = a + b * -1:
> > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b)
> > {
> > __asm {
> > mov eax, [esp+8] ; b
> > mov ecx, [esp+4]
> > neg eax
> > inc eax
> > add [ecx], eax
> > ret 8
> > }
> > }
> > bien sur toi tu feras un truc utile, juste pour montrer.
> > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux.
> > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab.
> > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl.
> > ciao...
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > alain
> > >
> > > Bonjour,
> > >
> > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.
> > >
> > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).
> > >
> > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?
> > >
> > > Merci d'avance !
> > >
> > > alain
> > >
> >
>
samedi 22 février 2003 à 17:40:28 | Re : mettre de l'assembleur en ligne sous Visual C++

alain34270


alain

Salut.

Maintenant, j'arrive sans problème à mettre de l'asm dans un programme C (merci beaucoup).

Mon (autre) problème, c'est que je dois lire des secteurs qui ne font partie d'aucune partition (puisqu'elle n'existe plus :-( ).
Je dois donc utiliser l'int 13h étendu.
Or, le DAP de l'int 13 étendu n'accepte que des adressages 16 bits (à ma connaissance).

Y'aurait pas moyen de créer un petit environnement 16 bits en C ? ou
Y'aurait-il une autre solution simple ?

Merci
ciao
-------------------------------
Réponse au message :
-------------------------------

> le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant.
> Il y avait dans exemple 2 params donc 8 octets.
> Donc ret 8 fera:
> mov eip, [esp]
> add esp, 8
> Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc...
> Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP.
> la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc..
> le prog peut continuer car il a recup adr next instruction.
> Tu peux mettre int value sans probleme, a toi de coder value correctement.
> ciao...
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> >
> >
> >
> > -------------------------------
> > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b
> > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP.
> > -------------------------------
> >
> > > Salut,
> > > en VC++ tu fais une func en asm pur sans probleme
> > > exemple, on fait a = a + b * -1:
> > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b)
> > > {
> > > __asm {
> > > mov eax, [esp+8] ; b
> > > mov ecx, [esp+4]
> > > neg eax
> > > inc eax
> > > add [ecx], eax
> > > ret 8
> > > }
> > > }
> > > bien sur toi tu feras un truc utile, juste pour montrer.
> > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux.
> > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab.
> > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl.
> > > ciao...
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > alain
> > > >
> > > > Bonjour,
> > > >
> > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.
> > > >
> > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).
> > > >
> > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?
> > > >
> > > > Merci d'avance !
> > > >
> > > > alain
> > > >
> > >
> >
>
samedi 22 février 2003 à 17:42:07 | Re : mettre de l'assembleur en ligne sous Visual C++

alain34270


alain


-------------------------------
Réponse au message :
-------------------------------

>
> alain
>
> Salut.
>
> Maintenant, j'arrive sans problème à mettre de l'asm dans un programme C (merci beaucoup).
>
> Mon (autre) problème, c'est que je dois lire des secteurs qui ne font partie d'aucune partition (puisqu'elle n'existe plus :-( ).
> Je dois donc utiliser l'int 13h étendu.
> Or, le DAP de l'int 13 étendu n'accepte que des adressages 16 bits (à ma connaissance).
>
> Y'aurait pas moyen de créer un petit environnement 16 bits en C ? ou
> Y'aurait-il une autre solution simple ?
>
> Merci
> ciao
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant.
> > Il y avait dans exemple 2 params donc 8 octets.
> > Donc ret 8 fera:
> > mov eip, [esp]
> > add esp, 8
> > Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc...
> > Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP.
> > la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc..
> > le prog peut continuer car il a recup adr next instruction.
> > Tu peux mettre int value sans probleme, a toi de coder value correctement.
> > ciao...
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b
> > > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP.
> > > -------------------------------
> > >
> > > > Salut,
> > > > en VC++ tu fais une func en asm pur sans probleme
> > > > exemple, on fait a = a + b * -1:
> > > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b)
> > > > {
> > > > __asm {
> > > > mov eax, [esp+8] ; b
> > > > mov ecx, [esp+4]
> > > > neg eax
> > > > inc eax
> > > > add [ecx], eax
> > > > ret 8
> > > > }
> > > > }
> > > > bien sur toi tu feras un truc utile, juste pour montrer.
> > > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux.
> > > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab.
> > > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl.
> > > > ciao...
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > alain
> > > > >
> > > > > Bonjour,
> > > > >
> > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.
> > > > >
> > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).
> > > > >
> > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?
> > > > >
> > > > > Merci d'avance !
> > > > >
> > > > > alain
> > > > >
> > > >
> > >
> >
>
samedi 22 février 2003 à 17:57:50 | Re : mettre de l'assembleur en ligne sous Visual C++

BruNews

Administrateur CodeS-SourceS
si tu as encore un compilo C 16 bits alors oui sinon neni.
Solution envisageable (et meme preconisee pas MS si si), tu fais une dll ou un exe 16 bits avec masm (ou autre) et tu peux le charger depuis ton prog 32 bits. Moi je prefere exe mais c'est selon, exe aura avantage de tourner en processus separe et pas risque de planter prog appelant.
ciao...

-------------------------------
Réponse au message :
-------------------------------

>
> alain
>
> Salut.
>
> Maintenant, j'arrive sans problème à mettre de l'asm dans un programme C (merci beaucoup).
>
> Mon (autre) problème, c'est que je dois lire des secteurs qui ne font partie d'aucune partition (puisqu'elle n'existe plus :-( ).
> Je dois donc utiliser l'int 13h étendu.
> Or, le DAP de l'int 13 étendu n'accepte que des adressages 16 bits (à ma connaissance).
>
> Y'aurait pas moyen de créer un petit environnement 16 bits en C ? ou
> Y'aurait-il une autre solution simple ?
>
> Merci
> ciao
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant.
> > Il y avait dans exemple 2 params donc 8 octets.
> > Donc ret 8 fera:
> > mov eip, [esp]
> > add esp, 8
> > Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc...
> > Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP.
> > la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc..
> > le prog peut continuer car il a recup adr next instruction.
> > Tu peux mettre int value sans probleme, a toi de coder value correctement.
> > ciao...
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > >
> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b
> > > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP.
> > > -------------------------------
> > >
> > > > Salut,
> > > > en VC++ tu fais une func en asm pur sans probleme
> > > > exemple, on fait a = a + b * -1:
> > > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b)
> > > > {
> > > > __asm {
> > > > mov eax, [esp+8] ; b
> > > > mov ecx, [esp+4]
> > > > neg eax
> > > > inc eax
> > > > add [ecx], eax
> > > > ret 8
> > > > }
> > > > }
> > > > bien sur toi tu feras un truc utile, juste pour montrer.
> > > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux.
> > > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab.
> > > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl.
> > > > ciao...
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > alain
> > > > >
> > > > > Bonjour,
> > > > >
> > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.
> > > > >
> > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).
> > > > >
> > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?
> > > > >
> > > > > Merci d'avance !
> > > > >
> > > > > alain
> > > > >
> > > >
> > >
> >
>
lundi 24 février 2003 à 04:31:08 | Re : mettre de l'assembleur en ligne sous Visual C++

alain34270


alain

OK, merci pour tout, bruNews.
Je vais faire un petit prog exe en assembleur pour lire les secteurs...
ciao.

-------------------------------
Réponse au message :
-------------------------------

> si tu as encore un compilo C 16 bits alors oui sinon neni.
> Solution envisageable (et meme preconisee pas MS si si), tu fais une dll ou un exe 16 bits avec masm (ou autre) et tu peux le charger depuis ton prog 32 bits. Moi je prefere exe mais c'est selon, exe aura avantage de tourner en processus separe et pas risque de planter prog appelant.
> ciao...
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> >
> > alain
> >
> > Salut.
> >
> > Maintenant, j'arrive sans problème à mettre de l'asm dans un programme C (merci beaucoup).
> >
> > Mon (autre) problème, c'est que je dois lire des secteurs qui ne font partie d'aucune partition (puisqu'elle n'existe plus :-( ).
> > Je dois donc utiliser l'int 13h étendu.
> > Or, le DAP de l'int 13 étendu n'accepte que des adressages 16 bits (à ma connaissance).
> >
> > Y'aurait pas moyen de créer un petit environnement 16 bits en C ? ou
> > Y'aurait-il une autre solution simple ?
> >
> > Merci
> > ciao
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > le 8 apres ret est le nombre d'octets qui ont ete "pushes" par l'appelant.
> > > Il y avait dans exemple 2 params donc 8 octets.
> > > Donc ret 8 fera:
> > > mov eip, [esp]
> > > add esp, 8
> > > Ce ret est obligatoire cause __declspec(naked) qui interdit toute instruction C du genre return etc...
> > > Le nbr pour ret cause __stdcall, donc a l'appele de remonter ESP.
> > > la prochaine adr instruction est toujours mise en ESP. C'est pour cela qu'on recup le 1er param en [esp+4] etc..
> > > le prog peut continuer car il a recup adr next instruction.
> > > Tu peux mettre int value sans probleme, a toi de coder value correctement.
> > > ciao...
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > >
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message : Hello BruNews. Tu as l'air de mastériser l'interfaçage ASM-VC++ et moi je lutte un peu... A quoi sert le "8" après le ret ? Sinon j'ai pigé merci ! Pratik la méthode du complément à 2 pour trouver l'opposé de b
> > > > Il est par contre impossible à ma connaissance de lancer une int 16 bit (13h,21h,10h) depuis VC++ qui est 32 bits. Il faut utiliser DJGPP.
> > > > -------------------------------
> > > >
> > > > > Salut,
> > > > > en VC++ tu fais une func en asm pur sans probleme
> > > > > exemple, on fait a = a + b * -1:
> > > > > __declspec(naked) void __stdcall MaFunc(DWORD *a, DWORD b)
> > > > > {
> > > > > __asm {
> > > > > mov eax, [esp+8] ; b
> > > > > mov ecx, [esp+4]
> > > > > neg eax
> > > > > inc eax
> > > > > add [ecx], eax
> > > > > ret 8
> > > > > }
> > > > > }
> > > > > bien sur toi tu feras un truc utile, juste pour montrer.
> > > > > Avec __declspec(naked) devant func le compilo n'y fout pas ses pattes donc tu fais ce que tu veux.
> > > > > Tout le code doit se trouver dans un bloc __asm {}, ne pas oublier le ret nbr en finale, en somme de l'asm normal. C'est a toi de sauver et restaurer tout registre autre que eax, ecx et edx. Si tu veux retourner une valeur, dans eax comme d'hab.
> > > > > Fais gaffe que sur noyau NT, system va bloquer ton prog si tu essaies d'acceder au disque en direct. Soit on ecrit un driver ou on se sert de DeviceIoControl.
> > > > > ciao...
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > alain
> > > > > >
> > > > > > Bonjour,
> > > > > >
> > > > > > Voilà. J'ai un problème avec mon disque dur. je voudrais lire les secteurs physiques de mon disque dur, si possible à partir de visual C++, afin de récupérer des données suite au plantage d'une installation.
> > > > > >
> > > > > > Pour cela, je pourrais utiliser l'int 13h du bios, mais je n'ai pas envie d'écrire tout le programme en assembleur. Je pourrais lancer un petit programme à partir du c qui lit le secteur voulu et le met dans un fichier, mais l'exécution serait longue (sans parler des problèmes de synchro).
> > > > > >
> > > > > > Quelqu'un pourrait il me dire comment je peux lancer l'int 13h directement à partir du visual C++ (si c'est possible ?) ?
> > > > > >
> > > > > > Merci d'avance !
> > > > > >
> > > > > > alain
> > > > > >
> > > > >
> > > >
> > >
> >
>


Cette discussion est classée dans : ligne, visual, partir, assembleur, alain


Répondre à ce message

Sujets en rapport avec ce message

envoi de sms a partir de vicual c++ [ par initialb ] je souhaiterai savoir s'il existe un programme me permettant d'envoyer des sms via visual c++ ( si oui, merci de bien vouloir me repondre, et n'hesite Lire dans un fichier ligne par ligne [ par curator68 ] Voilà, j'ai un fichier sur mon disque, et j'aimerai lire le contenu ligne par ligne dans mon programme. J'utilise Visual C++ de Visual Studio 6.0 sp5. [Visual C++] Aide fichiers exe [ par WarioZ ] bonjour a tous,je débute en C++ et j'ai un probleme avec les fichiers exe que je cree a partir de mes codes sources...Quand je les execute a partir de Ligne de commande [ par samki ] Bonjour,j'aimerai savoir comment je pourrai lancer une ligne de commande à partir de mon code C++.Je veux gérer un logiciel à partir d'une unterface q 16 bit sous visual C++ [ par vangeurmasker ] Je cherche a utiliser le mode graphique de DOS par la commande :_asm{ mov ax,0x13 int 0x10}Pour ceux qui ne connaissent pas _asm permet de met [Visual C++]Problème avec SendMessage(.....GETTEXT,i,...) [ par goutbouyo ] J'ai juste un petit problème avec ça :SendMessage(hCtrl,LB_GETTEXT,i, (LPARAM)(LPCTSTR)chaine);En fait c'est pour obtenir les mots d'une liste ligne p Recherche par ligne -> repère [ par Raphy2145 ] Bonjour,Je travaille sur une lecture de fichier par ligne, et j'ai besoin de faire une deuxième lecture à partir de la ligne en cours...Pour détailler assembleur en ligne avec gcc [ par nalk_deen_mook ] Bonjour j'aurais aimé savoir pourquoi lorsque je compile ce bout de code, j'ai une erreur de segmentation merci d'avance#include int main(){  int a=10 Assembleur inline avec Microsoft Visual C++ Toolkit 2003 [ par skirby ] Bonjour,J'aurais voulu savoir si il était possible de faire de l'assembleur inline avec le compilateur gratuit Microsoft Visual C++ Toolkit 2003 ?J'ut Ca fonctionne qu'à partir de Visual C, pas avec l'exe ! [ par schn ] Bonjour,J'ai une appli qui tourne sous Visual C++. net (appli MFC)J'utilise une bdd ACCESS.Tout fonctionne bien lorsque j'execute mon code à partir de


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales