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

[Asm] Problème d'adressage

roger_barry
roger_barry
Niveau 10
13 mars 2005 à 00:44:49

Bonjour, j´ai un problème d´adresse de la mémoire avec les bases et les indexs. Je vais vous montrer un de mes programme:

;=================================================
=====================
; Affiche.asm

;=================================================
=====================
. 386
; ***Segment de code***
code segment use16
assume cs:code, ds:data, ss:pile

; ***Programme principal***
programme:

xor ah, ah
mov al, 13h
int 10h

mov ax, 0a000h
mov es, ax

mov di, offset table
mov bx, word ptr [di]
mov al, 02h
mov [es:bx], al

xor ah, ah
int 16h

mov ah, 4ch
int 21h

code ends

; ***Segment de données***
data segment use16

table dw 160

data ends

; ***Segment de pile***
pile segment stack use16
la_pile db 256 DUP ( ?)
pile ends

end programme

Normalement ce programme affiche un pixel en vert au milieu de la première rangée mais le pixel n´apparait pas du tout a la bonne place! Quelqun peut me dire ce qui ne vas pas dans mon programme?

nulissimo
nulissimo
Niveau 4
13 mars 2005 à 00:46:05

C´est quel langage ?

roger_barry
roger_barry
Niveau 10
13 mars 2005 à 00:47:57

Regarde dans le titre! C´est de l´asm ( assembleur)!

dnob700
dnob700
Niveau 10
13 mars 2005 à 10:26:42

est ce que tu pourrait détailler ?

je suppose que c´est le int 16h qui affiche le pixel.

je vois bien ce que tu fait, mais comment sais tu où tu voudrait l´afficher ? c´est le 0a000h comment sont les coordonnées ?

et surtout où est ce que le pixel s´affiche vraiment ?

kljdrf
kljdrf
Niveau 6
13 mars 2005 à 12:16:02

L´interruption 16h sert pour la gestion du clavier. Ceci-dit c´est vrai que le programme est pas très clair. Si je regarde dans ma doc, je vois que le service 0Ch de l´interruption 10h sert à écrire un pixel. Voici le programme tel que je le conçoit :

; modifie le mode vidéo courant pour passer en 640*480
mov ah,00h
mov al,11h
int 10h

; affiche le pixel au point 10h,10h
mov ah,0Ch
mov al,02h ;couleur du pixel
mov cx,10h ;ligne du pixel
mov dx,10h ;colonne du pixel
int 10h

; attend l´appui d´une touche
mov ah,00h
int 16h

; quitte le prohramme
mov ah,00h
int 21h

Par contre je ne suis pas très bon en ASM. J´ai testé le programme et il affiche bien un pixel au bon endroit ( ici le point 10h,10h, mais tu peux le changer comme tu veux). Par contre ce point est blanc. J´arrive pas à le mettre en vert.
J´ai fais le test avec NASM.

LGV
LGV
Niveau 28
13 mars 2005 à 13:05:45

appeler une interruption pour afficher UN pixel est TRES couteux ; il est en mode 13h ( aka X), ou tu peux adresser directement la mémoire vidéo en 0xA000. Sachant qu´il écrit à l´ofs 160 c´est bien théoriquement le milieu de la première ligne.
Son interruption clavier ne sert qu´à attendre une touche de l´utilisateur.
En regardant en diagonale, ça me parait bon, mais il doit forcement y avoir une erreur qq part.
Essaie de simplifier ton adressage base + indexé et de n´utiliser qu´une immediate plutot que passer par un segment de data separé. Ca permettra p-e d´identifier le soucis.

roger_barry
roger_barry
Niveau 10
13 mars 2005 à 16:07:03

Désolé c´est vrai que j´aurais su mettre un peu de commentaires, mais c´est lgv qui a raison, l´int 16h c´est pour le clavier et je suis en mode 13h de l´interuption 10h.

avec ceci:

mov di, offset table
mov bx, word ptr [di]
mov al, 02h
mov [es:bx], al

Je suis supposé de mettre l´adresse de table dans di, après je met la valeur qui est a l´adresse indiquer par di dans bx. Je met 2 dans al pour la couleur du pixel ( vert) et la dernière instruction affiche le pixel au coordonné es:bx.

Théoriquement, puisque la valeur de table est 160 le pixel devrait se retrouver sur la première rangé mais il se retrouve environ sur la 30e rangée!

J´ai fait ce programme pour me pratiquer, j´ai regarder dans mes livres et tuto sur l´asm et pourtant il font la même chose que moi et ils obtiennes la bonne valeur!

SVP aider moi.

LGV
LGV
Niveau 28
13 mars 2005 à 18:21:55

essaye un truc plus immediat, p-e, pour voir si ça marche ; genre :

mov AX, 0A000h
push AX
pop ES
xor DI, DI
mov AL, c
stosb

sans passer par un DS à part. Si ce truc ne met pas un pixel coloré en haut à gauche, il y a des questions à se poser :-?
si ça passe, change le stos en un adressage similaire au tiens, basé + indexé en ES:[DI], puis dans un troisieme temps essaye de remettre ton seg. de data au milieu de tout ça. Fais le chargement d´adresse via un LEA, on sait jamais, aussi. Si tu fais un . com, verifie au debuggeur CS et DS.

roger_barry
roger_barry
Niveau 10
13 mars 2005 à 19:35:32

J´ai trouvé pourquoi sa ne marchait pas! Il fallait syncronisé ds et le segment de donnée! Il fallais mettre sa au début du programme:

mov ax, data
mov ds, ax

Voila maintenant le pixel apparais a bonne bonne place!

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