SoloCodigo
Programación General => ASM (Ensamblador) => Mensaje iniciado por: underworlddv en Jueves 22 de Noviembre de 2007, 03:36
-
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--------------------------
-
¿Que version de MASM estas usando? Con la 6.11 ensambla perfectamente ... (ml prue.asm).
-
.... 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
-
.... 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
-
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