Ce code lit la mémoire du circuit cmos,c'est à dire la mémoire où le setup du bios range la configuration du PC.
Un programme est créé qui réécrira ce contenu lors de son exécution.
ligne de commande:
scmos nomfichier
où "nomdefichier" peut être précédé d'un chemin.
Syntaxe de TASM, version pour Nasm si demandee
Source / Exemple :
code segment
assume cs:code; ds:code
org 256
debut: jmp start
mov ax,cs
mov ds,ax
mov si,offset cram
mov cx,112 ; taille mémoire cmos moins les 16 premiers octets (real time clock etc)
mov bl,10h
ici:
mov al,bl
out 70h,al
nop
nop
nop
lodsb
out 71h,al
inc bl
loop ici
mov ax,4c00h
int 21h
cram db 112 dup(?)
;fin
oui db 0
usage db " usage: scmos nomfichier"
db 10,13,'$'
usage2 db "nonfichier eventuellement précédé du chemin,mais sans extension, "
db 10,13,'$'
er_s db " Erreur syntaxe ligne de commande$"
er_exist db "Ce fichier existe deja$"
er_ecriture db " Erreur d'ecriture$ "
er_create db "Impossible de creer le fichier$"
nom db 32 dup (?)
path db 32 dup (?)
com db '.com',0
start: ; lecture de ram cmos dans cram
mov di,offset cram
mov cx,112 ; taille mémoire cmos moins les 16 premiers octets (real time clock etc)
mov bl,10h
boucle:
mov al,bl
out 70h,al
nop
nop
nop
in al,71h
stosb
inc bl
loop boucle
; extraction du nom dans la ligne de commande
mov si,80h
lodsb
cmp al,2
ja dofile
mov dx,offset usage
mov ah,9
int 21h
mov dx,offset usage2
mov ah,9
int 21h
jmp exit
syntaxe:mov dx,offset er_s
jmp erreur
dofile:
mov di,offset nom
nom0: lodsb
cmp al,' '
jz nom0
stosb
nom1: ; on ajoute l'extension ".com",0
lodsb
cmp al, 13
jz nomdone
cmp al,' '
jz nomdone
cmp al,'.'
jz syntaxe
stosb
jmp nom1
nomdone:
mov si, offset com
mov cx,5
l: movsb
loop l
xor al,al
stosb
fini:
; on remplace jmp start par 3 nop
mov al,90h
mov di,offset debut
stosb
mov ah,90h
stosw
mov ah,3dh ; open file
mov al,3
mov dx, offset nom
int 21h
jc create
mov dx,offset er_exist
jmp erreur
create:
mov ah,3ch
int 21h
jnc ecriture
mov dx,offset er_create
jmp erreur
ecriture:
push ax
mov bx,ax
mov dx,offset debut
mov cx,offset oui
sub cx,dx
mov ah ,40h ;write
int 21h
mov dx,offset er_ecriture
jc erreur
pop bx
mov ah,3eh ; close
int 21h
exit:
mov ax,4c00h
int 21h
erreur:
mov ah,9
int 21h
jmp exit
code ends
end debut
Conclusion :
Outre son role de sauvegarde et de restitution, scmos peut aussi être utilisé pour passer d'un système à un autre. En effet c'est dans le cmos que le bios enregistre le périphérique à utiliser en premier lors du chargement du système.
Par exemple on charge msdos à partir d'une clef usb, en exécutant " scmos n=usb" le fichier usb.com est créé
Si on charge Windows Xp à partir d'un disque dur, scmos n=disque créera le fichier disque.com
Maintenant, quelque soit le système, l'exécution de usb.com ou de disque.com provoquera l'installation du système se trouvant sur usb ou disque
C'est dans l'exécution d'uun fichier bat que réalise l'intéret de scmos: passage d'un système à un autre sans intervention de l'opérateurm
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.