'push'指令错误A2070

时间:2016-05-06 09:34:22

标签: push nasm

我对大会很新,我有一点问题。 我正在尝试使用循环,但是当我尝试测试我的程序时出现错误

  

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。

2 个答案:

答案 0 :(得分:0)

在Nasm x64中,堆栈是64位宽。

所以你不能推动ecx注册。

操作数必须为64位。

使用

push rcx

而不是

push ecx

答案 1 :(得分:0)

你应该使用64位寄存器,如rcx和x64位处理器中的PUSH指令。

PUSH rcx