• Jueves 25 de Abril de 2024, 23:34

Autor Tema:  ¡¡¡ Programa Residete (hola Mundo) ¡¡¡  (Leído 3924 veces)

underworlddv

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
¡¡¡ Programa Residete (hola Mundo) ¡¡¡
« en: Jueves 22 de Noviembre de 2007, 03:36 »
0
q hay... estoy intentando hacer un programa residente simple....
q intercambie la interrupcion del tipo 3 (break point)...

por un programa simplemente q muestre un letrero "hola mundo"....

claro... el programa q todos buscan cuando de programas residentes se trata¡¡¡

(mi archivo se llama prue)

pero al hacer esto en dos               [B]masm prue.asm;[/B] me sale el siguiente error en la linea 32 del codigo

prue.asm(32): error a2056: immediate model illegal

.... la cual es este linea....  lea dx,offset miproy


.... este es el codigo entero:    .....( aun no pongo todos los push y pop's que van dentro de el programa que sera residente "miproy")




;-------------------------------programa residente------------------------------------


pila segment para stack 'stack'
db 128 dup (?)
pila ends


datos segment para 'data'

mens db 'hola mundo','$'


dib label dword
        x dw 0
        y dw 0

datos ends


codigo segment para 'code'
assume cs:codigo,ss:pila,ds:datos

      principal proc far
                push ds
                mov ax,00
                push ax
                mov ax,datos
                mov ds,ax
mov ah,35h
mov al,03h     ; asi o con h
int 21h

mov y,bx
mov x,es


lea dx,offset miproy  ;AQUI ESTA EL ERROE QUE ME MUESTRA MASM ¿?¿?¿?¿
mov ah,25h
mov al,03h
int 21h


ret

principal endp
;--------------------------------------------------------------------------

       
miproy proc near
sti
        mov ah,09h
   lea dx,mens
        int 21h


iret
miproy endp



codigo ends
end principal


;------------------------------------fin programa residente--------------------------

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: ¡¡¡ Programa Residete (hola Mundo) ¡¡¡
« Respuesta #1 en: Jueves 22 de Noviembre de 2007, 10:13 »
0
¿Que version de MASM estas usando? Con la 6.11 ensambla perfectamente ... (ml prue.asm).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

underworlddv

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: ¡¡¡ Programa Residete (hola Mundo) ¡¡¡
« Respuesta #2 en: Viernes 23 de Noviembre de 2007, 01:00 »
0
....  PUES EFECTIVAMNT.... CMO BN YA DESIA.... ESTA MAL....

Y DE Q MANERA JAJAJAJAJAJA.... AYER ME PUSE A REVISARLO EN LA NOCHE .. PUES OVIO NO C PUEDE PONER LA INSTRUCCION LEA DXOFFSET MIPROY  , PORQ LA INTRUCCION LEA OBTIENE EL OFFSET DE DESPLAZAMIENTO DE MIPROY...JIJIJIJ... Q BABOSO ME VI.......  


PERO BNO... AQUI ESTA EL CODIGO CORREGIDO:





pila segment para stack 'stack' ; -----------------segmento de pila-------------------------------
db 128 dup (?)
pila ends ;----------------------------------------fin del segmento de pila-----------------------





datos segment para 'data' ; -----------------------segmento de datos------------------------------

mens db ' Hola mundo ','$'

dib label dword ; para respaldar int 03h
        x dw 0
        y dw 0

datos ends ; ----------------------------------segmento de  datos fin-----------------------------





codigo segment para 'code' ;-----------------------------segmento de codigo-----------------------
assume cs:codigo,ss:pila,ds:datos

      principal proc far
                push ds
                mov ax,00
                push ax
                mov ax,datos
                mov ds,ax



mov ah,35h  ;respalda la int 03h en (x,y)
mov al,03h    
int 21h
mov y,bx
mov x,es





mov ax, cs ; escribe en AX el segmento donde se encuentra el programa llamado "miproy"
mov dS, ax ; pone ese valor en DS (un registro de segmento y no en DX)
lea dx,miproy ; instala la interrupcion nueva ¡¡¡¡¡
mov ah,25h
mov al,03h
int 21h



; -----------------ojo si quieres regresar la int de tipo 3 a la normalidad
; utiliza x,y en los q hicimos el respaldo y utiliza el mismo proceso
;q utilizo para instalar el programa residente, y utiliza la int 01h o 08h
; de la int 21 antes para detener el programa y verificar que funcione
; ..... o simplemente resetea la computadora y automaticamente regesa a la
; normalidad el vector de interrpciones....

ret

principal endp;--------------------------------       principal       --------------------------------

       






miproy proc near; ---------------------residente en memoria -----------------------------------------
sti

;pushf
push ax
push bx
push cx
push dx
push sp
push bp
push si
push di
push ds
push es
push ss

;--------------------------------------------proyecto codigo--------------------------------
;         AQUI ES DONDE VA EL PROGRAMA RESIDENTE EN MEMORIA
;----------------------------------------------------------------------------------------------


LEA DX,MENS
MOV AH,09H
INT 21H


;----------------------------------------------------------------------------------------------
;----------------------------------------fin proyecto codigo--------------------------------pop ss
pop es
pop ds
pop di
pop si
pop bp
pop sp
pop dx
pop cx
pop bx
pop ax


iret
miproy endp ;----------------------------fin-residente de memoria----------------------




codigo ends ;--------------------------------fin segmento de codigo---------------------
end principal

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: ¡¡¡ Programa Residete (hola Mundo) ¡¡¡
« Respuesta #3 en: Viernes 23 de Noviembre de 2007, 08:08 »
0
Cita de: "underworlddv"
....  PUES EFECTIVAMNT.... CMO BN YA DESIA.... ESTA MAL....

Y DE Q MANERA JAJAJAJAJAJA.... AYER ME PUSE A REVISARLO EN LA NOCHE .. PUES OVIO NO C PUEDE PONER LA INSTRUCCION LEA DXOFFSET MIPROY  , PORQ LA INTRUCCION LEA OBTIENE EL OFFSET DE DESPLAZAMIENTO DE MIPROY...JIJIJIJ... Q BABOSO ME VI.......
Esto y esto es exactamente lo mismo para MASM:

lea dx,miproy
lea dx,offset miproy

LEA     DX,[ADDR]
LEA     DX,[ADDR]

Lo podes comprobar con el debug y ahora tambien probe con MASM 6.15.

Sino te funcionaba antes seria por esto:
mov ax,datos
mov ds,ax

Y ahora haces esto tambien:
mov ax, cs
mov dS, ax

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

underworlddv

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: ¡¡¡ Programa Residete (hola Mundo) ¡¡¡
« Respuesta #4 en: Viernes 23 de Noviembre de 2007, 23:00 »
0
pues ahora tngo otro problema....

el ejemplo anterior... lo ejecute

y hice otro programa q solo llamara a la int3 y listo... le doy MASM y LINK
lo ejecuto y todo sale como devria
....


pro... lo volvi a intentar pero ahora con la int 05H ( print screen )....

y no sirve,,,,,....... ni siquiera haciendo otro programa q llame a la int05h¡¡¡



de echo intente el de la int03 (break point )

y pues enteoria se supone q si pulsaba "pause" en mi teclado... saldria el mensaje hola mundo... pro nada¡¡¡¡¡


puse una int 01 para q se detuviera cuando mostrara el mensaje... pero nada de nada

.... no c pq no funciona apretando pausa... y si con el programa q llama a la int03


:S:S:S