C 汇编程序中的简单增量

C 汇编程序中的简单增量,c,assembly,C,Assembly,我受够了。我在自学阿森伯勒,并翻译一些基本说明。但我不能接受这个 有人能帮我吗 int secuencia ( int n, EXPRESION * * o ) { int a, i; for ( i = 0; i < n; i++ ){ a = evaluarExpresion( *o ); // Im trying to do this: o++; __asm { mov eax,dword ptr [o] mov ecx,dw

我受够了。我在自学阿森伯勒,并翻译一些基本说明。但我不能接受这个

有人能帮我吗

int
secuencia ( int n, EXPRESION * * o )
{
  int a, i;
  for ( i = 0; i < n; i++ ){

    a = evaluarExpresion( *o );

    // Im trying to do this: o++;
  __asm {
      mov eax,dword ptr [o] 
      mov ecx,dword ptr [eax] 
      inc [ecx]  
    }
  }
  return a ;
}
int
secuencia(int n,expression**o)
{
int a,i;
对于(i=0;i
我写了里面的和作品,但仍然不知道如何增加O

int
secuencia ( int n, EXPRESION * * o )
{
  int a, i;
  for ( i = 0; i < n; i++ ){

      __asm {

            mov eax,dword ptr [o] 
            mov ecx,dword ptr [eax] 
        push ebp
            mov ebp, esp
            push ecx

            call evaluarExpresion
        mov esp, ebp

        pop ebp

        mov a, eax
      }

    o++;
  }
  return a ;
}
int
secuencia(int n,expression**o)
{
int a,i;
对于(i=0;i
有两个选项:

要么:

  • o
    的值从内存移到寄存器中(例如eax)
  • 递增寄存器
  • 将值从寄存器移回内存

  • 直接增加存储在内存中的值
尝试使用这两种方法

mov esi, o
add esi, 4 //increment is here
第1行:我们将o指针移动到esi寄存器。 第2行:我们增加您的o指针


我不完全明白你想做什么,但我希望这能有所帮助

我会给出一些代码,但我从来没有使用过MASM语法(或者你正在使用的任何语法)。嗨,Artelius,我知道我需要做第二个,但我真的不知道怎么做。我要工作几个小时。。。但没什么,你能解释一下吗?我也尝试使用leaeax,o,但不起作用。Thanksry
inc dword ptr o
inc dword ptr[o]
。如果成功,很好,但我建议您也尝试将
o
移动到寄存器中,增加寄存器,然后再次将寄存器移动到内存中。我将值传递到寄存器,但仍然存在问题。我编辑了这个问题,你能检查一下吗?谢谢我听从你的建议,读了一读。我正在使用MASM,我想做的事情是不可能的(至少不是以一种简单的方式)。所以我只是直接按照toto的建议增加值:添加o,4,它解决了这个问题。非常感谢。(你想要谷歌wave邀请作为表达感谢的方式吗?)控制台什么都不做(空白)。当我把所有的{…}都改成o++时,它就工作了!嗨,托托,我试着:调用Evaluarexpression move esi,[o]add esi,4//increment在这里mov esp,ebp,但不起作用。或者我需要把它放在另一个地方?当然!不要使用INC,指针是4字节(在32位汇编语言中…)您好,再次感谢。我需要做的是,在汇编程序中,替换o++指令。我需要得到一个指向o的指针,并修改该指针中的指令以添加4(这样它就可以传递到下一个元素)。我尝试了你的两个建议,但都不起作用。更奇怪的是,只需将o++留在asm之外(当然是C),它就可以工作。所以这一定是一个翻译问题。我不知道我是否能解释我自己。非常感谢您的帮助。您的解决方案有效!!!但不是在这个编译器上:(仍然,非常感谢!检查下面,这也适用于您!我认为,在第一个示例中,您必须添加
mov o,esi
,以将值保存回
o
变量。
mov eax, o
mov esi, [eax]
add esi, 4