我写了一个独立的.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,并且无法做到。这可以通过内联汇编来实现吗?