在char数组Assembly X86嵌入的索引位置获取char

时间:2010-10-30 22:24:00

标签: arrays x86 inline-assembly

我在访问特定位置的字符数组中的值时遇到很多麻烦。我在C ++中使用内联汇编并使用visual studio(如果有任何帮助的话)。这是我的代码:

char* addTwoStringNumbers(char *num1)
{
    // here is what I have tried so far:
    movzx eax, num1[3];
    mov al, [eax]
}

当我调试时,我可以看到num1 [3]是我想要的值,但我似乎无法让aleax等于该值,它似乎总是一些指针引用。我也玩过Byte PTR而没有运气。

2 个答案:

答案 0 :(得分:1)

我既不是内联汇编,也不是MASM语法,但这里有一些提示:

1)试试这个:

mov   eax, num1 ;// eax points to the beggining of the string
movsx eax, [eax + some_index] ;// movsx puts the char num1[some_index] in eax with sign extend.

(movzx用于unsigned char,所以我们使用了movsx)

2)您需要将值从eax传递给C.最简单的方法是声明变量并将结果放在那里:int rez; __asm { mov rez, eax; };

3)如果要在汇编中编写整个函数,则应考虑使用naked关键字(并阅读有关调用约定的内容)。如果没有,请确保保留寄存器,不要损坏堆栈。

答案 1 :(得分:0)

看起来有人在做他们的ICS 51作业!按照ruslik的建议,你马上就会完成。