CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

nasm - implementation matrice

rangerprice
rangerprice
Niveau 10
26 mai 2016 à 01:29:15

Les matrices en assembleur sont implémantés comment ?

Est-ce-qu'on stocke juste l'addresse d'un tableau dans un autre tableau ? Pour y accéder ?

Précisément, je veux savoir comment un compilateur C traduirait cette ligne en nasm:
int a [2][2];

Message édité le 26 mai 2016 à 01:31:57 par rangerprice
drakenlorde
drakenlorde
Niveau 9
26 mai 2016 à 13:47:18

La méthode la moins efficace est, comme tu dit, faire un tableau de tableau.

L'autre est de déclarer un seul tableau de taille hauteur*largeur de la dimension de la matrice.

Pour accéder à un élément de la matrice, tu va accède au tableau avec index i*rangée+j*colonne.

drakenlorde
drakenlorde
Niveau 9
26 mai 2016 à 13:58:20

En nasm, le compilateur va simplement créer cette espace sur le stack. Par example, un int a[2][2] a 4 élément, donc 4*4 bytes = 32.

push rbp
mov rbp,rsp
sub rsp,32 ; <--- 32 bytes en mémoire pour le tableau
Pseudo supprimé
Pseudo supprimé 26 mai 2016 à 13:58:30

il n'y a pas de types en assembleur, ou alors ils sont très implicites.

int a [2][2];

Si c'est sur la pile, Tu soustrais la taille du tableau au pointeur de celle ci (en bytes).

sub  RSP,  16     ; 2 * 2 * 4 bytes

RSP est maintenant l’adresse du tableau.


mov [RSP     ], 1     ; a[0][0] = 1
mov [RSP +  4], 2     ; a[0][1] = 2
mov [RSP +  8], 3     ; a[1][0] = 3
mov [RSP + 12], 4     ; a[1][1] = 4

Précisément, je veux savoir comment un compilateur C traduirait cette ligne en nasm

https://assembly.ynh.io/
https://gcc.godbolt.org/

drakenlorde
drakenlorde
Niveau 9
26 mai 2016 à 15:11:48

Whoops. J'ai calculé la grosseur du tableau en 64bit par habitude, mais si tu travaille avec des éléments de taille 32bits, ton tableau va faire seulement 16 bytes comme le montre CodeArtisan.

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment