MayouMX
Messages postés16Date d'inscriptionlundi 13 janvier 2003StatutMembreDernière intervention28 octobre 2009
-
25 mai 2004 à 15:45
PCBill
Messages postés48Date d'inscriptionlundi 25 décembre 2006StatutMembreDernière intervention29 septembre 2009
-
1 juin 2008 à 20:31
Bonjour a tous,
je dois programmer un pong en assembleur et la je butte pour l'affichage des scores.
J'ai créer un segment qui ressemble a ca :
exemple a le tableau du 8
c'est le meme principe pour les autes nombres.
les nombres correspondent a la couleur a afficher
var segment
cpt dw 0
tab8 db 0,57,57,57,57,0
db 57,0,0,0,0,57
db 57,0,0,0,0,57
db 57,0,0,0,0,57
db 0,57,57,57,57,0
db 57,0,0,0,0,57
db 57,0,0,0,0,57
db 57,0,0,0,0,57
db 0,57,57,57,57,0
var ends
Ensuite je voudrais a partir de ces tableaux afficher mes nombres, g donc créer cette procédures :
Affiche8 PROC
PUSH AX
PUSH BX
PUSH CX
PUSH ES
MOV AX,0A000h ;Adresse du tab d'octet
MOV ES,AX
MOV cpt,0 ;variable pour avancer ds le tableau
MOV BX,465 ; indice du premier point a afficher
MOV CX,6
l1:
PUSH BX ; on sauvegarde BX qui contient l'indice d'affichage
MOV BX,cpt ; on met le cpt dans BX
MOV AL,tab8[BX] ; on recupere la valeur du tableau
ADD BX,1 ; on incremente le compteur
MOV cpt,BX ; incrémente le compteur
POP BX ; on recupere l'indice de l'affichage
MOV ES:[BX],AL ; nouvelle couleur pour l'affichage
ADD BX,1 ; incrémente la position d'affichage
LOOP l1
MOV BX,785 ;indice de la seconde ligne a afficher
MOV CX,6
l2:
on refait la meme chose
LOOP l2
POP ES
POP CX
POP BX
POP AX
RET
Affiche8 ENDP
Voila, cette procédure ne m'affiche qu'un seul point a la place d'une barre correspondant au dessus du 8.
Je n'arrive a trouver l'erreur...est ce que c l'acces au tableau qui n'est pas bon ?
Si qqun pouvais me donner un coup de main, ce serai vraiment du bonheur !!
PCBill
Messages postés48Date d'inscriptionlundi 25 décembre 2006StatutMembreDernière intervention29 septembre 2009 1 juin 2008 à 20:31
Bonsoir,
Peut être que cette procédure d'affichage t'aidera :
displaywholenumber PROC
;-----------------------------------------------------------
;display the non signed decimal number that is stocked in AX
;-----------------------------------------------------------
push AX
push dx
push cx
mov bx,10 ;BX est le dénominateur
mov cx,0 ;CX is our counter
decompose:
mov dx,0 div bx ;AX/BX what remains DX and quotient = AX
push dx ;stock what remains in the stack
inc cx
cmp ax,0 ;quotient = 0 ?
jnz decompose ;if not continue decomposition
displ:
pop ax ;load a number from the stack
call displayn ;in order to display it
loop displ ;repeat displayin until CX = 0
pop cx
pop bx
pop ax
ret
displaywholenumber ENDP