ASSEMBLEUR

tiger360
ASSEMBLEUR

salut
quelqu'un pourrai t-il m'aider pour résoudre cet exercice :

5 Ecrire directement en l’adresse B8000h
Ex8 : Ecrivez un code assembleur qui permet d’afficher un message donné à l’écran. On écrira directement en
l’adresse B8000h (ne pas utiliser les services d’interruption). Ecrivez un autre code qui utilisera les services
d’interruption.

et egalement pour m'expliquer instruction par instruction ce que fait ce code :

mov AX ,0B800h
mov ES ,AX ; utilisation de l’extra segment
mov DH ,11111111b
mov DL ,'30'
mov ES :[80*2*12+2*40] , DX

j ai aussi trouve un autre code qui fait pareil
est ce que la seule difference est que de code utilise des interruptions ?
et je comprend pas trop pourquoi et comment utiliser les interruptions

;  mov ax,@data
      ;  mov ds,ax
      ;
      ;  mov ah,09h
      ;  mov bh,0
      ;  mov cx,1
      ;  mov al,'Z'
      ;  mov bl,11111001b
      ;  int 10h
fredericmazue

Quote:
5 Ecrire directement en l’adresse B8000h

Et allez donc :!:
Y en a qui doutent de rien. Sous quel système d'exploitation :?: Parce que normalement de nos jours, les OS ne te laisseront pas faire. Cette adresse ça me rappelle quelque chose en effet. A l'époque révolue où je codais sous MS-DOS. Il est vrai que les Windows 9X laissent accéder à cette adresse (alors qu'il ne devraitent pas), mais ça ne sert à rien de toutes façons. C'est sous DOS que tu travailles là ?
Quote:
et egalement pour m'expliquer instruction par instruction ce que fait ce code :
j ai aussi trouve un autre code qui fait pareil

Ventre saint gris, rien que ça :lol:
Bon d'abord les deux bouts de code ne font pas pareil. Disons qu'ils sont semblables.
Qui peux savoir ce que fait le premier bout de code totalement obfusqué :?::twisted:
Disons qu'il charge avec les deux premières instructions la fameuse adresse dans ES. Ensuite avec les deux instructions suivant il constitue une valeur dans DX. D'abord le poids fort (DH) puis le poids faible (DL). L'ensemble fait une valeur dans DX. Quelle valeur ? Comme le type y met en même un bout en binaire et l'autre bout en décimale, c'est illisible (obfusqué quoi) et on devrait exécuter en place de Grèves, pour l'exemple, les types qui codent comme ça.
Mais bon le sens générale du code tu l'as. Ensuite la valeur est écrite directement dans la carte graphique, pas à l'adresse B8000h, mais à cette adresse plus un offset. Cet offset vaut 80*2*12+2*40 ce qui est aussi illisible et comme cette valeur est une constante, le type pouvait (devait...) l'écrire directement. Décidément fut l'exécuter ce type.
Zn fait ce sombre calcul doit correspondre à un numéro de ligne et un emplacement dans la ligne adressée. Le type aurait utilisé des constantes symboliques que ça n'aurait pas été plus mal. Enfin bref.
Mais bon voilà tu sais ce que fait le premier code et on te demande de faire quelque chose de semblable.

Le deuxième code fait la même chose (dans l'esprit, pas dans le détail) mais appelant une fonction système (BIOS) C'est à dire qu'il demande *poliment* à la machine d'écrire dans la carte au lieu de poker comme un sauvage une valeur à l'adresse B8000h.
Pour utiliser une interruption BIOS ou DOS, tu dois te procurer la documentation qui te dira quels registres du CPU doivent être chargés et avec quoi. Ensuite tu appelles l'interruption et c'est tout. Dans l'exemple, l'appel c'est int 10h. (int pout INTerruption, pas INTeger ;) ) tout simplement.

tiger360

ok merci mais le premier exemple il provient d un slide du cours de mon ecole :o

et j aimerai savoir si tu me venir en aide pour afficher à l’écran (sans faire usage des services d’interruption ,donc a la mamiere des brutes comme tu dis :P ) le contenu d'une variable

par exemple afficher le NOMBRE 180 qui se trouve ds la variable quotient

fredericmazue

Quote:
ok merci mais le premier exemple il provient d un slide du cours de mon ecole

Ca ne change rien à mon opinion, au contraire.
Enfin je ne dis pas pour l'exercice. Je vois bien le but de l'exercice. C'est bien de piloter un composant directement en écrivant dans ses registres. Ce qui me rend fou c'est le 80*2*12+2*40

Quote:
et j aimerai savoir si tu me venir en aide pour afficher à l’écran

A la manière des brutes ou pas, je suis obligé de te dire non pour une raison très simple: je n'ai plus de machine qui peut booter sous MS-DOS. Je ne pense même pas avoir un MS-DOS quelque part.
En plus j'avoue que cette cuisine, c'est très loin pour moi. Je ne me souviens pas de tout.
Mais bon si tu as des problèmes, tu peux toujours poser des questions ici, avec un bout de code, et si je peux, je t'aiderai ave cplaisir

Quote:
par exemple afficher le NOMBRE 180 qui se trouve ds la variable quotient

Quelle variable quotient ???
Bon un nombre décimal comme ça (en est-ce un au fait ?) tu vas devoir écrire une routine pour le décomposer en 1, 8 et 0, et afficher ces trois chiffres à la suite les uns des autres;
Un vrai exercice d'assembleur ça :)
dbobby

Bonjour tout le monde,
Pour faire foctionner des anciennes systemes, y'a des pssibiltees comme des disques sur rack ou ce qui n'est pas mal de tout ce sont des sytemes comme vmware ou dans la meme lignee virtual pc
A bientot
Dbobby