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
有两个选项:
要么:
- 将
的值从内存移到寄存器中(例如eax)o
- 递增寄存器
- 将值从寄存器移回内存
- 直接增加存储在内存中的值
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