2015-11-05 166 views
2

奇數我假定使用匯編語言(ARM 6)減半的整數,例如42,邏輯右移可用於產生21但可能有人解釋然後如何21可以減半給我10.5?我不確定「幕後」處理小數值的情況。分割用匯編語言

更新

我想真正的問題是:是LSR用於部門或只是位右移?如果是後者,那麼邏輯換檔的應用是什麼?

+0

一旦要使用浮動點,所述計算機不再使用正常寄存器('eax','ebx'等)。相反,它使用浮點寄存器,所以搜索「浮點彙編」可能會幫助你。 (我從來沒有使用過浮點寄存器,所以不幸的是我不能很容易地將它作爲答案,但祝你好運!) – Numeri

+0

你可以切換到定點並在零指令中執行該除法,但是這取決於進一步的代碼來解釋這個數字的意圖。 – harold

回答

3

一個整數除法不能導致十進制/浮點數。如果你想得到這個結果,你必須將數字轉換爲浮點數,然後使用浮點除法指令。事實證明,浮點數比整數有totally different representation in binary,因此,移位對浮點數不起作用。

是LSR打算分割還是隻是將位移到右邊?

爲什麼不能兩者兼而有之? LSR旨在按照名稱的含義轉換位。結果向右移位與無符號整數除2相同(與向右移十進制數相同,除以10)。

如果是後者,那麼Logical Shifts的應用是什麼?

有邏輯的變化很多應用。 Here是幾個例子。

+0

但是我不明白在將奇數除以2時做無符號整數除法的要點。 – tommyd456

+0

它被稱爲整數除法,你在學校做過:結果是商和你剛剛移動的位是餘數。 – m0skit0

1

LSR只是右移位(邏輯移位)。如果你的號碼是無符號的,你可以使用2的LSR作爲div。 但是如果你需要將div除以2來得到有符號數,你應該使用ASR(算術移位)。