Quel le genre de programmation où l'assembleur sert vraiment?

Signaler
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010
-
Messages postés
13
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
6 janvier 2006
-
salut
est-ce-que l'asm peut tenir à côté des langages évolués? et quel sont les domaines où il est le meilleur? il faut compter la longeur du temps de la création de son projet. peut-il créer des jeux vidéo (minimum 1 an, bah on sait que tout les langages peuvent le créer mais reste le plus recommandé)?

merci de me répondre

14 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Il est inconcevable de créer aujourd'hui un jeu vidéo en assembleur, ca prendrait trop longtemps, et ca n'est pas vraiment utile. En fait, seules les parties du programme qui doit être très efficaces sont écrites en assembleur, par exemple pour les calculs.
C'est aussi le genre d'arguments qui me donne des états d'âmes à apprendre l'asm, je ne suis pas persuadé de l'utilité finale.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Allez au boulot et cesse de te poser de pareilles questions. Tu as deja vu des connaissances inutiles ? pas moi.
L'ASM 32 bits s'apprend tout seul, pas de type de variable, de cast ni aucun truc verbeux, juste une serie de mnemonics a se rappeler et comme ils sont evidents tu les sais en 1 mois maxi en pratiquant 1 heure par jour.
Regarde toutes les classe BigInt qu'on trouve ici ou la, pas une n'est viable tant qu'elle sera en C++, fais une boucle de division et le resultat 1/4 h apres. Simple exemple ou asm est indispensable et on en trouvera tant d'autres.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

je fais +qu'une heure par jour, et je suis pas le type qui a la cervelle bloqué, je commencais la programmation vb à 8 , maintenant j'ai eu marre de ce langage qui est le plus faible, mais l'asm m'a fait subir des dégats psychiques "Eh oui" , Le .IF ca marche pas, mais il reste quoi de plus facile que l'universel if (je parle pour masm, le cmp pour les autre, je me casse pas la tete). et qui me fait la vertige, c'est que ce language ne fait pas différence entre dim a as integer et dim a as string, il prends tout en string, rassembler des nombres(ascii), je pense que je vais laisser ces trucs à l'université, et je passe à des trucs de web (asp).j'ai deux question
-Quel est le logiciel pour programmer en asp? est-ce-fourni avec le visual studio??
-On étudie l'asm en univérsité? (branche d'un programmeur)

merci

ciao... "Brunews :-) "
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
'prends tout en string', ben visiblement t'as loupe une etape.
Aucune notion de string en ASM ni C, langages bas niveaux ne connaissent que des adresses memoire et des registres, le reste est de la philo.
Tres bien le script et asp, clic clic dans dreamweaver et s'ecrit tout seul. Bien sur la paie ne sera pas la meme, mais on ne peut pas pretendre au clic et a l'argent du code.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
805
Date d'inscription
jeudi 22 mai 2003
Statut
Membre
Dernière intervention
30 octobre 2010

Ah, merci mon brunews, tu ma tout expliqué en 1 seul ligne, "langages bas niveaux ne connaissent que des adresses memoire et des registres", alors je constate que si j'ai un texte "2223" et je veux le convertir en un nombre, je doit mettre tout dans une variable 16bit qui contient 2223, et c'est de mes propres calcules, l'asm ne sait rien "RIEN" que placer des valeurs et c'est à nous de tout gerer ??? si c'est vraiment comme ca, je suis soulagé, moi qui cherchait des commandes pour changer une variable de string à integer.pfffffff, quel idiot. mais attends, ce que je viens de dire est vrai ???
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
fait chier les bugs Nix, ecrire 1 demi heure pour ce retrouver avec un message d'erreur ca fout les boules
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Dans ce cas il y a le bouton "Précedent", non?
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
Et surtout faire un copier du texte tape avant d'envoyer.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
13
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
6 janvier 2006

Bonjour tout le monde, je voudrais savoir si quelqu'un pourras m'aider. Je suis vraiment debutant en assembleur : jamais fait du tout, un peu a l'ecole...
On a des tp la dessus. On travaille sur le lengage Motorolla 68000.
Je voudrais du help....

MOCTAR www.babasoft.4tcom
Messages postés
13
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
6 janvier 2006

voila, je vous envoie le code en C ainsi que ce que j'ai fait pour passer en asm.
Veuillez me corriger svp....

#include <stdio.h>
#include <string.h>

void traitement(char* chaine1, char* chaine2, int type, int* length)
{

XDEF _traitement
_traitement:

MOVE.L (4,A7) , D0 //ON MET CHAINE1 DANS D0
MOVE.L (8,A7) , D1 //ON MET CHAINE2 DANS D1
MOVE.L (12,A7) , D2 //ON MET TYPE DANS D2
MOVE.L (16,A7) , D3 //ON MET LENGTH DANS D3

MOVE.L A0, -(A7) //ON SAUVEGARDE L'ETAT DE A0
MOVE.L D0, A0 //ON MET D0 DANS A0

MOVE.L A1, -(A7) //ON SAUVEGARDE L'ETAT DE A1
MOVE.L D1, A1 //ON MET D1 DANS A1



BRA.S loop_condition //ON SE BRANCHE DIRECTEMENT SUR LA CONDITION DU WHILE



yes_majuscule :
//LA DIFFERENCE ENTRE UNE MINUS ET SA MAJUS EST : 32 CARACTERES...
ADD.B #32, (A0)
MOVE.L (A0), (A1)
SUB.B #32, (A0)
RTS


if_majuscule2 :
CMP.B (A0), 5A
BLE.S yes_majuscule //SI C'EST INF. A 5A => OK
BGT.S non_fin_mot3 //SINON, ON COPIE UN A UN, I.E A non_fin_mot3
RTS


if_majuscule1 :
CMP.B (A0), 41
BEQ.S if_majuscule2 //SI C'EST SUP. A 41 => OK
BLT.S non_fin_mot3 //SINON, ON COPIE UN A UN, I.E A non_fin_mot3
RTS


execution_MAJUS:
BRA.S if_majuscule1 //ON MET EN MAJUSCULE LA LETTRE

RTS


yes_minuscule :
//LA DIFFERENCE ENTRE UNE MINUS ET SA MAJUS EST : 32 CARACTERES (EN DECIMALE)...
SUB.B #32, (A0)
MOVE.L (A0), (A1)
ADD.B #32, (A0)
RTS


if_minuscule2 :
CMP.B (A0), 7A
BLE.S yes_minuscule //SI C'EST INF. A 7A => OK
BGT.S non_fin_mot3 //SINON, ON COPIE UN A UN, I.E A non_fin_mot3
RTS


if_minuscule1 :
CMP.B (A0), 61
BGE.S if_minuscule2 //SI C'EST SUP. A 61 => OK
BLT.S non_fin_mot3 //SINON, ON COPIE UN A UN, I.E A non_fin_mot3
RTS



execution_MINUS:
BRA.S if_minuscule1 //ON MET EN MINUSCULE LA LETTRE
RTS



non_fin_mot1:

ADD.L #1, A2
CMP.B (D2), #0X00 //SI TYPE==0
BGE.S execution_MAJUS //BGE = SI C'EST EGAL
BNE.S non_fin_mot2 //SI type!=0 => ON VA SUR LE 2ND CAS
RTS



non_fin_mot2:
CMP.L (D2), #01 //SI TYPE==1
BGE.S execution_MINUS //BGE = SI C'EST EGAL
BNE.S non_fin_mot3 //SI type!=1 => ON VA SUR LE 3EME CAS
RTS



non_fin_mot3:

MOVE.L (A0), (A1) //ON FAIT UNE COPIE DIRECTE DE CHAINE1 DANS CHAINE2
//LA, ON EST DANS LE CAS PAR DEFAUT. ALORS, ON COPIE LA CHAINE TELLE QU'ELLE
ADD.L #01, D3 // on incremente length...

RTS




loop_chaine:
CMP.B (A0), #0X20 //CARACTERE ESCAPE = 20
BNE.S non_fin_mot1 //BNE = SI C'EST DIFFERENT
RTS




loop_condition:
ADD.L #1, A0 //NON PAS ADD.L (D3), ..
CMP.L (A0), #0X00 //'\0' = NULL = 00
BNE.S loop_chaine //BNE = SI C'EST DIFFERENT
RTS



while(chaine1[*length] != '\0')
{

if(chaine1[*length] == ' ')
{


chaine2[*length] = '\0';

break;


}
else
{

switch(type)
{

case 0: chaine2[*length] = toupper(chaine1[*length]); break;

case 1: chaine2[*length] = tolower(chaine1[*length]); break;

default :chaine2[*length] = chaine1[*length];

}




(*length)++;



}


}

}

void saisie()
{
char chaine1[200];
int type;
int longueur;
char chaine2[200];
printf("entrer une chaine, puis appuyer sur entree...\n");
gets(chaine1);
longueur = strlen(chaine1);
printf("pour convertir votre chaine en majuscule tapez 0\n");
printf("pour convertir votre chaine en miniscule tapez 1\n");
printf("sinon tapez un autre digit\n");
scanf("%d",&type);
printf("le type de conversion est %d",type );
traitement(chaine1, chaine2, type, &longueur) ;
printf("\n%s", chaine1);
printf("\n%s", chaine2);
printf("\n%d",longueur);
}
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
le Motorolla 68000 n'est pas un language, c'est un microprocesseur....
après, je dirai que si ce sont tes TP, le but d'un forum n'es tpas de faire tes devoirs a ta place....

de plus, tu fournis tout un code, sans dire ce qui te bloque, ce qui est faux, ou quoi que ce soit d'autre.....

au fait, pourquoi ne pas avoir créé un nouveau Topic ??

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
13
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
6 janvier 2006

Bonjour et merci sur cette rapide intevention.

Tout d'abord, comme j'ai dit je suis un débutant, alors je peux faire
des confusions. : veuillez me mettre sur la bonne voie svp.

Segundo, ce n'est pas un devoir, mais plutot comme je l'ai dit un exemple que j'ai voulu traiter moi-meme.



Le code est mis sur un topic déjà. Je ne connais po l'adresse mais vous pouvez le voir dans la catégo. CHAINE DE CARACTERES.

Thank you..

MOCTAR, May i help you...

babasoft.4t.com
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
catégorie "chaines de caractères" ?

mais que racontes-tu .. ??

je t'invites simplement a reposer une nouvelle question.... rien de plus
ici pour le faire : http://www.asmfr.com/forum.v2.aspx?ajout=1

Renfield
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
13
Date d'inscription
lundi 6 décembre 2004
Statut
Membre
Dernière intervention
6 janvier 2006

Je suis désolé, mais j'arrive pas à le poster. Je te fais une desription de ce que je veux :

J'ai la fonction c suivante :

Cette fonction prend en paramètres une chaine qui sera modifié et stockée dans une autre chaine chaine2type et renvoie aussi sa longueur length.

MERCI ET STP HELP-ME C URGENT!!!







#include

#include



void traitement(char* chaine1, char* chaine2, int type, int* length)

{


while(chaine1[*length] != '\0')


{


if(chaine1[*length] == ' ')


{


chaine2[*length] = '\0';


break;


}


else


{


switch(type)


{


case 0: chaine2[*length] = toupper(chaine1[*length]); break;


case 1: chaine2[*length] = tolower(chaine1[*length]); break;


default :chaine2[*length] = chaine1[*length];


}


(*length)++;


}


}


}









SI TU VEUX VOILA CE QUE J'AI ESSAYE AVEC L'ASSEMBLEUR :

(C PAS ENCORE TOUT COMPLET...)



XDEF _traitement

_traitement:



MOVE.L (4,A7) ,
D0 //ON MET CHAINE1
DANS D0

MOVE.L (8,A7) ,
D1 //ON MET CHAINE2 DANS D1


MOVE.L (12,A7) , D2 //ON MET TYPE DANS D2

MOVE.L (16,A7) ,
D3 //ON MET LENGTH DANS D3



MOVE.L A0, -(A7)
//ON
SAUVEGARDE L'ETAT DE A0

MOVE.L D0,
A0
//ON MET D0 DANS A0



MOVE.L A1, -(A7)
//ON
SAUVEGARDE L'ETAT DE A1

MOVE.L D1,
A1
//ON MET D1 DANS A1







BRA.S
loop_condition //ON SE BRANCHE
DIRECTEMENT SUR LA CONDITION DU WHILE







yes_majuscule :


//LA
DIFFERENCE ENTRE UNE MINUS ET SA MAJUS EST : 32 CARACTERES...

ADD.B #32, (A0)


MOVE.L (A0), (A1)


SUB.B #32, (A0)

RTS





if_majuscule2 :

CMP.B (A0), 5A


BLE.S yes_majuscule

//SI C'EST INF. A 5A => OK


BGT.S non_fin_mot3

//SINON, ON COPIE UN A UN, I.E A non_fin_mot3

RTS





if_majuscule1 :

CMP.B (A0), 41


BEQ.S if_majuscule2

//SI C'EST SUP. A 41 => OK


BLT.S non_fin_mot3

//SINON, ON COPIE UN A UN, I.E A non_fin_mot3

RTS





execution_MAJUS:


BRA.S if_majuscule1

//ON MET EN
MAJUSCULE LA LETTRE



RTS





yes_minuscule :




//LA DIFFERENCE ENTRE UNE MINUS ET SA MAJUS EST : 32
CARACTERES (EN DECIMALE)...

SUB.B #32, (A0)


MOVE.L (A0), (A1)


ADD.B #32, (A0)

RTS





if_minuscule2 :

CMP.B (A0), 7A


BLE.S yes_minuscule

//SI C'EST INF. A 7A => OK


BGT.S non_fin_mot3

//SINON, ON COPIE UN A UN, I.E A non_fin_mot3

RTS





if_minuscule1 :

CMP.B (A0), 61


BGE.S if_minuscule2

//SI C'EST SUP. A 61 => OK


BLT.S non_fin_mot3

//SINON, ON COPIE UN A UN, I.E A non_fin_mot3

RTS









execution_MINUS:


BRA.S if_minuscule1

//ON MET EN
MINUSCULE LA LETTRE

RTS







non_fin_mot1:





ADD.L #1, A2


CMP.B (D2),
#0X00 //SI TYPE==0

BGE.S execution_MAJUS //BGE = SI C'EST EGAL


BNE.S non_fin_mot2 //SI type!=0
=> ON VA SUR LE 2ND CAS

RTS







non_fin_mot2:


CMP.L (D2),
#01 //SI TYPE==1

BGE.S execution_MINUS //BGE = SI C'EST EGAL


BNE.S non_fin_mot3 //SI type!=1
=> ON VA SUR LE 3EME CAS

RTS







non_fin_mot3:






MOVE.L (A0), (A1)
//ON FAIT UNE COPIE DIRECTE DE
CHAINE1 DANS CHAINE2




//LA, ON EST DANS LE CAS PAR
DEFAUT. ALORS, ON COPIE LA CHAINE TELLE QU'ELLE


ADD.L #01,
D3
// on incremente length...



RTS









loop_chaine:


CMP.B (A0), #0X20 //CARACTERE
ESCAPE = 20

BNE.S non_fin_mot1 //BNE = SI C'EST DIFFERENT

RTS









loop_condition:


ADD.L #1, A0 //NON PAS ADD.L
(D3), ..


CMP.L (A0),
#0X00 //'\0' = NULL = 00

BNE.S loop_chaine //BNE = SI C'EST DIFFERENT

RTS