汇编程序中的字符串问题[初学者]

时间:2011-01-18 20:22:18

标签: visual-studio-2010 char intel assembly

我在Visual Studio 2010中工作,这里有一些我遇到问题的代码:

void main()
{
int x;
char c1[100]="cd";
char c2[100]="abcdef";
_asm {
    lea edx,c2
    lea ecx,c1
    push edx
    push ecx
    call subsir
    add esp, 8   
    mov x, eax
}
}

char subsir (char *c1, char *c2) 
{
_asm {
mov ecx, c1
mov edx, c2
mov edi, 0
mov esi, 0
start: cmp [edx + edi], 0
je end
mov esi, 0
mov eax, [edx + edi]
cmp eax, [ecx + esi]
  .....

这是一个旨在比较2个单词的程序的第一部分。

我遇到的问题是当我做的时候

 mov eax, [edx + edi]

eax接收地址而不是实际值。 我通过

测试了这个
 cmp eax, 97

应该激活JE指令(97是'a'的ASCII代码)但它没有。如果我做

      cmp [edx + edi], 97

它确实激活了JE跳跃。

如果你能告诉我我做错了什么以及如何将实际价值放在EAX而不是地址上,我将非常感激。

1 个答案:

答案 0 :(得分:1)

不,它实际上是在[edx + edi]读取内存。问题是它一次读取32位。哪个不好,你正在比较字符串内容。这需要一次比较一个字节。修正:

start: cmp byte ptr [edx + edi], 0
je end
mov esi, 0
mov al, [edx + edi]
cmp al, [ecx + esi]