2017-03-07 94 views
-4

表達式:z = a + b * b-(36 /(b * b)/(1+(25 /(b * b))) 我不知道是什麼數據指示我應該爲Z80 CPU使用和以什麼順序我應該寫的代碼代碼來計算assemby中的某個算術表達式

+0

這是羅馬尼亞語課程嗎? –

+0

http://digital.ubm.ro/?download=2016aclab2.pdf –

回答

2

C = A + B:

ld a,A 
ld b,B 
add a,b ; a = C 

C = A * B爲68000 CPU:

MOVE.W D0,A 
MOVE.W D1,B 
MULS.W D1,D0 ; D0 = C 

等...檢查您的目標CPU指令指南,看看什麼樣的算術運算它直接實現,什麼樣的操作數可以用於他們,你有哪些可用的寄存器,以及它們的數據類型...

看起來像你不必寫通用數學表達式解析器(這會變得棘手很快,一旦在高中時我們在編程競賽中就完成了這個任務,起初我們就像是「什麼,5小時的單一任務,我將在30分鐘內完成」......然後在5小時後,沒有人代碼通過了完整的測試套件,最好是大約80%正確)。

所以,如果只計算這個特定的表達式,你可以手工「解析」它,將其簡化爲僅涉及單個操作和中間子結果之一的特定步驟。然後用你的指令一步一步地寫出來,就像你手動計算(也要確保你符合數學表達式計算規則,你知道哪些操作比其他操作有優先權嗎?括號會覆蓋任何內容,然後多個/ ,稍後添加/分,從左到右,但這是基礎學校數學的東西,所以除非你是10y.o.,否則你不應該問這個)。

如果您的CPU沒有除法或乘法指令,只需在循環中通過減法/加法來實現。這是非常蹩腳的表現,但如果你不得不問這個問題,那麼你不能指望你甚至會理解這些更高級的算法。

+0

吼,獅子! :) – Tommylee2k