我在访问特定位置的字符数组中的值时遇到很多麻烦。我在C ++中使用内联汇编并使用visual studio(如果有任何帮助的话)。这是我的代码:
char* addTwoStringNumbers(char *num1)
{
// here is what I have tried so far:
movzx eax, num1[3];
mov al, [eax]
}
当我调试时,我可以看到num1 [3]是我想要的值,但我似乎无法让al
或eax
等于该值,它似乎总是一些指针引用。我也玩过Byte PTR而没有运气。
答案 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的建议,你马上就会完成。