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

标签 c assembly att cmp

我正在尝试比较汇编中的 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?

最佳答案

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

 Base 10      Base 16
   83           53
  21315        5343

如您所见,在这两种情况下,第一个字节都是 53。您只是碰巧在任何地方都读取了不止一个字节 - 这就是指令中的 l 后缀的含义。您可能想阅读的内容少于此。

关于c - 'C' 显示为 2 个不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766306/

相关文章:

c - 如何释放只包含指针的结构

video - 中断 10h

c - 程序集 64 位无效有效地址

assembly - addq 与 64 位立即数?

assembly - 如何从汇编中打印 float ?

c - 了解 valgrind memcheck 工具中的内存泄漏类型

c - 如何使用递归打印两个数组,一个接一个(即不同时)?

ios - 如何在 xcode 6 中查看汇编代码

c - 拆解二元炸弹第三阶段逻辑难理解

c - 强制编译器符合 C99 标准