0

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

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?

4

2 回答 2

3

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

 Base 10      Base 16
   83           53
  21315        5343

如您所见,53在这两种情况下都有第一个字节。您只是碰巧在各处读取的不仅仅是一个字节 - 这就是l您指令上的后缀的含义。你可能想读的比这少。

于 2012-10-07T05:19:58.467 回答
2

是的:你想movb 10(%edi), %al改用。

于 2012-10-07T05:20:19.050 回答