该程序将2d char数组转换为小写 Quickie Edit:我正在使用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,如{{1但这不起作用。我可以获得有关如何进行的建议吗?
答案 0 :(得分:0)
一种可能性:
如果过程b_search
的参数存储为寄存器(寄存器调用约定),则覆盖第一个asm行中的list
指针,因为eax指向list
数组:
mov eax, 0 ; zero out the result
因为:
mov esi, list ; move the list pointer to ESI
应转换为:
mov esi, eax
尝试将第一行和第二行交换为:
mov esi, list ; move the list pointer to ESI
mov eax, 0 ; zero out the result