Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: SLUGER en 11 Junio 2009, 06:01 am



Título: System("pause"); de C en ASM[DUDA]
Publicado por: SLUGER en 11 Junio 2009, 06:01 am
Código:
Main:
        ;Mostrar mensaje 'Presione una tecla para continuar . . . '
        ORG 100H
        MOV AH, 09H
        MOV EDX, MesG
        INT 21H
        ;Leer caracter
        MOV AH, 08H
        INT 21H
        INT 20H
Datos:
        MesG DB "Presione una tecla para continuar . . . ", 24H

Tengo las siguientes dudas en el code:
1.-¿Que es lo que significa ORG?
2.-¿Porque donde declaro el identificador MesG tengo que poner 24H? (si no me tira unos simbolos raros)
3.-¿Porque el FASM me compila a .COM y no a .EXE?
4.-¿Haci es como se hace?


Título: Re: System("pause"); de C en ASM[DUDA]
Publicado por: Binaria en 11 Junio 2009, 06:32 am
 1- ORG 100h lo vi el lunes en la clase de ensambla jeje, tiene que ver con el enlazado .COM. Busqué x ahi y dice
" ORG 100h es obligatoria en programas COM, porque se cargaran en memoria en la posicion CS:100 ( logicamente el segemento de código, CS )." (http://www.lawebdelprogramador.com/news/mostrar_new.php?id=29&texto=Ensamblador&n1=349091&n2=1&n3=0&n4=0&n5=0&n6=0&n7=0&n8=0&n9=0&n0=0). Mañana le pregunto mi profe para que me explique bien XD

 2- el 24H es el ascii del caracter "$" que es el indicador de fin de hilera para la 09H de la interrupcion del DOS (21H) (tampoco es el indicador de fin de hilera en general). Si no lo pone pasa derecho e imprime todo lo que se encuentre en memoria despues del mensaje hasta topar con algun "$" que se encuentre por ahi de casualidad.

3- Yo no uso fasm pero eso es cuestion de leer la documentacion o el help y modificar los parametros de "ensamblaje" (yo creo que mas bien de linker). Para que haga un .exe y no un .com

4- el codigo en si esta bien, no se que tipo de definicion de segmentos va a usar
-> http://mixtli.utm.mx/~resdi/ENSAMBLADOR_DE_ARCHIVO.pdf


Título: Re: System("pause"); de C en ASM[DUDA]
Publicado por: YST en 11 Junio 2009, 07:07 am
Respondo la duda de por que en .com y no  .exe , cuando pones el org 100h el FASM te fabrica un .com , si le pusieras format pe te produciria  un .exe si le pone un format pe dll te produce un .dll .


Título: Re: System("pause"); de C en ASM[DUDA]
Publicado por: Eternal Idol en 11 Junio 2009, 08:06 am
Lo que dice YST no es del todo correcto en tu caso debido a que PE es el formato de ejecutable de Windows y tu programa es para MS-DOS donde el formato de ejecutable es MZ (los ejecutables .COM no tienen formato alguno son 100% codigo).

http://flatassembler.net/docs.php?article=manual#2.4


Título: Re: System("pause"); de C en ASM[DUDA]
Publicado por: Binaria en 11 Junio 2009, 18:32 pm
ya le pregunte mi profesor XD
 el org es para el ensamblador ( no es una instruccion de ensamblador) 100h es para que el codigo comience a partir de la direccion 100h, cuando se necesita reservar espacio antes en el segmento, que por lo general usa el sistema operativo (hay una sigla para lo que el sistema le agrega ahi pero no la recuerdo) (seguro es el caso de un .com )y si no lo hace le cae encima al codigo. Pero el org no es exclusivo para un .com

 Tal vez no se entiende mucho de mi explicacion :silbar: , pero el punto es que indica a partir de que direccion comienza el codigo en el segmento.


Título: Re: System("pause"); de C en ASM[DUDA]
Publicado por: SLUGER en 12 Junio 2009, 03:38 am
 :D Muchas Gracas a todos los que respondieron  :-*