Accueil > Forum > > > > asm dos sous xp probleme adressage memoire ecran
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
[ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique) [ par dogloop ]
J'ouvre ce topic pour essayer de mieux comprendre quelles sont les différentes façons pour accéder à toute la RAM (et aussi peut être la ROM) de mon P
problem en asm [ par tahsgh ]
salam, j'ai le code suivant: ; bubble sort and swap subroutines saving and restoring registers ;[org 0x0100] jmp start data: dw
ERREUR DE SEGMENTATION en asm [ par tahsgh ]
salam; jai le code suivant ----------------------------------------- global main SECTION . text main :
Addition ASM [ par GibsonUSA ]
Bonjour a tous, je débute en ASM 16bits et je bloque pour faire une addition de deux chiffres saisis par l'utilisateur. Voila ce que j'ai fais. A l'
Executer 2 action en meme temps [ par HirOinEvOl ]
Bonjour, je souhaite exécuter les deux codes suivant mais simultanément pour qu'ils puissent tournés en parrallèles. Je n'ai trouvé aucun moyen de l
correction d'un code assembleur [ par marooh ]
Bonjour, j'ai ce code assembleur qui permet la creation d'un tableau de 10 cases et les remplir avec le chiffre 5.en l'utlisant avec tasm,il s'avère
un énorme travail de votre part [ par mana ]
bonjour, voici un programme écrit en c++ (il permet de passer d'une image en couleur 24bits(ARGB) a une image en 256 niveaux de gris(toujours sur 24bi
Livres en rapport
|
Derniers Blogs
CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks [HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL[HYPER-V 3] PRéSENTATION DES COMMANDLETS POWERSHELL par Pierrick CATRO-BROUILLET
Avec la sortie prochaine de la Beta Consumer Preview de Windows 8, j'avais envie de revenir sur une des fonctionnalités que j'attends le plus et que, en bon geek que je suis, j'utilise déjà : Hyper-V 3 ainsi son module PowerShell.
Il y a déjà pléthor...
Cliquez pour lire la suite de l'article par Pierrick CATRO-BROUILLET IIS7 - COMPRESSION GZIPIIS7 - COMPRESSION GZIP par cyril
La compression GZIP permet d'améliorer les performances de navigation en compressant ce qu'envoie le serveur à un client. Pour comprendre comment cela fonctionne, regardons ce qu'il se passe au niveau HTTP lorsqu'un client tente d'accéder à une ress...
Cliquez pour lire la suite de l'article par cyril
Logiciels
Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning Academy System (17.1.3.0)ACADEMY SYSTEM (17.1.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|