[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
Bonjour à tous, j'ai apprie l'asm 16 bits avec des tutos mais on ma dit que l'assembleur 32 bits existait et que c'était plus simple malheureusement je n'ai pas trouver de tuto sur l'assembleur 32 bits donc je vous demenderai par quoi remplace t'on :
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


( avec TASM )

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.

Voila j'éspére avoir était clair et j'attend vos réponses impatiament
A voir également:

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
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...
0
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
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".
0
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
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
0
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
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 ?
0

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
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.
0
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
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 :
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 )
0
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
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:
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 ;-)
0
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
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 ?

0
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
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.
0
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
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 ?
0
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
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.
0
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
Ok merci pour toutes ces infos
0
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.

@++
0