begin process at 2012 05 29 00:34:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Systeme

 > 

Le C et la commande ASM : RET !


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

Le C et la commande ASM : RET !

mardi 24 août 2004 à 03:34:53 | Le C et la commande ASM : RET !

Foub12

Bonjour,

j'ai récupéré sur Internet les lignes suivantes, codés en assembleur qui permet de déterminer si le BIOS et les disques durs supportent des tailles supérieures à 8GO :

«
push bx cx dx;
mov ah,41h; //Fonction 41h
mov bx,55AAh; //obligatoire.
int 13h; //interruption disques BIOS
cmp bx,55AAh; //Si retourne 55AAh, BIOS et disque supporte fonctions étendues.
pop dx cx bx;
ret
»

J'ai voulu créé une fonction C, qui renverrait le résultat. Mais je ne sais pas comment récupérer la valeur que renvoie le ret ???

int LBA() {
//Fonction qui permet de tester si le BIOS supporte des
//disques supérieur à 8Go !
int res;

asm {
push bx cx dx;
mov ah, 41h;
mov bx, 55AAh;
int 13h;
cmp bx,55AAh;
pop dx cx bx;
ret
}

return res;

}

Comment récupérer dans ma variable C res, le résultat des lignes assembleur...
Merci de votre aide.

Fabien

mardi 24 août 2004 à 08:25:18 | Re : Le C et la commande ASM : RET !

EBArtSoft

Membre Club Administrateur CodeS-SourceS
As tu une connaissance du language assembleur ?
a premiere vue non mais c'est pas grave le principe est que tu doit recuperer ta valeur soit en passant par la memoire soit en passant par les registres (ax,bx etc...)

ajoute ceci :

cmp bx,55AAh;
jne L0;
mov word ptr res,1;
L0:
pop dx;
pop cx;
pop bx;
ret;

ou bien passe par une stack frame...

@+

E.B.
mardi 24 août 2004 à 08:26:38 | Re : Le C et la commande ASM : RET !

EBArtSoft

Membre Club Administrateur CodeS-SourceS
Ou bien tout bete tu recupere la valeur de bx et tu teste res dans ton code C

mov res,bx

...


If (res == 0x55AA) {
Return TRUE;

@+

E.B.
mardi 24 août 2004 à 09:49:21 | Re : Le C et la commande ASM : RET !

BruNews

Administrateur CodeS-SourceS
Tout ceci est ULTRA OBSOLETE, A BANNIR !!!

ciao...
BruNews, Admin CS, MVP Visual C++
mardi 24 août 2004 à 11:38:16 | Re : Le C et la commande ASM : RET !

DeAtHCrAsH

Ptit ajout au commentaire de Brunews> INTERRUPTION = BANNI des systemes actuels!

Shell
mardi 24 août 2004 à 12:11:16 | Re : Le C et la commande ASM : RET !

EBArtSoft

Membre Club Administrateur CodeS-SourceS
a premier vue il programme de l'asm inline pour un programme C DOS 16 bits donc peut importe si c obselete

Z'etes en forme aujourd'huis ;)

@+

E.B.
mardi 24 août 2004 à 12:24:21 | Re : Le C et la commande ASM : RET !

BruNews

Administrateur CodeS-SourceS
Ah ben oui EB, si la base est obsolete alors en avant...

ciao...
BruNews, Admin CS, MVP Visual C++
mardi 24 août 2004 à 15:21:59 | Re : Le C et la commande ASM : RET !

Foub12

re,

pour commencer, je voulais vous remercier de m'avoir répondu...
Alors, oui je programme avec un compiltateur DOS 16 bits donc je peux utiliser les interruptions du BIOS...

Et non, je ne sais pas programmer en ASM même si je suis BAC+4 en info et que je rentre en DESS...

EbArtSoft, ton code à l'air pas mal :
«
cmp bx,55AAh;
jne L0;
mov word ptr res,1;
L0:
pop dx;
pop cx;
pop bx;
ret;
»
mais il ne compile pas... TC++ ne reconnait pas les étiquettes...
Je sais pas comment on fait pour que le compilateur les comprenne ???

Quand à la ligne : « mov res, bx », j'ai essayé de la casé un peu partout (après le ret, avant le ret, après le cmp bc, 55AAh) mais sans réussite.... Où dois-je l'écrire ???

Merci pour votre aide.
Fabien

mardi 24 août 2004 à 20:04:00 | Re : Le C et la commande ASM : RET !

EBArtSoft

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Voila rapidement un exemple qui fonctionne sous Borland Turbo C++ 3.0 (c'est pas optimisé du tout j'ai essayer de conserver ton approche du probleme)


#include <stdio.h>

int LBA(void) {
int Temp;
asm {
PUSH BX;
PUSH CX;
PUSH DX;
MOV AH,41h;
MOV BX,55AAh;
INT 13h;
MOV Temp,BX;
POP DX;
POP CX;
POP BX;
}
return (Temp == 0x55AA);
}

int main(void) {
if (LBA()) {
printf("Oui");
}else{
printf("Non");
}
return 1;
}


@+

E.B.
mardi 24 août 2004 à 20:26:17 | Re : Le C et la commande ASM : RET !

BruNews

Administrateur CodeS-SourceS
Remplit direct AX et vire 'Temp' qui ne sert a rien.

PUSH CX;
PUSH DX;
C'est vraiment utile ?

ciao...
BruNews, Admin CS, MVP Visual C++

1 2

Cette discussion est classée dans : bios, cx, bx, ret, 55aah


Répondre à ce message

Sujets en rapport avec ce message

conversion de syntaxe en compilateur [ par laulau10 ] int i=1;do printf("coucou");whil(i=1);on peux me dire commen,t convertir ceci pour que ca fonctionne sous dev-c++ void Fa() { asm{ MOV AX,3 INT 0x33 bios.h [ par surfeurnet ] Quelqu'un pourrait-il s'il y une ligne de commande à ajouter à dev-cpp(gcc) pour utiliser bios.h (une librairie à linker)?Merci d'avance.@++ bios.h [ par mogolo ] Salut!! Je cherche désespèrément l'entête bios.h. J'en ai besoin pour lire sur le port série en C!!Merci de me l'envoyer à cette adresse ou de m'indiq BIOS.H [ par RaZoR ] Bonjour tout les programmeurs !!Je recherche la librairie Bios.h pour Dev C++ et/ou VC++ !!Je n'arrive pas a en trouver une qui marche avec ces compil BIOS enttre win98 et 2000 [ par oudkaramla ] bonjour tout le monde j'ai un programme programmé en C de pilotage d'une machine, et qui fait appel aux interrupt calls donc programmation bas niveau. pb port série, Visual C++, bios.h [ par Amiral_tChai ] Bonjour, je dois, pour mon travail, dialoguer avec un périphérique via le port COM. J'ai déjà fait plusieurs versions de programme pour dialoguer via bios.h [ par rakma74 ] Bonjour,je suis a la recherche d'un "bios.h" pour interfacer un port serie...Quelqu'un saurait-il ou je peux le télécharger...merci d'avance.Si je ne bios.h dans free Borland C compiler v5.5 [ par emilnico ] j'ai descendu sur le site de borland le compilateur C 5.5. (BCC32)la bibliotèque bios.h ne se trouve pas dans le répertoire , donc je ne peut pas util MULTIPLICATION D'UNE MATRICE PAR UN VECTEUR [ par jfk20004 ] Quelqu'un pourrait il m'expliquer le bout de code suivant tiré d'un prog de raytrace .Cette partie est censée multiplier une matriceet un vecteur.Je n dll modifiant "auto wake up" du bios ?? [ par _benjy ] bonjour a tous,je cherche un developpeur C++ capable de me faie petite DLL :je suis en train de faire une p'tite appli horloge-reveil. mais je veux qu


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,811 sec (4)

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