masm, msvcrt.

Iniciado por _Enko, 1 Diciembre 2011, 16:53 PM

0 Miembros y 1 Visitante están viendo este tema.

_Enko

Hola, pense que era mi compu que tenia algun conflicto con visual studio o algo, pero no. Instalacion nueva del paquete de http://www.masm32.com/

Código (asm) [Seleccionar]

.386
.model flat, stdcall
option casemap :none   ; case sensitive
      include C:\masm32\include\windows.inc
      include C:\masm32\include\kernel32.inc
      include C:\masm32\include\user32.inc
      include C:\masm32\include\msvcrt.inc
      includelib C:\masm32\lib\kernel32.lib
      includelib C:\masm32\lib\msvcrt.lib
      includelib C:\masm32\lib\user32.lib
     
.code
    szPause db 'pause',0
    szFmt db '%s',0
    charsWritten dd 0
start:
    invoke AllocConsole
    invoke GetStdHandle, STD_OUTPUT_HANDLE
    invoke WriteConsole, eax, offset szPause, 5, offset charsWritten,NULL
    invoke crt_printf,offset szFmt, offset szPause
    invoke crt_system, offset szPause
    invoke ExitProcess, 0
    ret
end start

El resultado deberia de ser "pausepausePresione una tecla para continuar..."
Sin embargo, crt_printf no imprime la cadena, si devuelve 5 que son los caracteres que escribio. Es decir esta "imprimiendo el texto" pero no se imprime en la pantalla.

1)
Alguna idea de porque no imprime con printf?
Con o sin AllocConsole el resultado es el mismo. aunque printf se tendria que encargar solo de alojar una consola si  no esta  creada.


Saludos.

Eternal Idol

¿Cambia en algo no llamar a WriteConsole? Mezclar la CRT con la API tal vez de problemas ...
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

_Enko

#2
Cita de: Eternal Idol en  1 Diciembre 2011, 17:42 PM
¿Cambia en algo no llamar a WriteConsole? Mezclar la CRT con la API tal vez de problemas ...

Originalmente el codigo era sin llamar a la api.
Código (asm) [Seleccionar]

.386
.model flat, stdcall
option casemap :none   ; case sensitive

include \masm32\include\msvcrt.inc
includelib \masm32\lib\msvcrt.lib

.code
szMsg         db "hola mundo",0
szPause       db "Pause",0
szFrm         db "%s",0

start:

invoke crt_printf, offset szFrm,  offset szMsg    
;push offset szMsg
;push offset szFrm
;call crt_printf
;add esp, 8

push offset szPause
call crt_system
add esp, 4

ret
end start


pd: si uso qedit, Antes guardo el archivo y luego  es BuildAll o AssembleLink?

Saludos.


edited:
milagrosamente cai en el problema...
SOLUCION:
en QEdit para aplicacion consola hay que hacer click en
CONSOLE BUILD ALL.

ya me parecia muy raro.

Eternal Idol

Si, el problema es que el SUBSYSTEM es WINDOWS y no CONSOLE. Yo tambien use Assembly & Link y Build All y asi no funcionaron por eso, despues use lineas de comandos y funciono  ;D
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

_Enko

Jeje, cosas que pasan cuando la herramienta no es SISO. (Same Input = Same Output) :laugh:

desde ayer me habia encaprichado de que no funcionara y no encontraba explicacion... bastante molesto, dormi mal  :P


gracias por tomarte el  tiempo de ayudar :)


Eternal Idol

Jeje de nadas, la linea de comandos es lo mas  ;-)
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón