# MIPS Multiplication 在MIPS組合語言中,乘法涉及到使用HI和LO register 來存儲64位的乘積。以下是有關MIPS中乘法的一些相關信息: * HI和LO register : HI和LO register 是用來存儲64位乘積的兩個32位 register 。HI register 存儲乘積的最高32位,而LO register 存儲乘積的最低32位。 * mult和multu指令: 這兩個指令用於進行 Signed 和 Unsigned 的32位乘法。 * `mult rs, rt` 和 `multu rs, rt` 的執行會在HI和LO register 中生成64位的乘積。 ## Unsigned Multiply  解釋: * 這種乘法遵循類似十進制乘法的過程,但使用二進制數字(0 和 1)。 * 乘數的每一位確定是放置被乘數的一份複製(如果是 1)還是放置 0(如果是 0)。 * 最終結果,二進制為 01001000,對應到十進制的 72。 在二進制中,乘法的規則簡化為: * 0對應於將0放在該位上(0 × 被乘數) * 1對應於將被乘數的一份複製放在該位上(1 × 被乘數) ### 乘法觀察 每位兩步驟: 由於multiplier和產品 register 合併,所以每位需要兩個步驟。這是因為每位都需要進行相乘和將結果加到總和中的步驟。 Hi和Lo register : MIPS register 中的Hi和Lo分別代表了產品 register 的左半部分和右半部分。這對應到MIPS指令MultU,其中U表示Unsigned Multiply。 Signed Multiply: 最簡單的解決方法是將兩個數都當作正數處理,然後在最後根據需要對產品進行補碼。 使用2的補碼的定義,可以在運算過程中對部分乘積進行符號擴展,最後進行減法操作。 Booth's Algorithm是一種優雅的方式,使用相同的硬體結構,以更有效的方式實現 Signed Multiply,同時節省時脈。 ## Signed Multiply  解釋: * 乘法過程與Unsigned Multiply類似,但需要額外處理符號位和2的補碼。 * 被乘數是1001,乘數也是1001。當兩者相乘時,得到的部分乘積為11111001。 * 進行進一步的位移和加法操作,最終得到結果00110001,這對應於十進制的49。 在 Signed Multiply 中,有兩條規則: * 規則1:被乘數進行符號擴展(Sign Extension): 確保被乘數進行符號擴展,以使其符號位擴展到更高的位數。 * 規則2:乘數的符號位: * 如果符號位(s)為0,則乘數為正,乘法運算將進行正常的乘法。 * 如果符號位(s)為1,則乘數為負,乘法運算將將乘數視為負數進行運算。 * 規則2確保在 Signed Multiply 中正確處理符號位。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.