Try   HackMD

2018q3 第 9 週測驗題 (上)

測驗 1

假設 %rax 暫存器內含值為 0x100,而且 %rbx 暫存器內含值為 0x10,那麼在 movq 2(%rax,%rbx,4), %rcx 這道指令執行後,%rcx 暫存器內含值應該為何?

作答區

Q2 = ?

  • (a) 0x142
  • (b) 0x112
  • (c) 0x124
  • (d) 存於記憶體位址 0x124 的 64-bit 數值
  • (e) 存於記憶體位址 0x142 的 64-bit 數值
  • (f) 存於記憶體位址 0x112 的 64-bit 數值
  • (g) 沒有固定結果

測驗 2

考慮以下組合語言程式:

leaq (%rax, %rbx), %rcx
subq %rax, %rcx
subq %rbx, %rcx

當執行後,狀態碼 ZF 和 SF 的可能數值為何?

作答區

Q5 = ?

  • (a) ZF = 0, SF = 0
  • (b) ZF = 1, SF = 0
  • (c) ZF = 0, SF = 1
  • (d) ZF = 1, SF = 1

測驗 3

考慮以下 C 程式:

long foo(long x, long y) {
    while (x >= 0) {
        y -= 2; x += y;
    }
    return x;
}

在忽略 integer overflow/underflow 的前提,在下方找出可能的組合語言輸出。

  • X
foo:
    cmpq $0, %rdi
    jl end
    subq $2, %rsi
    addq %rsi, %rdi
    jmp foo
end:
    movq %rdi, %rax
    ret
  • Y
foo:
    cmpq $0, %rdi
    jge end
start:
    subq $2, %rsi
    addq %rsi, %rdi
    jge start
end:
    movq %rdi, %rax 
    ret
  • Z
foo:
    addq $0, %rdi
    jmp middle
start:
    subq $2, %rsi
    addq %rsi, %rdi
middle:
    jge start
end:
    movq %rdi, %rax 
    ret

作答區

Q3 = ?

  • (a) X Y
  • (b) X Z
  • (c) Y Z
  • (d) Y