Ensamblador - Simple hola_mundo.com

 
Vista:

Simple hola_mundo.com

Publicado por javalan (1 intervención) el 17/05/2002 05:21:09
Al inicio del codeseg escribo org 0100h, pero cuando trato de \"linkear\":
\"c:\\tlink /t nombre.obj\" no se crea el ejecutable por un error que dice asi:
\'invalid initial point address\'

Cual es el código para un ejecutable .com que imprima un simple \"hola mundo\", utilizando tasm.

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:Simple hola_mundo.com

Publicado por ge-ergon (1 intervención) el 02/06/2002 23:00:12
;Com file compile
;tasm nombre / m9
;tlink /x /t nombre
code segment byte public use16 'code'
assume cs:code,ds:code,es:code,ss:code
org 0100h
.286
jumps
begin:
mov dx, offset cadena
mov ax,0900h
int 21h

mov ax,4c00h
int 21h
cadena db 'hola mundo$'
code ends
end begin
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
sin imagen de perfil

RE:Simple hola_mundo.com

Publicado por Jorge (126 intervenciones) el 03/06/2002 10:15:37
Hola, el código es el siguiente. Creo que está correcto, pero verificalo
por las dudas porque lo hice de memoria...

Codigo Segment
ASSUME CS:Codigo, DS:Codigo, ES:Codigo, SS:Codigo
ORG 100h

inicio: jmp Principal

-- más código: procedimientos, variables, etc...

Texto DB "Hola$"

Principal PROC NEAR
-- Código de la rutina principal...
mov ax, cs
mov ds, ax -- Igualo el segmento de datos al de código
mov es, ax

mov ah, 09
mov dx, OFFSET Texto
int 21h

mov ax, 4C00h
Int 21h
Principal ENDP

Codigo ENDS

END inicio
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
sin imagen de perfil

Continuacion....

Publicado por jorge (126 intervenciones) el 03/06/2002 10:16:57
Bueno: observaciones

* La directiva ASSUME no es garantía de que los registros sean configurados
con el valor respectivo.
* El programa debe llamar a la interrupción del DOS adecuada, al termino
del programa (sino puede salir cualquier cosa). Me refieron a int 21h, con
AX=4Cxxh (xx es el código de retorno del programa; usualmente 00 significa
todo OK.)
* Si especificás datos al principio (DB, DW, etc.) es necesario que pongas
un JMP primero. El código que genera el compilador empieza traduciendo lo
primero que encuentra y el intérprete del DOS lo agarra como viene,
también. Imaginate que si pongo las declaraciones de variables primero (al
principio), el DOS al ejecutar el .COM va a tratar de ejecutar lo que esté
en 100h y ¡¡¡no son instrucciones!!!. Por eso adelante se pone un JMP y una
etiqueta que matchea (ya sé que no existe el término, pero se entiende,
no?) con el END del final.
* Lo de PROC NEAR, se lo puse de gusto. Un .COM siempre hace agrega NEAR
como default.

Bueno, listo, creo que terminé y no falta nada... Espero te sirva,

chau...
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

RE:Continuacion....

Publicado por ge-ergon (18 intervenciones) el 04/06/2002 07:19:47
Para no tener que agregar jmp al principio (brincar los datos)
se pueden situar :
...
mov ax,4c00
int 21

[datos]

code ends
end inicio
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

RE:Continuacion....

Publicado por ge-ergon (18 intervenciones) el 02/08/2004 06:12:00
Es decir en tasm seria

ideal
model tiny
p286
codeseg
org 0100h
jumps
inicio:

[codigo]

[datos]

end inicio
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