Sauvegarde du setup

Contenu du snippet

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

A voir également

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.