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