begin process at 2012 05 25 04:30:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Assembleur

 > 

Archives

 > 

Autres asm

 > 

Graphique


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Graphique

lundi 31 octobre 2005 à 20:08:17 | Graphique

RM50Man

Bonjour a tous!!!!
Je veux tracer une ligne mais ca ne marche pas, je passe les parametre par la pile,
et ensuite ds la fonction principale, je remplis le segment es avec le buffer declarer ds data segment!!!
Si quelqu'un voit l'erreur, merci de me prevenir!!

.386
org 100h

dataj segment public
  buffer db 64000 dup(0)
 
dataj ends


debut:

;initialisation du mode graphique 320*200 Graphic 256 couleurs (VGA) 
mov ax, 13h
int 10h

mov ax, 0a000h     ;Début du segment de mémoire vidéo
mov es, ax

xor di, di

push 10
push 10
push 150

call droite2

mov cx, 64000
mov si, 1
mov di, 1
_remplir:
mov al, buffer[si]
mov es:byte ptr[di], al
inc di
inc si
loop _remplir


mov ah, 00h
int 16h

mov ax, 03h
int 10h


ret

;-------Procedure---------------------

droite2 proc

xor ax, ax
xor bx, bx
xor dx, dx
xor cx, cx

mov bp, sp
mov ax, ss:[bp + 6]
mov dx, ss:[bp + 6]
mov cx, ss:[bp + 6]

push dx
;320 * Y + X
mov dx, ax
shl ax, 8
shl dx, 6
add ax, dx
pop dx
add ax, dx
xor si, si

mov bx, ax
mov si, 0
@remplir:
mov buffer[bx + si], 02h
inc si
loop @remplir;

ret 6

droite2 endp


 

;-------------Fin procedure---------------


;----------Variable------------------

vert equ 0c0ch


end debut




RM50man

lundi 31 octobre 2005 à 20:11:46 | Re : Graphique

RM50Man

C'etait une erreur d' etourderie

mov ax, ss:[bp + 6]
mov dx, ss:[bp + 6]
mov cx, ss:[bp + 6]

au lieu de

mov ax, ss:[bp + 6]
mov dx, ss:[bp + 4]
mov cx, ss:[bp + 2]

Mais si quelqu'un voit comment optimiser ce code, qui me le dise.

RM50man
mercredi 2 novembre 2005 à 09:30:10 | Re : Graphique

Nasman

Bonjour,

Pour optimiser ton code tu peux supprimer les
xor ax, ax
xor bx, bx
xor dx, dx
xor cx, cx
au début de droite2 proc

Tu peux aussi éviter de charger le registre dx avec ss:[bp+4] si tu dois le mettre sur la pile ensuite. Charge le au moment opportun. Tu peux donc faire:

droite2 proc

mov bp, sp
mov cx, ss:[bp + 2]

;320 * Y + X
mov ax, ss:[bp + 6]
shl ax, 4                          ;4.Y
add ax, ss:[bp + 6]          ;4.Y+Y=5.Y
shl ax, 6                           ;64.(5.Y)=320.Y
add ax, ss:[bp + 4]          ;320.Y+X

Pourquoi charges tu ton buffer de cx octets valant 02h pour recopier ce dernier dans la mémoire écran ? Tu peux écrire directement dans cette mémoire

mov di, ax
mov al,02h
rep stosb         ;met cx octets de valeur al dans es:[di] (avec incrémentation de di                         ;et boucle tant que cx est non nul)

ret 6

droite2 endp

Bonne prog

mercredi 2 novembre 2005 à 11:07:02 | Re : Graphique

RM50Man

dataj segment public
  buffer db 64000 dup(0)
 
dataj ends

buff segment public
  buffer2 db 64000 dup(0)
  
buff ends

Est ce que tu sais pourkoi quand je rajoute un segment comme ceci , le compilateur A86 me di Object Overflowsur le buffer 2, ou quand jen rajoute un autre de 64000 ds
dataj ca me fait pareil?

RM50man
mercredi 2 novembre 2005 à 11:24:06 | Re : Graphique

Nasman

Je ne suis pas sur de ma réponse car je ne connais pas A86. Peut être que puisque ton programme est un .com (org100h) la taille des données doit être limitée à la taille accessible dans un même segment soit 64 K. Ton compilateur rassemble peut-être toutes tes données dans le même segment et tu dépasses l'espace adressable.

Sais tu quelle est la taille limite à partir de laquelle il te dit des méchancetés ?

mercredi 2 novembre 2005 à 11:35:39 | Re : Graphique

RM50Man

par ex , si je lui donne la structure d'un exe et que ds le segment data
je rajoute 5 buffer de 64000 i dit rien, mais si je crée un nouveau segment  comme l ex dessus et qu eje rajoute plusieurs buffer i me met object overflow


RM50man
mercredi 2 novembre 2005 à 12:04:49 | Re : Graphique

Nasman

Comment ton compilateur sait-il si le segment que tu créé est un segment de données, de programme ou autre ? Je ne suis pas sur que le fait de mettre des db ou de mettre des déclarations comme
buffer2 db 64000 dup(0)
suffise pour que le compilateur considère que c'est des données. Peut-être comprend il add ax,00 (il me semble que 00 est l'opcode de add).

Regarde la syntaxe de déclarations des sections de A86 ; il y a sans doute une syntaxe plus précise indiquant le type de section (code, data, bss,...) le partage (private, public), l'alignement etc.
Si tu omets ce paramètre, ton compilateur doit prendre les options par défauts et celà ne te convient peut-être pas.

Je ne peux pas t'apporter beaucoup plus d'aide car je programme essentiellement en win32 et les problèmes de segments on s'en fiche.
mercredi 2 novembre 2005 à 22:33:36 | Re : Graphique

RM50Man

En fait, j'ai aucune documentation sur le compilateur A86 et sa synthaxe.

Toi tu dois programmer en masm32, et tu sais comment on fait pour
initialiser l'ecran en mode plein ecran en 800*600.
Quel api on doit appeler?

RM50man
mercredi 2 novembre 2005 à 23:59:36 | Re : Graphique

patatalo

Membre Club Administrateur CodeS-SourceS
salut, un programme tiny (.com) ne peut depasser la taille max d'un registre 16 bits soit 64Ko. un programme exe utilise plusieurs segments et peut donc etre plus grand. Pourquoi ne pas envisager une allocation dynamique plutot que de bourrer un programme de meme pas 1 ko de code avec 64ko de 0 ? avec masm32, on utilise les apis windows ou directX. pour utiliser l'api du bios et vesa, je te conseille le dpmi. @++
jeudi 3 novembre 2005 à 00:04:07 | Re : Graphique

patatalo

Membre Club Administrateur CodeS-SourceS
autre chose, un tableau a pour index [0..n-1]

1 2

Cette discussion est classée dans : buffer, mov, ax, segment, dx


Répondre à ce message

Sujets en rapport avec ce message

Simple addition [ par nostra ] Big totoJe n'arrive pas à afficher les valeurs A (=3) et B(=2) ainsi que le résultat de l'addition. Merci de trouver le ou les erreurs commises.;----- Addition pourtant simple [ par nostra ] Big totoJe n'arrive pas à afficher le résultat de l'addition malgré les remarques de Nemesis. Merci de trouver le ou les erreurs commises. ;---------- loader problème de code [ par TRAX44 ] salut tout le monde !!g essayer de faire un loader (petit prog qui charge un autre prog) mais c un desartre je comprend pas très bien ce qui ne marche Ennoncés à corriger svp :-) [ par did2604 ] Bonjour à tous,Mon professeur m'a demandé de convertir les énoncés (en langage C) suivants en assembleur, quelqu'un aurait-il la gentilesse de me les petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa Multiplication de deux nombres compris entre 0 et 99 en assembleur [ par petitspirou ] salut, j'ai un programme a faire mais je suis nul en assembleur, voici ce que j'ai fais mais ca ne fonctionne pas.Quelqun peut'il me le corriger et me pb int 21h ah=0ah [ par mat74 ] salut a ts ,voila j'ai fais un programme qui est censé lire une chaine entré par l'utilisateur et ensuite la reafficher . Il me demande bien d'entré u Modifer le vecteur d'interruptions [ par vecchio56 ] Bonjour J'essaie de refaire la source http://www.cppfrance.com/code.aspx?ID=33558 en assembleur (ca consiste à modifier la routine de l'interruption 0 problème : nombres aléatoires random [ par dmontavon ] Je cherche à générer un nombre aléatoire avec le code :Random:   mov dx,128             &


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,446 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales