计算机系统基础(一):程序的表示、转换与链接(第九周小测验)
1.以下有关IA-32和x86-64之间比较的叙述中,错误的是( )。
A.IA-32的通用寄存器为8/16/32位,而x86-64的通用寄存器为8/16/32/64位
B.(unsigned) long型变量在IA-32和x86-64中的长度都是64位(四字)
C.IA-32的通用寄存器有8个,而x86-64的通用寄存器有16个
D.IA-32的字长为32位,x86-64的字长为64位并兼容IA-32
B.(unsigned) long型变量在IA-32和x86-64中的长度都是64位(四字)
C.IA-32的通用寄存器有8个,而x86-64的通用寄存器有16个
D.IA-32的字长为32位,x86-64的字长为64位并兼容IA-32
2.以下有关x86-64寄存器的叙述中,错误的是( )。
A.128位的XMM寄存器从原来IA-32中的8个增加到16个
B.用来存放将要执行的指令的地址的指令指针寄存器为64位的RIP
C.任何浮点操作数都被分配在浮点寄存器栈(ST(0)~ST(7))中
D.基址寄存器和编址寄存器都可以是任意一个64位的通用寄存器
B.用来存放将要执行的指令的地址的指令指针寄存器为64位的RIP
C.任何浮点操作数都被分配在浮点寄存器栈(ST(0)~ST(7))中
D.基址寄存器和编址寄存器都可以是任意一个64位的通用寄存器
3.以下有关x86-64对齐方式的叙述中,错误的是( )。
A.int、float型数据必须按4字节边界对齐
B.long double型数据在内存占12字节空间(96位)
C.short型数据必须按2字节边界对齐
D.long、double、指针型数据必须按8字节边界对齐
B.long double型数据在内存占12字节空间(96位)
C.short型数据必须按2字节边界对齐
D.long、double、指针型数据必须按8字节边界对齐
4.以下有关x86-64传送指令的叙述中,错误的是( )。
A.相比IA-32,增加了movq指令,可传送64位数据
B.movl相当于movzlq,能将目的寄存器高32位清0
C.movzbq的功能是将8位寄存器内容零扩展为64位
D.pushq和popq分别对ESP寄存器减8和加8
B.movl相当于movzlq,能将目的寄存器高32位清0
C.movzbq的功能是将8位寄存器内容零扩展为64位
D.pushq和popq分别对ESP寄存器减8和加8
5.假定变量x的类型为int,对于变量y的初始化声明“long y=(long) x;”,其对应的汇编指令是( )。
A.movq %rdx, %rax
B.movslq %edx, %rax
C.movl %edx, %eax
D.movzlq %edx, %rax
B.movslq %edx, %rax
C.movl %edx, %eax
D.movzlq %edx, %rax
6.假定变量x的类型为long,对于变量y的初始化声明“int y=(int) x;”,其对应的汇编指令不可能是( )。
A.movslq %edx, %rax
B.movsql %rdx, %eax
C.movl %edx, %eax
D.movzlq %edx, %rax2
B.movsql %rdx, %eax
C.movl %edx, %eax
D.movzlq %edx, %rax2
7.以下是C语言赋值语句“x=a*b+c;”对应的x86-64汇编代码:
movslq %edx, %rdx
movsbl %sil, %esi
imull %edi, %esi
movslq %esi, %rsi
leaq (%rdx, %rsi), %rax
已知x、a、b和c分别在RAX、RDI、RSI和RDX对应宽度的寄存器中,根据上述汇编指令序列,推测x、a、b和c的数据类型分别为( )。
A.x—long, a—long, b—char, c—long
B.x—long, a—int, b—char, c—int
C.x—long, a—int, b—char, c—long
D.x—long, a—long, b—char, c—int
B.x—long, a—int, b—char, c—int
C.x—long, a—int, b—char, c—long
D.x—long, a—long, b—char, c—int
8.假定long型变量t、int型变量x和short型变量y分别在RAX、RDI和RSI对应宽度寄存器中,C语言赋值语句“t=(long)(x+y);”对应的x86-64汇编指令序列不可能是( )。
A.
B.
C.
D.
movswq %si, %rax
movslq %edi, %rdx
addq %rdx, %rax
B.
movswl %si, %edx
addl %edi, %edx
movslq %edx, %rax
C.
movswq %si, %rsi
movslq %edi, %rdi
leaq (%rsi, %rdi), %rax
D.
movswq %si, %rdx
leaq (%rdx, %rdi), %rax
9.以下关于x86-64过程调用的叙述中,错误的是( )。
A.前6个参数采用通用寄存器传递,其余参数通过栈传递
B.在通用寄存器中传递的参数,都存放在64位寄存器中
C.在栈中的参数若是基本类型,则被分配8个字节空间
D.返回参数存放在RAX相应宽度的寄存器中
B.在通用寄存器中传递的参数,都存放在64位寄存器中
C.在栈中的参数若是基本类型,则被分配8个字节空间
D.返回参数存放在RAX相应宽度的寄存器中
10.以下关于IA-32和x86-64指令系统比较的叙述中,错误的是( )。
A.对于返回地址,x86-64使用通用寄存器保存,而IA-32使用栈来保存
B.对于入口参数,x86-64可用通用寄存器传递,而IA-32需用栈来传递
C.对于64位数据,x86-64可用一条指令处理,而IA-32需多条指令处理
D.对于浮点操作数,x86-64存于128位的XMM中,而IA-32存于80位的ST(i)中
B.对于入口参数,x86-64可用通用寄存器传递,而IA-32需用栈来传递
C.对于64位数据,x86-64可用一条指令处理,而IA-32需多条指令处理
D.对于浮点操作数,x86-64存于128位的XMM中,而IA-32存于80位的ST(i)中