2022_11_2_计算机系统基础散题
深入理解计算机系统题目:
1 | arc_t *sp; // 使用typedef声明的数据类型 |
假设 sp 和 dp 的值分别存储在寄存器 %rdi 和 %rsi 中。对于表中的每个表项,给出实现指定数据传送的两条指令。其中第一条指令应该从内存中读数,做适当的转换,并设置寄存器 %rax 的适当部分。然后,第二条指令要把 %rax 的适当部分写到内存。在这两种情况中,寄存器的部分可以是 %rax、%eax、%ax 或 %al,两者可以互不相同。
记住,当执行强制类型转换既涉及大小变化又涉及 C 语言中符号变化时,操作应该先改变大小。
src_t | dest_t | 指令 | 解释 |
---|---|---|---|
long | long | movq (%rdi), %rax movq %rax, (%rsi) |
long是八个字节,也就是四个双字,所以用q |
char | int | movsbl (%rdi), %eax movl %eax, (%rsi) |
char转化成int需要进行字节长度拓展,而且char是有符号的,有符号拓展成有符号类型时,需要进行符号拓展 |
char | unsigned | movsbl (%rdi), %eax movl %eax, (%rsi) |
char有符号数拓展成无符号型类型的数据时,需要注意,先进行符号拓展,然后转化成无符号数时,只是解释发生改变,机器数并不变 |
unsigned char | long | movzbl (%rdi), %eax movq %rax, (%rsi) |
无符号数进行零拓展 |
int | char | movl (%rdi), %edx movb %al, (%rsi) |
有符号数截断 |
unsigned | unsigned char | movl (%rdi), %al movb %al, (%rsi) |
截断是直接截断,机器数都是一样的,有无符号只是解释不同 |
char | short | movsbw (%rdi), %ax movw %ax, (%rsi) | 符号拓展 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 wellorbetter's blog!
评论