Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - HelloWorldCodigo

#1
He intentado esto encontrado en la web, pero nasm me da un error:

Código (asm) [Seleccionar]
extern GetStdHandle
extern WriteConsoleA
extern ReadConsoleInputA
extern ExitProcess

import GetStdHandle kernel32.dll
import ExitProcess kernel32.dll
import WriteConsoleA kernel32.dll
import ReadConsoleInputA kernel32.dll


El error junto al comando son los siguientes:
nasm -fwin32 main.asm -o main.exe
main.asm:10: error: parser: instruction expected
main.asm:11: error: symbol `import' redefined
main.asm:11: error: parser: instruction expected
main.asm:12: error: symbol `import' redefined
main.asm:12: error: parser: instruction expected
main.asm:13: error: symbol `import' redefined
main.asm:13: error: parser: instruction expected

También he probado este comando y me sale el mismo error:
nasm main.asm -o main.exe
#2
¿Y cómo puedo enlazar? Se supone que no necesito usar C Standard
#3
Hola a todos y a todas. El problema que tengo es que al ensamblar un código con NASM con la etiqueta -fwin32 no puede ser ejecutado según Windows a 64 bits. No he probado la aplicación en modo 32 bits (no tengo ningún ordenador de 32 bits), así que no sé si es problema del código.

Código (asm) [Seleccionar]
STD_OUTPUT_HANDLE   equ -11
STD_INPUT_HANDLE    equ -10
NULL                equ 0

global start
extern ExitProcess, GetStdHandle, WriteConsoleA, ReadConsoleInputA

section .data    ;message we want to display on console
msg                 db "Press a key to continue...", 13, 10, 0
msg.len             equ $ - msg
consoleInHandle     dd 1

section .bss     ;buffers declaration
buffer_out          resd 2
buffer_in           resb 32

section .text
   start:       ;starting point of our program
       push    STD_OUTPUT_HANDLE
       call    GetStdHandle   ;call to get a handle to the
       push    NULL           ;specified mode (input, output...)
       push    buffer_out
       push    msg.len
       push    msg
       push    eax            ;contains the GetStdHandle result
       call    WriteConsoleA  ;call to print our msg in console

   read:
       push    STD_INPUT_HANDLE
       call    GetStdHandle        ;new call to get input handle
       push    NULL
       push    1
       push    buffer_in
       push    eax
       call    ReadConsoleInputA   ;call to detect user input
                                   ;this function will wait til
   exit:                           ;it detects enough keypresses
       push    NULL                ;(in this case, 1)
       call    ExitProcess


Este es el comando que he usado:
nasm -fwin32 main.asm -o main.exe
#4
Entonces, si no tengo que usar C Standard, donde están definidos GetStdHandle?
#5
Hola, muy buenas a todos y a todas. La pregunta es cómo podría imprimir un carácter en la consola de Windows, trabajando en 32 bits. No querría tener que usar ni GCC (querría usar NASM puro), ni tampoco DosBox. ¡Muchas gracias!