; Listing 22.1. L22-1.ASM OnStack struc ;données stockées sur la pile après PUSH BP OldBP dw ? ;BP de l'appelant RetAddr dw ? ;adresse de retour Filler dw ? ;caractère pour remplir le tampon Attrib dw ? ;attribut pour remplir le tampon BufSize dw ? ;nombre de paires caractère/attribut ;à remplir BufOfs dw ? ;offset du tampon BufSeg dw ? ;segment du tampon EndMrk db ? ;marqueur de fin de la stack frame OnStack ends ClearS proc near push bp ;sauve BP de l'appelant mov bp,sp ;pointe sur la stack frame cmp word ptr [bp].BufSeg,0 ;saute le ;remplissage si un pointeur null jne Start ; est passé cmp word ptr [bp].BufOfs,0 je Bye Start: cld ;fait décompter STOSW mov ax,[bp].Attrib ;charge AX avec l'attribut and ax,0ff00h ;prépare pour la combinaison avec le ; caractère plein mov bx,[bp].Filler ;charge BX avec le caractère ;plein and bx,0ffh ;prépare pour la combinaison avec ;l'attribut or ax,bx ;combine l'attribut et le caractère ;plein mov bx,[bp].BufOfs ;charge DI avec l'offset du ;tampon cible mov di,bx mov bx,[bp].BufSeg ;charge ES avec le segment du ;tampon cible mov es,bx mov cx,[bp].BufSize ;charge CX avec la taille du ;tampon rep stosw ;remplit le tampon Bye: mov sp,bp ;restaure le pointeur de pile ;original pop bp ;et BP de l'appelant ret EndMrk-RetAddr-2 ;retourne, en supprimant les ;paramètres de la pile ClearS endp