我正在尝试比较汇编中的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吗?
答案 0 :(得分:3)
您只是遇到了一些数据解释问题。查看您正在处理的数字的十六进制值:
Base 10 Base 16
83 53
21315 5343
如您所见,在这两种情况下,第一个字节都有53
。你正好只读了一个字节到处 - 这是你的指令上的l
后缀的意思。你可能想阅读不到那个。
答案 1 :(得分:2)
是:您想改用movb 10(%edi), %al
。