Как мне печатать на консоли в сборке? - PullRequest
0 голосов
/ 27 февраля 2012

Я бы хотел выучить ассемблер. Для начала я бы просто распечатал результат, скажем, 5 + 5 на консоль. Я использую Flat Assembler в Windows 7 64bit.

Я только начал писать код и хотел бы, чтобы строки 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 Ответ

5 голосов
/ 27 февраля 2012

Вы должны написать код для фактической печати данных на консоль - сейчас вы просто определяете некоторые блоки данных.

Обычно вы печатаете данные с чем-то вроде 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...