Minotauro nº3:(TEXT_006.003):18/08/1994 << Back To Minotauro nº 3
Fé de Ratas.. ;) ------------------------------------------------------------------------------- Jeje, esta area esta destinada a 'corregir' o aclarar un poco mas los conceptos de los que se hablan en la revista.. generalmente de números anterio_ res, ;). El problema era la velocidad de edicion de la revista: Tenemos a un grupo de gente laburando en varios proyectos a la vez, además de la revista y algunas cosas pasan desapercibidas.. o no nos damos cuenta que no estan lo su_ ficientemente claras como para entenderlas. Un ejempo de esto es la nota en que Zarathustra habla de los métodos de residencia... en la parte que explica el método de MCB, nos dice: mov ax, cs ;Con esto obtenemos el segmento dec ax ;del MCB. mov es, ax ;Aca estamos obteniendo del campo mov ax, es:[3] ;del MCB, la memoria utilizada. ;****************************************************************************** ;El problema de esto, es que en nignun momento se aclara que tenemos que decla_ ;rar el tamaño del virus un poco mas grande, exactamente un parrafo mas largo. ;Esto por qué ? Y bueno, en el momento en que tenemos que restarle un parrafo a ;la memoria que queremos reservar (esto lo haciamos para dar lugar a que se ;cree el MCB del nuevo bloque), estamos reservando un parrafo menos de virus ;tambien.. osea que la ultima parte del virus no entraria en la memoria reser_ ;vada.. Puede ser que no traiga problemas por ser un área de datos o algo por ;el estilo, pero es aconsejable hacer las cosas bien, o no ? ;-) ;Bueno, la manera de solucionar esto es simplemente INCrementar la cantidad de ;parrafos del virus o si lo declaran en su programa con un : ; ; TAMANO_EN_PARRAFOS EQU ((FIN-COMIENZO)/16)+1 ; ; declarar el incremento directamente ahi, para no gastar bytes ni clocks ;) : ; ; TAMANO_EN_PARRAFOS EQU ((FIN-COMIENZO+15)/16)+1 ; ;****************************************************************************** sub ax, bx ;En BX esta la longitud del virus, ;en parrafos. (ahora incrementada). push bx ;Salvo la cantidad de mem a reservar. mov bx, ax ;Le paso la nueva cantidad a BX. push cs pop es mov ah, 4ah int 21h pop bx ;Popeo la cantidad de mem a reservar. dec bx mov ah, 48h int 21h dec ax mov es, ax mov word ptr es:[1], 8 mov word ptr es:[8],'XX' ;Opcional, un nombre al bloque. inc ax mov es, ax push es ;Salvo la dir del seg. del virus ... ;blah blah blah y sigue el código ;) ...