lecteur memoire

Transcription

lecteur memoire
LECTEUR MEMOIRE
Mise en garde :
Je conserve ici la partie formatage de windows car c’est plus facile pour travailler avec l’éditeur
hexadécimal d’où le saut très court vers l’avant EBh 58h qui arrive à l’offset 50h + 08h = 58h.
Un saut très court (8 bits) est vers l’avant si son adresse de destination n’est pas supérieure à 7Fh (car de
00h à 7Fh c’est un nombre relatif positif et de 80h à FFh c’est un nombre relatif négatif donc un saut
arrière).
Evidemment, ne recopiez pas le texte en clair et mon nom si vous voulez que cela marche, et pensez à
mettre 55 AAh à la fin du secteur de boot.
Ce programme fonctionne et commence réellement en 5Ah, donc on peut noter ici le manque de
précision qui est si souvent mis en avant pour décrire les vertus de l’informatique.
Explication du programme :
Ce programme lit la mémoire RAM aux adresses segment (violet)/offset (bleu) que l'on peut spécifier sur
une certaine longueur (vert), le tout écrit en little-endian. Ici c'est l'adresse de l'IVT en 0000:0000h sur
une longueur de 592 caractères en décimale soit 250 en hexadécimale.
B8 00 B8  mov ax, B800h
90  nop
et,
8E C0  mov es, ax
c'est 2 instructions chargent le segment vidéo
ne rien faire
B8 00 00  mov ax, 0000h et, 8E D8  mov ds,ax
data que l'on veut explorer (violet)
c'est 2 instructions chargent le segment de
BE 00 00  mov si, 0000h charge offset data (bleu) avec un caractère
BF 00 00  mov di, 0000h charge offset vidéo avec 4 caractères
3E 8A 0C  mov cl,ds:[si]
26 88 0D  mov es:[di], cl
83 C6 01  add si, 01
83 C7 04  add di, 04
met l'adresse segment/offset de la data dans cl
met cl dans l'adresse segment/offset de la vidéo (lecture)
le pas de la data
le pas vidéo
(double word)
81 FE 50 02  cmp si, 0250h
test la longueur de 0250h en little-endian de la data (vert) sur le registre
'si' et positionne le flag ZF du microprocesseur en conséquence.
75 EE  jne EEh
si le test est faux (flag ZF = 0) alors saut court 18 occurrences d'offset en arrière (soit
à : 3E 8A 0C ...), si le test est vrai (flag ZF = 1) alors arrêt du programme.
nota : la dernière adresse vidéo générée est toujours 4 fois plus grande que la dernière adresse de data.
http://f.herbillon.free.fr