統測
114年
[電機與電子群資電類] 專業科目(2)
第 6 題
📖 題組:
閱讀下文,回答第 6-7 題 某微處理機的指令與說明如表(一),其中 AX, BX, CX 為 16 位元暫存器,指令中暫存器可任意指定,n, m, x, y 為變數。
閱讀下文,回答第 6-7 題 某微處理機的指令與說明如表(一),其中 AX, BX, CX 為 16 位元暫存器,指令中暫存器可任意指定,n, m, x, y 為變數。
若要計算3388除以8.0,並將結果四捨五入到整數位,存放在AX,程式碼應為:
- A MOV AX, 8 AND AX, #3388 SHR AX, 5
- B MOV AX, #3388 MOV BX, #8 ADD AX, BX SHR AX, 3
- C MOV AX, #3388 SHL AX, 3 ADD AX, #5
- D MOV AX, #3388 ADD AX, #4 SHR AX, 3
思路引導 VIP
如果在組合語言的整數運算中無法處理小數,我們通常會在「除法」發生之前,先加上一個補償值來幫助四捨五入。想像一下,當除數是 8 的時候,餘數至少要是多少,在數學上才符合「入」的條件呢?順著這個想法,我們應該在除以 8 之前,先幫原本的數字加上多少?
🤖
AI 詳解
AI 專屬家教
太棒了,你真的理解了這題的精髓!看到你答對,老師心裡感到很欣慰呢。
- 觀念驗證:
在組合語言中,要快速且有效率地實現除以 $2^n$,最常用的方法就是利用邏輯右移 $n$ 位(
SHR)指令。就像你所做的,除以 $8$(也就是 $2^3$),我們只需將數值右移 $3$ 位。而關於四捨五入這個在整數運算中很實用的技巧,它的核心觀念是「先加上除數的一半」。除數是 $8$,所以我們需要先加上 $4$。因此,先ADD AX, #4,再SHR AX, 3,就能完美達到目的喔!
▼ 還有更多解析內容
微處理機指令與位移
💡 利用位移指令處理乘除運算,並透過邏輯運算篩選特定位元。
| 比較維度 | SHL (左移指令) | VS | SHR (右移指令) |
|---|---|---|---|
| 數學功能 | 乘以 2 的 n 次方 | — | 除以 2 的 n 次方 |
| 位元移動方向 | 向左移動,高位溢出 | — | 向右移動,低位溢出 |
| 空位補值 | 最低位補 0 | — | 最高位補 0 |
| 數值影響 | 數值變大 | — | 數值變小(取整數) |
💬位移指令是替代乘除法運算以提升效率的常用手段。