可能重复:
x86 转换为小写程序集
该程序是将二维字符数组转换为小写 Quickie 编辑:我正在使用 Visual Studio 2010
int b_search (char list[100][20], int count, char* token)
{
__asm
{
mov eax, 0 ; zero out the result
mov esi, list ; move the list pointer to ESI
mov ebx, count ; move the count into EBX
mov edi, token ; move the token to search for into EDI
MOV ecx, 0
LOWERCASE_TOKEN: ;lowercase the token
OR [edi], 20h
INC ecx
CMP [edi+ecx],0
JNZ LOWERCASE_TOKEN
MOV ecx, 0
在我的 OR 指令中,我试图将包含要标记的地址的寄存器更改为全部小写,我不断收到未处理的异常......访问冲突,并且没有括号,任何内容都不会小写。稍后在我的代码中
LOWERCASE_ARRAY: ;for(edi = 0, edi<ebx; edi++), loops through each name
CMP ecx, ebx
JGE COMPARE
INC ecx ;ecx++
MOV edx, 0; ;edx = 0
LOWERCASE_STRING: ;while next char != 0, loop through each byte to convert to lower case
OR [esi+edx],20h ;change to lower case
INC edx
CMP [esi+edx],0 ;if [esi+edx] not zero, loop again
JNZ LOWERCASE_STRING
JMP LOWERCASE_ARRAY ;jump back to start case change of next name
并且OR
那里的指令似乎工作得很好,所以我不知道为什么第一个不起作用。另外,我正在尝试转换几个字符串。
在我完成一个字符串后,任何想法我将如何进入下一个字符串(如list[1][x]
,list[2][x]
等...)我尝试添加 20 ,[esi+20*ecx+edi]
但这不起作用。我可以就如何进行获得建议吗?