汇编(masm):内联asm,将偏移量转移到esi

时间:2016-01-28 19:55:11

标签: assembly x86 masm inline-assembly

我写了一个独立的.asm程序,我可以在我的C ++控制台应用程序中使用它。任务是确定这个词是否是回文。该过程有两个参数。第一个是char数组的起始地址(第一个元素),第二个是表示该数组的元素数。对于回文结果为1,对于非回文结果为0。

; Prototype in .cpp: extern int method(char* string, int number);

public method

.code
method proc
push ebp
mov ebp, esp
pushf
push ebx
push ecx
push edx
push esi
mov eax, 1
mov ecx, [ebp+12]
mov esi, [ebp+8]
mov edi, [ebp+8]
add edi, ecx
sub edi, 1
shr ecx, 1

while_loop:
    mov dl, byte ptr[edi]
    mov dh, byte ptr[esi]
    cmp dl, dh
    je continue
    mov eax, 0
    jmp notPal

    continue:
    inc esi
    dec edi
loop while_loop

notPal:

pop esi
pop edx
pop ecx
pop ebx
popf
pop ebp
ret
method endp
end

这很好用,所以我想重写相同的代码并在Visual Studio(C ++)的源代码中使用它作为内联汇编函数

int method(char* string, int number){
    __asm{
        mov eax, offset string
        mov esi, eax  // Error C2415 Improper operand type

    }

}

我试图以不止一种方式将数组的偏移量移动到esi / edi,并且无法做到。这可以通过内联汇编来实现吗?

0 个答案:

没有答案