Ensamblador - Pregunta de novato

 
Vista:

Pregunta de novato

Publicado por Jorge (3 intervenciones) el 09/04/2002 17:02:17
Necesito ayuda, miren estoy empezando a programar en Ensamblador MASM y al ejecutar el archivo EXE que es generado por el LINK (Tanto el MASM como el LINK no arrojaron ningún error) se queda trabada la maquina esto en ambiente DOS y desde Win solo marca un error y tengo que cerrar la ventana de DOS que se abre, el codigo es el siguiente:

STACK SEGMENT PARA ‘STACK’
DB 64 DUP (‘STACK’)
STACK ENDS

DATA SEGMENT PARA ‘DATA’
MENSAJE DB ‘HOLA’, ‘$’
DATA ENDS

CODE SEGMENT PARA ‘CODE’
MAIN PROC FAR

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX

;RUTINA PARA IMPRIMIR LA CADENA
LEA DX,MENSAJE
MOV AH,09
INT 21H

RET
MAIN ENDP
CODE ENDS
END

La cadena si es impresa, pero se queda trabado el programa.

De antemano muchas gracias.

ATTE: Jorge.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pregunta de novato

Publicado por Googol (61 intervenciones) el 10/04/2002 06:58:58
El problema está en el RET. Para acabar un programa .COM puedes utilizar la instrucción RET (siempre que no hayas dejado ningún "residuo" en la pila). Pero para acabar un .EXE no te sirve. En los EXE tienes que utilizar siempre la función del sistema operativo.
En teoría debería bastar, si no recuerdo mal, con que sustituyeras el RET por

MOV AX, 4C00h
INT 21h

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar