Assembly 为什么';没有其他字符出现吗?
我有一个函数Assembly 为什么';没有其他字符出现吗?,assembly,nasm,Assembly,Nasm,我有一个函数print,它在寄存器dl中获取字节,并将其作为字符打印到控制台。我将一些字节放入内存,然后从该内存点移动到dl并调用print函数,但第二次调用时,它不会打印字符(第一次可以)。我正在使用Windows 10并组装到64位 我想打印AB,但只打印A push rbp mov rbp, rsp mov DWORD [rbp-4], 'ABCD' mov DWORD [rbp-8], 'XYZH' mov
print
,它在寄存器dl
中获取字节,并将其作为字符打印到控制台。我将一些字节放入内存,然后从该内存点移动到dl
并调用print
函数,但第二次调用时,它不会打印字符(第一次可以)。我正在使用Windows 10并组装到64位
我想打印AB
,但只打印A
push rbp
mov rbp, rsp
mov DWORD [rbp-4], 'ABCD'
mov DWORD [rbp-8], 'XYZH'
mov dl, BYTE [rbp-4]
call print
mov dl, BYTE [rbp-3]
call print
mov eax, 0
pop rbp
ret
中的打印功能定义如下:
print:
lea rax, var
mov BYTE [rax], dl
sub rsp, 8+8+8+32
mov ecx, -11
call GetStdHandle
mov rcx, rax
mov rdx, var
mov r8, 1
lea r9, [rsp-16]
mov QWORD [rsp-56], 0
call WriteConsoleA
add rsp, 8+8+32+8
ret
var
在数据部分的定义如下:var:db 0
调用print指令覆盖字符!您需要调整RSP
如果不降低堆栈指针,CPU将把调用
指令中的返回地址放在您写入字符的地方
push rbp
mov rbp, rsp
sub rsp, 8
mov DWORD [rbp-4], 'ABCD'
mov DWORD [rbp-8], 'XYZH'
mov dl, BYTE [rbp-4]
call print
mov dl, BYTE [rbp-3]
call print
mov eax, 0
mov rsp, rbp
pop rbp
ret