重複の可能性:
x86 を小文字のアセンブリに変換
このプログラムは、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
指示は完全に機能しているように見えるので、最初の指示が機能しない理由がわかりません。また、いくつかの文字列を変換しようとしています。
1 つの文字列を終了した後、次の文字列に移動する方法についてのアイデア ( list[1][x]
、list[2][x]
など) のように 20 を追加しようとしまし[esi+20*ecx+edi]
たが、うまくいきません。進め方についてアドバイスをもらえますか?