begin process at 2010 03 20 03:34:19
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

asm dos sous xp probleme adressage memoire ecran


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

asm dos sous xp probleme adressage memoire ecran

vendredi 5 décembre 2008 à 11:13:14 | asm dos sous xp probleme adressage memoire ecran

blood01

Bonjour,

Voilà, j'ai toujours aimé programmer à mes heures perdues et depuis tout un temps, j'ai décidé de me lancer dans l'assembleur, j'ai d'abord fait quelques trucs avec l'emulateur c64 histoire de me familiariser en douceur avec l'asm et maintenant je m'attaque à l'asm sous dos. Le but : arriver à programmer quelques petites demo (scrolling, effet colorés) qui tournent dans une fenetre dos....

Mais bien evidemment, l'asm du c64 et celui d'un x86 est bien différent, plus riche et plus complexe....

ma première idée est d'afficher un caractere sur l'écran en utilisant la memoire video (et non l'int21h). J'ai lu que la memoire video du dos se trouve a b800:0000, un bye pour le code ascii du caractere et le byte suivant pour la couleur. donc la source peut se résumer à ça :

mov ax, b800h
mov es, ax
mov ax, 0000h
mov di,ax
mov al, '*'
mov es:[di],al

mov ax, 0001h
mov di,ax
mov al, 07
mov es:[di],al

ce qui devrait afficher une étoile et haut a gauche de l'ecran mais évidemment ça ne marche pas. rien ne se passe.

à savoir que je suis dans une fenetre dos sous xp et que j'utilise tasm et tlink.

je pense que ce code fonctionne mais j'ai l'impression que les adresses des memoires ecran des fenetre dos sous windows varient (surtout lorsqu'il y en a plusieurs) et donc je ne place pas les byte à la bonne place.

Enfin voilà, j'espère avoir été clair, merci d'avance ;)

bld01

vendredi 5 décembre 2008 à 19:53:19 | Re : asm dos sous xp probleme adressage memoire ecran

Forthman

Tu devrais initialiser le mode texte car même si c'est dans une fenêtre XP,
par défaut la console n'a pas de mode à proprement parler.

donc un petit :

[code]
mov ax,03h
int 10h
[/code]

juste avant ton prog devrait fonctionner.

Ensuite, pour info, tu peux directement placer une valeur immediate dans le registre DI (pas besoin de passer par AX)

a+ François

samedi 6 décembre 2008 à 12:15:05 | Re : asm dos sous xp probleme adressage memoire ecran

blood01

yop,

merci pour la reponse, [IMG]http://smileys.sur-la-toile.com/repository/Respect/enaccord8.gif[/IMG]

j'ai donc essayé ta solution, mais il arrive deux choses:
- si j'ouvre une fenetre dos et que je lance test01.exe (le petit prog), l'ecran s'efface et je reviens au prompt du dos mais pas tout a fait en haut de la fenetre, mais presque au millieu, la petite etoile n'est pas là.
- si j'ouvre une fenetre dos et que je lance la compilation, puis le linkage et enfin test01.exe ben là.... ça marche. j'ai bien une étoile verte en haut a gauche de l'écran, le curseur est dessus et clignote mais je ne reviens pas au prompt du dos.

Il serait cool que le programme fonctionne directement sans passser par une compilation a chaque fois... mais je vois pas comment faire car je ne comprends pas pourquoi ça réagit comme ça.

un tuc que je pige pas non plus est le fait que je met bien un "ret" à la fin de mon code mais que je ne reviennes pas au dos.

enfin voici le code complet, je rapelle que je debute an asm sous dos, donc veuillez me pardonner l'une ou l'autre bourde

[code].386

code segment use16

assume cs:code

debut:

mov ah,00
mov ax, 03h
int 10h

mov ax, 0b800h
mov es, ax
mov ax, 0000h
mov di,ax
mov al, '*'
mov es:[di],al

mov ax, 0001h
mov di,ax
mov al, 02
mov es:[di],al

ret

code ends

end debut[/code]

dimanche 7 décembre 2008 à 03:47:28 | Re : asm dos sous xp probleme adressage memoire ecran

42wawa42

Hello

Ret pour Call

donc Call  XY
XY:   mov ax,XX
         ....
         Ret

 

Pour sorti du programme,

 

 

EXITPROG:    MOV   AX,4C00H

                        INT     21H

 

A la place de RET


42wawa42

dimanche 7 décembre 2008 à 09:21:46 | Re : asm dos sous xp probleme adressage memoire ecran

Forthman

Exact,

Et pour ne pas sortir aussi vite de ton prog  que tu ne l'as lancé, tu peux
aussi ajouter une attente de touche clavier avec :

mov ah,08h
int 21h

à placer juste avant le EXITPROG:

a+ François

dimanche 7 décembre 2008 à 12:09:57 | Re : asm dos sous xp probleme adressage memoire ecran

blood01

yop la compagnie,

bien merci pour les reponses 

alors pour la petite histoire, j'ai amélioré mon code hier, en fait je n'ai plus eu de bug en faisant tourner mon prog sous dosbox à la place d'utiliser une fenetre dos classique, dons j'ai tripotté mon code afin de faire un effet boeuf! Imaginez donc une magnifique ligne composée uniquement d'étoile et dans toute les couleurs (16 ^^). Oui bon je sais c'est nul... mais le plus ETRANGE c'est que apres mes essais sous dosbox et une fois le code fini et commenté, le prog marche qussi dans une fenetre dos normale!, Ce qui m'embete c'est que je ne sais pas pourquoi ça marche en dos normal et qu'avant ça marchait que sous dosbox.... Soit, voici le code :

.386

code segment use16

assume cs:code

debut:
;******************* initialisaton du mode video text 16 col
mov ah,00
mov ax, 03h
int 10h

;******************* on place le compteur à 159
;                    en effet le caractere prends deux bytes
;                    un pour le code ascii et un pour la couleur
;                    une ligne faisant 80 caractère :  80 * 2 = 160

mov cx, 159

;******************* on initalise es avec B800, b800:0000 est
;                    l'endroit où la mémoire ecran commence

mov ax, 0b800h
mov es, ax

;******************* on initialise bl avec 15 (16couleurs)

initbl:
mov bl, 15

 

start:

;******************* on initialise di avec cx, on debute donc à l'adresse b800:009fh
;                    qui est le byte de couleur du dernier caractere

mov ax, cx
mov di,ax

;******************* couleur stockée dans bl que l'on place en es:di
 
mov al, bl
mov es:[di],al

;****************** on décrémente cx

dec cx

;****************** on teste cx, si = 0 on termine

cmp cx,0
je fin

;****************** on mets cx dans di, on est à la position du caratere

mov ax, cx
mov di,ax

;****************** on mets une etoile à la posistion du caractere

mov al, '*'
mov es:[di],al

;****************** si la couleur = 0 alors on la réinitialise à 15

dec bl
dec cx
cmp bl,0
je initbl

;****************** on teste cx, si = 0 on termine
cmp cx,0
 
je fin

;****************** si <> 0 alors on passe au caractère suivant

jmp start


fin:

mov ah,4Ch
int 21h

ret

 

code ends

end debut

Voilà, ça fonctionne.c'est surement pas optimisé mais ça marche.... j'ai commenté en fonction de ce que j'avais appris dans les tutoriaux...

Maintenant, j'aimerais afficher un chaine de caractere de la même façon, une chaine definie dans un data segment et puis, j'aimerais la faire scroller. Seulement là, j'ai un peu de mal a capter comment faire je sais que je dois definir une chaine comme ça :

data segment use16
message db "salut tout le monde","$"
data ends

seulement voilà, il faut que j'arrive à extraire les caractère de cette chaine un par un pour les placer au bon endroit de la mémoire ecran (1 byte sur deux). et ensuite jouer sur cette memoire ecran de manière a faire scoller le message.

et je m'y perds un peu : qu'est-ce qui représent l'addresse du début de la chaine? "data" ou "message"? Imaginons que c'est "data", je veux faire un truc pour recup le troisieme caractère par exemple : mov al, data +3 est possible ?

enfin voilà, je vais essayer d'intégrer la sortie par appui de touche que vous me suggerez. Et encore un grand merci pour les reponses.

blood01




dimanche 7 décembre 2008 à 19:38:30 | Re : asm dos sous xp probleme adressage memoire ecran

42wawa42

mov ah,4Ch
int 21h       >
fin de prog et retour a Windows ou DOS.

ret  ne pas mettre cela, un byte de moins, le programme ne passe pas par là, le retour au DOS ou Windows est int 21H.

code ends

dimanche 11 octobre 2009 à 23:05:28 | Re : asm dos sous xp probleme adressage memoire ecran

dridihatem0101

salut tous,
svp comment executer le programme assembleur sous xp
et quel est l'éditeur ou compilateur


Cette discussion est classée dans : mov, asm, ax, dos, memoire


Répondre à ce message

Sujets en rapport avec ce message

question sur le language asm [ par dyroj ] bonjour,j'ai qulque question sur l'asm :-quand je fait un : mov ax, 10 , quesqui va dans le registre (ladresse de 10 dans la ram, ou 10).-pourquoi se fatal error LNK1190 [ par WildChild54 ] Bonjour à tous!Eh bien voilà, je voudrais créer un petit programme affichant l'heure (je sais il y en a déjà plusieurs qui en ont parlé ici) mais j'ai Affichage décroissant et alphabétique de 2 listes(Nom_Prénom et Note) [ par m_didi9 ] [code=autre]Data SEGMENT Mess1 DB 10,13, 'Entrez la liste des Noms :' DB 10, 13, '$' Mess2 DB 'Entrez la liste des Notes :' DB 10, 13, '$' Mess3 Problème d'adresse effective [ par Ihlianov ] Hi,J'ai un problème avec NASM, qui me rend cinglé.Je code un .Com (16 bits) et il me revoit une erreur sur l'instruction suivante : mov ax, [d erreur compilation [ par greg4 ] je voudrai compiler--------------------------------------.model tiny.dataHelloMessage db 13,10,'Hello World !',13,10,'$'.codeorg 100hstart: mov ax,@d 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 probleme pour un petit programme [ par djorb8 ] Bonjour a tous, je debute en assembleur et pour mes cours je doit realiser un petit programme pour calculler un volume dont voici la formule : pi*h*[( 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 lecture / ouverture d'un fichier txt en assembleur [ par rana ] est ce quelaqu un pourrait m aider a corriger ma macro de lecture d'un fichier txt et l'ouverture d'un fichier txt, voila les macro (pb au niveau du


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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 : 0,702 sec (3)

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