[asm] apprendre le 32 bits
Résolu/Fermé
HacK SpideR
Messages postés
60
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
24 février 2008
-
5 juil. 2007 à 18:17
patatalo - 23 juil. 2007 à 04:21
patatalo - 23 juil. 2007 à 04:21
A voir également:
- [asm] apprendre le 32 bits
- 32 bits - Guide
- Télécharger windows 7 32 bits usb - Télécharger - Systèmes d'exploitation
- Winrar 64 bits windows 10 - Télécharger - Compression & Décompression
- Power iso 32 bits - Télécharger - Gravure
- Ubuntu 32 bits - Télécharger - Systèmes d'exploitation
12 réponses
ekra
Messages postés
1870
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
24 juillet 2014
342
5 juil. 2007 à 18:32
5 juil. 2007 à 18:32
Bonjour,
Je n'y connais pas grand chose.
D'après ce que j'ai compris en 32 bits il n'y a plus de segments alors peut t'on crer sa variable comme en C ?
ou y a t'il encore des registres ax,dx, ... je sais aussi que il existe des registres EAX et EBX,.. plus gros que leurs originaux.
Je pense que ca veut seulement dire que les registres sont codés sur 32 bits :)
Si tu as une variable comme en C, ce n'est plus de l'assembleur... qui va décider de charger telle valeur a tel moment dans tel registre...
Je n'y connais pas grand chose.
D'après ce que j'ai compris en 32 bits il n'y a plus de segments alors peut t'on crer sa variable comme en C ?
ou y a t'il encore des registres ax,dx, ... je sais aussi que il existe des registres EAX et EBX,.. plus gros que leurs originaux.
Je pense que ca veut seulement dire que les registres sont codés sur 32 bits :)
Si tu as une variable comme en C, ce n'est plus de l'assembleur... qui va décider de charger telle valeur a tel moment dans tel registre...
HacK SpideR
Messages postés
60
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
24 février 2008
6
5 juil. 2007 à 20:10
5 juil. 2007 à 20:10
Oui sa tombe sous le sens mais je ne pense pas qu'il n'y ai que sa comme changement la personne qui ma fait connaitre l'existence du 32 bits parlait d'un "modèle de mémoire plat sans segment".
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
6 juil. 2007 à 10:09
6 juil. 2007 à 10:09
En fait ya pas d'énorme différence entre le 16 bits et le 32 bits.
Les registres ont été étendus à 32 bits:
ax => eax
bx => ebx
cx => ecx
dx => edx
si => esi
di => edi
sp => esp
bp => ebp
ip => eip
Mais les anciens registres existent toujours. C'est juste qu'ils forment la partie 16 bits de poids faible des registres. Par exemple ax est la partie 16 bits de poids faible de eax de la même manière que al est la partie 8 bits de poids faible de ax.
Ce que tu veux dire par modèle de mémoire plate sans segment, c'est peut être le fait qu'en 32 bits, les registres de segments (SS, CS, DS, ES, GS, FS) ont une importance moindre vu que tu peux adresser environ 4 GO de mémoire sur un segment. Donc plus besoin de te préoccuper des segments de mémoire. En 16 bits par contre, sur un segment, tu ne pouvais adresser que environ 65 Ko
Les registres ont été étendus à 32 bits:
ax => eax
bx => ebx
cx => ecx
dx => edx
si => esi
di => edi
sp => esp
bp => ebp
ip => eip
Mais les anciens registres existent toujours. C'est juste qu'ils forment la partie 16 bits de poids faible des registres. Par exemple ax est la partie 16 bits de poids faible de eax de la même manière que al est la partie 8 bits de poids faible de ax.
Ce que tu veux dire par modèle de mémoire plate sans segment, c'est peut être le fait qu'en 32 bits, les registres de segments (SS, CS, DS, ES, GS, FS) ont une importance moindre vu que tu peux adresser environ 4 GO de mémoire sur un segment. Donc plus besoin de te préoccuper des segments de mémoire. En 16 bits par contre, sur un segment, tu ne pouvais adresser que environ 65 Ko
HacK SpideR
Messages postés
60
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
24 février 2008
6
6 juil. 2007 à 10:40
6 juil. 2007 à 10:40
donc je peux me servir de n'importe quel segment sauf bien sur certain segments spéciaux style ah et al pour certaine interruption et cx pour les boucles ...
Sa m'aide a y voir mieu mais alors comment déclare t'on un programme en 32 bits au compilateur ?
code segment use32 ?
Sa m'aide a y voir mieu mais alors comment déclare t'on un programme en 32 bits au compilateur ?
code segment use32 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
6 juil. 2007 à 10:52
6 juil. 2007 à 10:52
Les segments c'est CS, SS etc...
Les registres c'est eax, ebx etc....
Les segments moi j'y touche jamais, donc je ne saurais pas te dire.
Les registres tu peux les modifier comme tu veux et heureusement, sauf eip (pointeur d'instruction). Mais c'est facile de modifier eip quand même, il suffit d'utiliser l'instruction jmp.
Bon alors ça dépend du compilateur (assembleur plutôt). Je suppose que les assembleurs modernes considère les programmes comme étant en 32 bits par défaut.
Moi j'utilise nasm et ya pas besoin de déclarer le 32 bits avec.
Les registres c'est eax, ebx etc....
Les segments moi j'y touche jamais, donc je ne saurais pas te dire.
Les registres tu peux les modifier comme tu veux et heureusement, sauf eip (pointeur d'instruction). Mais c'est facile de modifier eip quand même, il suffit d'utiliser l'instruction jmp.
Bon alors ça dépend du compilateur (assembleur plutôt). Je suppose que les assembleurs modernes considère les programmes comme étant en 32 bits par défaut.
Moi j'utilise nasm et ya pas besoin de déclarer le 32 bits avec.
HacK SpideR
Messages postés
60
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
24 février 2008
6
6 juil. 2007 à 11:41
6 juil. 2007 à 11:41
Ok donc en faite c'est pareille sauf qu'il ya plus d'espace dans les registres, mais ce que je voudrai savoir c'est par exemple écrire un charactére à l'écran en 16 bits sa donne sa :
que devient se morceau d'assembleur ? et sinon ce morceau de code qui est la base de mes programmes :
Change t'il ? ( j'utilise TASM )
mov ah,09h mov dx, offset message int 21h
que devient se morceau d'assembleur ? et sinon ce morceau de code qui est la base de mes programmes :
.386 code segment use16 cs:code, ds:data, ss:pile start: ;[...] code ends data segment use16 ;[...] data ends pile segment stack remplissage db 256 dup(?) pile ends end start
Change t'il ? ( j'utilise TASM )
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
6 juil. 2007 à 11:55
6 juil. 2007 à 11:55
Je n'utilise pas tasm. Donc je ne pourrais pas dire.
Ceci dit, ton code c'est pour dos (interruption 21h). Et Dos c'est mort :-)
Si tu veux continuer à programmer en utilisant des interruptions pour avoir des fonctions de base, tu peux faire ça sous Linux.
Par exemple l'equivalent de ton code sous Linux avec nasm donnera ça:
Les appels système linux sont décrits ici:
http://asm.sourceforge.net/syscall.html
D'ailleurs ce site t'aidera beaucoup: http://asm.sourceforge.net/
Et ce site pour passer de tasm à nasm:
http://rs1.szif.hu/~tomcat/win32/intro.txt
Et ce forum si tu as d'autres questions, n'hésite pas ;-)
Ceci dit, ton code c'est pour dos (interruption 21h). Et Dos c'est mort :-)
Si tu veux continuer à programmer en utilisant des interruptions pour avoir des fonctions de base, tu peux faire ça sous Linux.
Par exemple l'equivalent de ton code sous Linux avec nasm donnera ça:
mov eax, 4 mov ebx, 1 mov ecx, message mov edx, [longueur_message] int 0x80
Les appels système linux sont décrits ici:
http://asm.sourceforge.net/syscall.html
D'ailleurs ce site t'aidera beaucoup: http://asm.sourceforge.net/
Et ce site pour passer de tasm à nasm:
http://rs1.szif.hu/~tomcat/win32/intro.txt
Et ce forum si tu as d'autres questions, n'hésite pas ;-)
HacK SpideR
Messages postés
60
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
24 février 2008
6
6 juil. 2007 à 12:01
6 juil. 2007 à 12:01
Je veux bien mais je préférerai programmer sous windows niveau logiciel sur linux j'ai tout ce qui faut
donc les interruptions on les utilises plus ? du moin les dos ?
donc les interruptions on les utilises plus ? du moin les dos ?
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
6 juil. 2007 à 12:09
6 juil. 2007 à 12:09
Ben non, fini les interruptions dos sous windows :-)
Sous windows il ya des interruptions mais elles ne sont pas documentées
Par contre tu peux appeler les fonctions de l'api windows en asm.
Sous windows il ya des interruptions mais elles ne sont pas documentées
Par contre tu peux appeler les fonctions de l'api windows en asm.
HacK SpideR
Messages postés
60
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
24 février 2008
6
6 juil. 2007 à 12:11
6 juil. 2007 à 12:11
plus d'interruption dos :'(
Et ces fonction de l'api comment fonctionne t'elles ? jamais bien l'assembleur parceque on peut tout faire avec mais si les interruptions dos existe plus, sa devient dur de faire ce que l'on veut avec non ?
Et ces fonction de l'api comment fonctionne t'elles ? jamais bien l'assembleur parceque on peut tout faire avec mais si les interruptions dos existe plus, sa devient dur de faire ce que l'on veut avec non ?
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
6 juil. 2007 à 14:38
6 juil. 2007 à 14:38
Non, ça reviens presque au même.
La différence c'est que tu appeles tes fonctions avec call au lieu de int et que tu passes les paramètres par la pile au lieu des registres. Et encore, avec les processeurs 64 bits on revient aux passages de paramètres par les registres...
L'idéal serait que trouve des exemples à glaner sur le net.
La différence c'est que tu appeles tes fonctions avec call au lieu de int et que tu passes les paramètres par la pile au lieu des registres. Et encore, avec les processeurs 64 bits on revient aux passages de paramètres par les registres...
L'idéal serait que trouve des exemples à glaner sur le net.
HacK SpideR
Messages postés
60
Date d'inscription
vendredi 2 février 2007
Statut
Membre
Dernière intervention
24 février 2008
6
8 juil. 2007 à 19:36
8 juil. 2007 à 19:36
Ok merci pour toutes ces infos
salut HacK SpideR,
Effectivement, avant, avec un registre le model flat ne pouvait adresser que 64Ko (prog .com), avec le 32 bits, la taille est étendue a 4Go d'espace d'adressage.
Sous Windows, les applications ne peuvent utiliser que les 2 premiers Go, les 2 autres etant réservés aux dlls et au systeme.
Tape "Iczelion" ou "masm32" dans google et tu auras tous les outils et documentations nécessaires a l'apprentissage du 32bits avec une traduction en français pour le site de Iczelion.
n'hesite surtout pas a te taper la documentation intel qui est très complète, tu as aussi le réseau codes sources: www.asmfr.com qui dispose d'exemples et autres.
les segments ne sont pas inutiles en 32bits mais ils sont transformés en descripteurs ( un index dans les tables GDT, LDT qui définissent des espaces mémoires ) qui sont gérés par le systeme et donc transparents pour l'utilisateur lambda.
pour coder en 32 bits avec nasm, il faut quand meme preciser la directive
[BITS 32]
il y a de plus en plus d'exemples et de documentations sur la programmation en mode protégé sur le net, il serait vraiment dommage de se limiter a de la prog en mode réel ou DOS qui est obsolète depuis plus de 10 ans.
@++
Effectivement, avant, avec un registre le model flat ne pouvait adresser que 64Ko (prog .com), avec le 32 bits, la taille est étendue a 4Go d'espace d'adressage.
Sous Windows, les applications ne peuvent utiliser que les 2 premiers Go, les 2 autres etant réservés aux dlls et au systeme.
Tape "Iczelion" ou "masm32" dans google et tu auras tous les outils et documentations nécessaires a l'apprentissage du 32bits avec une traduction en français pour le site de Iczelion.
n'hesite surtout pas a te taper la documentation intel qui est très complète, tu as aussi le réseau codes sources: www.asmfr.com qui dispose d'exemples et autres.
les segments ne sont pas inutiles en 32bits mais ils sont transformés en descripteurs ( un index dans les tables GDT, LDT qui définissent des espaces mémoires ) qui sont gérés par le systeme et donc transparents pour l'utilisateur lambda.
pour coder en 32 bits avec nasm, il faut quand meme preciser la directive
[BITS 32]
il y a de plus en plus d'exemples et de documentations sur la programmation en mode protégé sur le net, il serait vraiment dommage de se limiter a de la prog en mode réel ou DOS qui est obsolète depuis plus de 10 ans.
@++