프로그래밍

 3198, 1/160 회원가입  로그인  
   k1990121
   http://없음
   어셈관련 질문2

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6283 [복사]


#include <stdio.h>


int m_cmp(char* a, char* b)
{
        int cnta = 0;                                                // a의길이
        int cntb = 0;                                                // b의길이
        _asm
        {
                mov edi, a
L3:
                cmp [edi], 0x00
                je L1

                inc edi
                inc cnta
                jmp L3
        }
L1:
                printf("%d\n", cnta);
        _asm
        {
                mov edi, b
L4:
                cmp [edi], 0x00
                je L2

                inc edi
                inc cntb
                jmp L4
        }
L2:

                printf("%d\n", cntb);

                _asm
                {
                        mov eax,ctna            
                        cmp eax,cntb            // a와 b의 길이비교 큰수 반복

                        jae L5                 // a가 같거나 클 경우
                        
                        mov eax,cntb          // b가 클 경우 eax를 b로 바꿈


L5:
                        mov edi, a
                        mov esi, b
                        
L9:
                        cmp eax,0x00           // 반복 횟수가 0이 되면
                        je L6
            
                        dec eax
                        
                        cmp [esi],[edi]
                        
        ★★★★★                ja L7
                        jb L8
                        je L9

                        


                }


L7:    return 1;
L8:           return -1;
L6:    return 0;
}


                

int main()
{
        char str1[10] = "Hello";                        // 문자열 1        
        char str2[10] = "He1lo";                        // 문자열 2
        char str3[10] = "Hpllo";                        // 문자열 3
        int a;                                                                // m_cmp의 리턴값
                                                                
        a = m_cmp(str1,str2);              // str1이 더 클 경우
        printf("%d\n", a);                                   // 1 리턴

  


        return 0;
}


★ 5개 되있는 부분에서..오류가 발생하는데...또 뭐가 잘못된건지 못잡고있습니다..

  Hit : 4175     Date : 2012/12/15 12:43



    
supershop 그 위에 있는 cmp [esi], [edi] 가 문제네요.
memory와 memory 사이의 연산은 한 번에 할 수 없습니다.
mov esi, [esi]
cmp esi, [edi]
식으로 나누어야 합니다
2012/12/18