2012-10-07 4 views
0

Я пытаюсь сравнить 2 разных символа в сборке (вызов функции сборки в программе C). Один из символов принадлежит структуре, а другой передается при вызове функции.'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 составляет 83, тогда как 10 (% ЭОД) является 21315. Если я распечатать их как символы, как представляется, 'C'. Есть ли способ конвертировать 21315 в 83?

+0

Каковы параметры find_course? –

ответ

2

Да: вы хотите использовать вместо этого movb 10(%edi), %al.

3

У вас просто проблемы с интерпретацией данных. Проверьте шестигранные значения цифры, которые вы имеете дело с:

Base 10  Base 16 
    83   53 
    21315  5343 

Как вы можете видеть, первый байт есть в обоих случаях 53. Вы просто читаете больше, чем один байт всюду - вот что означают суффиксы l в ваших инструкциях. Вероятно, вы хотите читать меньше, чем это.

+0

Urmmmm, что я должен здесь делать? Я не совсем понимаю. – rlhh

+2

@ user1043625 вы должны узнать о типах данных и ширине битов целых чисел. –