# linux2021: bitter-bits ## 測驗 $\alpha - 1$ 延伸問題 2. x86_64 指令集具備 rotr 和 rotl 指令,上述 C 程式碼經過編譯器最佳化 (例如使用 gcc) 後,能否運用到這二個指令呢? Ans: The generated assembly code shows `ror{bwlq}` and `rol{bwlq}` are used ```asm= rotr64: pushq %rbp : rorq %cl, %rdx : ret rotl64: pushq %rbp : rolq %cl, %rdx : ret ``` The command: ```sh= gcc -S -o asm.s alpha.c ``` ## 測驗 $\beta - 1$ 延伸問題 1. 說明上述程式碼的運作原理 ```c= uintptr_t mask = alignment - 1; if ((alignment & mask) == 0) { return (sz + mask) & !mask; } return (((sz + mask) / alignment) * alignment); ``` Ans: 當對齊值與「對齊值減去 1」的 AND 運算之後的結果為零,表示「對齊值」是 2 的零或正整數次方,比如 2^5^ 的例子: ``` 0010 0000 (十進位的 32) & 0001 1111 (32 - 1 = 31) = 0000 0000 ``` 接下來的 ``` (sz + mask) & !mask ``` 將 sz 加上 mask (右側全為 1) 強迫進一位,再用 !mask (左側全為 1 ,右側全為 0) 清除該右側的全部位元。 :::warning TODO: 思考二補數原理,寫出功能相等的程式碼 :notes: jserv :::