【发布时间】:2021-01-06 18:23:45
【问题描述】:
我最近开始学习组装,为了练习,我想制作一个小游戏。 为了制作游戏的边框图形,我需要打印 n 次块字符。 为了测试这一点,我编写了以下代码:
bits 64
global main
extern ExitProcess
extern GetStdHandle
extern WriteConsoleA
section .text
main:
mov rcx, -11
call GetStdHandle
mov rbx, rax
drawFrame:
mov r12, [sze]
l:
mov rcx, rbx
mov rdx, msg
mov r8, 1
sub rsp, 48
mov r9, [rsp+40]
mov qword [rsp+32], 0
call WriteConsoleA
dec r12
jnz l
xor rcx, rcx
call ExitProcess
section .data
score dd 0
sze dq 20
msg db 0xdb
我想用 WinAPI 函数来做这个输出。 有趣的是,这段代码在使用 WriteConsoleA 打印一个字符后停止,但是当我使用 C 的 putchar 时,它可以正常工作。我还可以设法使用 WriteConsoleA 函数制作一个 C 等效项,该函数也可以正常工作。 C代码的反汇编并没有让我更进一步。
我怀疑我在使用我看不到的堆栈时出现了问题。希望有人能解释或指出。
【问题讨论】:
标签: winapi assembly 64-bit x86-64 nasm