如何在装配中打印到控制台?

时间:2012-02-27 19:07:15

标签: assembly printing console

我想学习汇编语言。刚开始,我只打印结果,假设5 + 5到控制台。我在Windows 7 64bit中使用Flat Assembler。

我刚刚开始编写代码,我希望将v1和v2字符串打印到控制台,但我没有成功:

v1 db 'Enter value 1: ', 0
val1 db 80 dup(?)
v2 db 'Enter value 2: ', 0
val2 db 80 dup(?) 

编译代码后,我尝试使用fasm.exe hello.ASM运行它,但会显示注释。我以为我会被要求输入一个值。

我做错了什么?

1 个答案:

答案 0 :(得分:5)

你必须编写代码来实际将数据打印到控制台 - 现在,你只是定义了一些数据块。

您通常会使用WriteFile或(如果您想获得更高级别的人)WriteConsoleOutput等内容打印数据。以下是一个示例“Hello World”程序作为起点:

.386
.MODEL flat, stdcall

getstdout = -11

WriteFile PROTO NEAR32 stdcall, \
        handle:dword,           \
        buffer:ptr byte,        \
        bytes:dword,            \
        written: ptr dword,     \
        overlapped: ptr byte

GetStdHandle PROTO NEAR32, device:dword

ExitProcess PROTO NEAR32, exitcode:dword

.stack 8192

.data
message db "Hello World!"
msg_size equ $ - offset message

.data?
written  dd ?

.code
main proc   
    invoke GetStdHandle, getstdout
    invoke WriteFile,                   \
           eax,                         \
           offset message,              \
           msg_size,                    \
           offset written,              \
           0
    invoke ExitProcess, 0
main endp
        end main