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

Visual studio 2010 汇编程序中的字符串问题[初学者],visual-studio-2010,char,intel,assembly,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

我在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]
  .....
这是用来比较两个单词的程序的第一部分

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

 mov eax, [edx + edi]
eax接收的是地址,而不是实际值。 我做了一个测试

 cmp eax, 97
它应该激活JE指令(97是“a”的ASCII码),但它没有。如果我这样做

      cmp [edx + edi], 97
它确实激活了JE跳转


如果您能告诉我我做错了什么,以及如何在EAX中输入实际值A而不是地址,我将不胜感激。

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

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