C’était pour dire….euh…rien du tout (?)
En fait le constructeur de TObject ne fait rien....ou presque...
constructor TObject.Create;
begin
end;
le destructeur non plus...
destructor TObject.Destroy;
begin
end;
Rôle de NewInstance et FreeInstance
En fait le mots-clé constructor va obliger le compilateur à rajouter un appel à la méthode NewInstance au moment du begin. C'est ce qui différencie le constructeur d'une bête procédure.
Sur le même principe, le mot clé destructor va provoquer un appel à FreeInstance.
Comment fonctionne NewInstance ?
Là encore il s'agit de quelques chose de très simple : il va d'abord récupérer la taille en octets
de l'instance d'une classe grâce à la méthode InstanceSize, puis va appeler un GetMem pour allouer l'espace mémoire auprès du système. Ensuite un appel à InitInstance va initialiser les octets alloué à des valeurs par défaut.
La valeur retournée par InstanceSize est définie au moment de la compilation.
Dans le cas de TObject, la taille en mémoire d'une instance est 4 octets. Elle permet de stocker un pointeur vers la classe associée à l'instance.
Comment fonctionne FreeInstance ?
Il s'agit d'un bête appel à FreeMem.
jeudi 16 août 2007
Constructor, destructor, procedure : Quels différences ?
Publié par
Olivier THEBAULT
Libellés :
delphi
Hello World OS
Le but de cet article est de présenter comment coder un petit hello world au boot d'un PC.
Rappels sur le démarrage d'un PC
- Le premier programme qui démarre est le bios
- Il effectue des contrôles sur le PC
- Il initialise les périphériques
- Il charge le secteur de boot et il l'éxécute
Rappel : un programme en assembleur se présente sous la forme d'une suite d'octets
Un secteur de boot contient :
- Des informations donnant les caractéristiques du disque
- Les octets du programme de secteurs de boot
- 2 octets magiques indiquant que le disque est bootable
- Le seul secteur chargé automatiquement par le bios
- Il stocke moins de 512 octets pour le programme
[BITS 16]
[ORG 0x0]
; initialisation des segments en 0x07C0
mov ax,0x07C0
mov ds,ax
mov es,ax
mov ax,0x8000
mov ss,ax
mov sp, 0xf000
;--- les données ---
msgDebut db "Hello world OS is running ! ",13,10,0
; Affiche une chaine de caracteres se terminant par 0x0
; Entree: DS:SI -> pointe sur la chaine a afficher
afficher:
push ax
push bx
.debut:
lodsb ; ds:si -> al
cmp al,0 ; fin chaine ?
jz .fin
mov ah,0x0E ; appel au service 0x0e, int 0x10 du bios
mov bx,0x07 ; bx -> attribut, al -> caractere ascii
int 0x10
jmp .debut
.fin:
pop bx
pop ax
ret
;--- NOP jusqu'a 510 ---
times 510-($-$$) db 144
; nombre magique : indique au pc que le secteur est bootable
dw 0xAA55
Publié par
Olivier THEBAULT
Libellés :
80x86,
assembleur,
hello world,
programmation,
système
Inscription à :
Articles (Atom)
