【问题标题】:'C' appearing as 2 different values?'C' 显示为 2 个不同的值?
【发布时间】:2012-10-07 05:17:21
【问题描述】:

我正在尝试比较汇编中的 2 个不同字符(在 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?

【问题讨论】:

  • find_course的参数是什么?

标签: c assembly att cmp


【解决方案1】:

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

 Base 10      Base 16
   83           53
  21315        5343

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

【讨论】:

  • Urmmmm,我想在这里做什么?我真的不明白。
  • @user1043625 你应该了解整数的数据类型和位宽。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多