这段简单的代码出了什么问题?

时间:2009-09-10 22:53:39

标签: assembly

我有以下代码,应该在断点处显示123位于eax,321位于ecx。由于某些原因,没有发生。有人在乎解释原因吗?

    push ebp;
    mov ebp, esp;
    sub esp, 8;
    mov [ebp-4], 123;
    mov [ebp-8], 321;
    mov eax, [ebp-4];
    mov ecx, [ebp-8];
    pop ebp; <------------- breakpoint here
    retn;

我想错误的是我做不到

mov [ebp-4], 123

其他一切对我来说都很好。

由于

编辑:值为: eax 1505915; ecx 1720129;

2 个答案:

答案 0 :(得分:8)

您将字节值存储到内存中。

更改为

mov dword ptr [ebp - 4], 123
mov dword ptr [ebp - 8], 321

eax = 1505915是0x16FA7B。最后一个字节是十六进制的7B,十进制为123。 ecx = 1720129是0x1A3F41。十六进制41是321(141)的最后一个字节。

答案 1 :(得分:1)

我的印象是(我可能错了)你不能将值推送到这样的内存地址。你必须通过寄存器:

MOV EAX, 123
MOV [EBP-4], EAX

正如我所说,我可能错了。但试一试。查看说明书手册。它将向您展示您可以对哪种寻址模式执行哪些操作。