Rechercher : dans
Par :

[asm] apprendre le 32 bits

Dernière réponse le 6 mai 2008 à 16:21:14 HacK SpideR, le 5 jui 2007 à 18:17:04 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Firefox 2.0.0.4

Meilleures réponses pour « [asm] apprendre le 32 bits » dans :
Télécharger Pilote nVidia GeForce pour Windows Vista 32 bits Voir Pilote GeForce Vista 32 bits certifié WHQL pour les GPU des séries GeForce 6, 7, 8 et 9 : GeForce 9800 GX2 GeForce 9800 GTX GeForce 9600 GT GeForce 9600 GSO GeForce 8800 Ultra GeForce 8800 GTX GeForce 8800 GTS 512 GeForce 8800 GTS ...
Compiler/tester en 32 bits sur Ubuntu x86-64 Voir Imaginons que vous ayez un code source que vous voulez compiler pour le tester ou l'utiliser en tant que binaire 32 bits. Le problème c'est que les headers de la librairie standard ne sont pas adaptés à celà et vous aurez aussi besoin d'une version...
Pourquoi Windows ne voit pas les 4 Go de RAM installés ? VoirWindows XP ou Vista en édition 32 bits ne peuvent pas utiliser 4 Go, il n'y a rien à faire, c'est une limitation mathématique. En 32 bits, le système ne peut adresser que : 2 puissance 32 = 4,3 Milliards d'adresses différentes , correspondant...
Conversion d'un nombre entier 32 bits en IP VoirConversion d'un nombre entier 32 bits en IP Nombre à convertir : 3265917058 Représentation binaire 11000010 10101001 11110000 10000010 - 3265917058 00000000 00000000 00000000 11000010 - 3265917058 >> 24 ( 194 ) 11000010 10101001 11110000...

1

ekra, le 5 jui 2007 à 18:32:23

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... Ceci est une signature.

Répondre à ekra

2

HacK SpideR, le 5 jui 2007 à 20:10:26

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". @+

Répondre à HacK SpideR

3

kilian, le 6 jui 2007 à 10:09:45

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

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

4

HacK SpideR, le 6 jui 2007 à 10:40:54

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 ? @+

Répondre à HacK SpideR

5

kilian, le 6 jui 2007 à 10:52:07

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.

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

6

HacK SpideR, le 6 jui 2007 à 11:41:53

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 ) @+

Répondre à HacK SpideR

7

kilian, le 6 jui 2007 à 11:55:58

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 ;-)
..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

8

HacK SpideR, le 6 jui 2007 à 12:01:29

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 ?

@+

Répondre à HacK SpideR

9

kilian, le 6 jui 2007 à 12:09:18

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.

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

10

HacK SpideR, le 6 jui 2007 à 12:11:50

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 ? @+

Répondre à HacK SpideR

11

kilian, le 6 jui 2007 à 14:38:50

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.

..et le...le...enfin, non parce c'est...ya...quand...bah tu sais là le...

Répondre à kilian

12

HacK SpideR, le 8 jui 2007 à 19:36:24

Ok merci pour toutes ces infos @+

Répondre à HacK SpideR

13

 patatalo, le 23 jui 2007 à 04:21:19

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.

@++

Répondre à patatalo