我正在学习MOV
汇编中的数据移动()。
我尝试编译一些代码以在 x86_64 Ubuntu 18.04 机器上查看程序集:
typedef unsigned char src_t;
typedef xxx dst_t;
dst_t cast(src_t *sp, dst_t *dp) {
*dp = (dst_t)*sp;
return *dp;
}
src_t
在哪里unsigned char
。至于,dst_t
我试过char
,short
和. 结果如下所示:int
long
// typedef unsigned char src_t;
// typedef char dst_t;
// movzbl (%rdi), %eax
// movb %al, (%rsi)
// typedef unsigned char src_t;
// typedef short dst_t;
// movzbl (%rdi), %eax
// movw %ax, (%rsi)
// typedef unsigned char src_t;
// typedef int dst_t;
// movzbl (%rdi), %eax
// movl %eax, (%rsi)
// typedef unsigned char src_t;
// typedef long dst_t;
// movzbl (%rdi), %eax
// movq %rax, (%rsi)
我想知道为什么movzbl
在每种情况下都使用?不应该对应dst_t
吗?谢谢!