Assembly 如何在程序集中打印到控制台?
我想学习汇编语言。为了开始,我会将结果打印到控制台,比如说5+5。我正在Windows 7 64位中使用平面汇编程序 我刚刚开始编写代码,我希望将v1和v2字符串打印到控制台,但我没有成功:Assembly 如何在程序集中打印到控制台?,assembly,printing,console,Assembly,Printing,Console,我想学习汇编语言。为了开始,我会将结果打印到控制台,比如说5+5。我正在Windows 7 64位中使用平面汇编程序 我刚刚开始编写代码,我希望将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运行它,但没有显示任何内容。我想我会被要求输入一个值 我做错了什
v1 db 'Enter value 1: ', 0
val1 db 80 dup(?)
v2 db 'Enter value 2: ', 0
val2 db 80 dup(?)
编译完代码后,我尝试使用fasm.exe hello.ASM
运行它,但没有显示任何内容。我想我会被要求输入一个值
我做错了什么?您必须编写代码才能将数据打印到控制台--现在,您只是定义了一些数据块 您通常会使用类似于
WriteFile
或(如果您想更喜欢)的writeconsole输出打印数据。以下是一个示例“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
您必须编写代码才能将数据打印到控制台——现在,您只需要定义一些数据块
您通常会使用类似于WriteFile
或(如果您想更喜欢)的writeconsole输出打印数据。以下是一个示例“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
您正在声明数据,但没有对其执行任何操作。您可以调用Windows函数(例如OutputDebugString)或c-runtime函数(例如printf)来显示某些内容。您正在声明数据,但没有对其执行任何操作。您可以调用Windows函数(例如OutputDebugString)或c运行时函数(例如printf)来显示某些内容。还需要输入例程以及一些十进制/二进制转换。@BrianKnoblauch:是的,但由于这显然是个家庭作业,我不想把所需的一切都交给它……评论并不是针对您的,这是为了OP的利益,所以当它不能解决他的所有问题时,他不会感到失望。:-)谢谢你的回答。首先,这不是家庭作业(作为一种证明,也许你可以看看我之前的问题,看看我对编程语言有着普遍的兴趣,并且问了一些关于不同编程语言、技术等的问题)。我从未接触过assembly,只想了解一些基本知识。所以,要打印到控制台,我必须以某种方式导入具有该功能的库,然后在该库中调用这些方法?是的,基本上就是这样。在DOS等较旧的系统上,只将数据写入屏幕缓冲区是很常见的,但现代系统通常不支持/允许这样做。还需要输入例程以及一些十进制/二进制转换。@BrianKnoblauch:是的,但因为这显然是家庭作业,我不想把所有需要的东西都交给他……评论不是针对你的,它是为了OP的利益,所以当它不能解决他的所有问题时,他不会感到失望。:-)谢谢你的回答。首先,这不是家庭作业(作为一种证明,也许你可以看看我之前的问题,看看我对编程语言有着普遍的兴趣,并且问了一些关于不同编程语言、技术等的问题)。我从未接触过assembly,只想了解一些基本知识。所以,要打印到控制台,我必须以某种方式导入具有该功能的库,然后在该库中调用这些方法?是的,基本上就是这样。在DOS这样的旧系统上,只将数据写入屏幕缓冲区是很常见的,但现代系统通常不支持/允许这样做。