2012-10-07 3 views
0

나는 어셈블리에서 2 개의 다른 char (C 프로그램에서 어셈블리 함수를 호출)을 비교하려고한다. char 중 하나는 struct에 속하고 다른 하나는 함수를 호출 할 때 전달됩니다. 'C'가 2 개의 다른 값으로 나타 납니까?

struct node { 
    void *previous;  
    void *next; 
    unsigned int num;  
    unsigned int A;  
    unsigned int B; 
} 

node something; 
something.A = 'C'; //assume everything else is correct 

char A = 'C'; 
int func(char A){ }: 
find_course: 
    pushl %ebp 
    movl %esp, %ebp 
    subl $28, %esp 
    movl 8(%ebp), %ebx 
    movl 10(%ebp), %ecx 
    movl 16(%ebp), %edx 
    movl something, %edi 
    cmpl 10(%edi), %ebx 

.END: 
    leave 
    ret 

내가 GDB로 디버깅

는 %의 EBX 내가 문자로 그들을 밖으로 인쇄 할 경우, 모두 'C'로 표시 83 21315.입니다 (%의 EDI) (10) 반면입니다. 21315에서 83으로 변환 할 수있는 방법이 있습니까?

+0

find_course의 매개 변수는 무엇입니까? –

답변

2

예 : movb 10(%edi), %al을 대신 사용하고 싶습니다.

3

데이터 해석 문제가 발생했습니다. 당신이 상대하고있는 숫자의 16 진수 값을 체크 아웃 :

Base 10  Base 16 
    83   53 
    21315  5343 

당신이 볼 수 있듯이, 첫 번째 바이트는 두 경우 모두 53있다. 어디서나 단지 1 바이트 이상을 읽는 중입니다. 지침에 접미사가 붙는 것은 l입니다. 당신은 아마 그것보다 적은 것을 읽고 싶다.

+0

흠, 내가 여기서 무엇을해야 할까? 나는 정말로 이해하지 못한다. – rlhh

+2

@ user1043625 데이터 유형과 정수의 비트 폭에 대해 알아야합니다. –