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)中