我对大会很新,我有一点问题。 我正在尝试使用循环,但是当我尝试测试我的程序时出现错误
A2070:无效的指令操作数
在第15,17,19,22行(带推送指令)
extrn ExitProcess: PROC
extrn printf: PROC
.data
komunikat1 db 'This linecode should be shown as %d ,and 10th should be last.', 0
Start PROC
push rdi
sub rsp, 28h
mov ecx, 1
_petla:
inc ecx
push ecx
dec ecx
push ecx
push komunikat1
call printf
add esp,16
pop ecx
or ecx, ecx
jne _petla
call ExitProcess
Start ENDP
END
我甚至不知道这是否是唯一的问题,因为我说我刚从大会开始,我找不到可以在互联网上学习的好材料。 我正在研究NASM x64。
答案 0 :(得分:0)
在Nasm x64中,堆栈是64位宽。
所以你不能推动ecx注册。
操作数必须为64位。
使用
push rcx
而不是
push ecx
答案 1 :(得分:0)
你应该使用64位寄存器,如rcx和x64位处理器中的PUSH指令。
PUSH rcx