假设变量sp和dp被声明为类型
src_t *sp; dest_t *dp;
这里src_t和dest_t是用typedef声明的数据类型。我们想使用适当的数据传送指令来实现下面的操作
*dp=(dest_t) *sp;
假设sp和dp的值分别存储在寄存器社%rdi和%rsi中。对于表中的每个表项,给出实现指定数据传送的两条指令。其中第一条指令应该从内存中读数,做适当的转换,并设置寄存器%rax的适当部分。然后,第二条指令要把%rax的适当部分写到内存。在这 两种情况中,寄存器的部分可以是%rax、%eax、%ax或%al,两者可以互不相同。
记住,当执行强制类型转换既涉及大小变化又涉及C语言中符号变化时,操作应该先改变大小。
src_t | dest—t | 指令 |
long | long | movq(%rdi),%rax movq %rax,(%rsi)
|
char | int |
|
char | unsigned |
|
unsigned char | long |
|
int | char |
|
unsigned | unsigned char |
|
char | short |
|