'C'显示为2个不同的值?

时间:2012-10-07 05:17:22

标签: c assembly att cmp

我正在尝试比较汇编中的2个不同的char(在C程序中调用汇编函数)。其中一个char属于一个struct,另一个在调用函数时传入。

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(%edi)为21315.如果我将它们打印为字符,则两者都显示为“C”。有什么方法可以将21315转换为83吗?

2 个答案:

答案 0 :(得分:3)

您只是遇到了一些数据解释问题。查看您正在处理的数字的十六进制值:

 Base 10      Base 16
   83           53
  21315        5343

如您所见,在这两种情况下,第一个字节都有53。你正好只读了一个字节到处 - 这是你的指令上的l后缀的意思。你可能想阅读不到那个。

答案 1 :(得分:2)

是:您想改用movb 10(%edi), %al