我47,二進制是0010 1111我需要在二進制0000 0100和7二進制0000 0111拆分以二進制個位數2個位數二進制
我拆47,所以我得到4看到this answer,但我不知道,因爲Intel 8085沒有div指令,我必須通過連續的減法來劃分,我怎樣才能獲得模數?
我47,二進制是0010 1111我需要在二進制0000 0100和7二進制0000 0111拆分以二進制個位數2個位數二進制
我拆47,所以我得到4看到this answer,但我不知道,因爲Intel 8085沒有div指令,我必須通過連續的減法來劃分,我怎樣才能獲得模數?
如果你的處理器沒有除法指令(或BCD轉換指令,這是另一種方式),你只需要重複減法。造成這種情況的僞代碼會去是這樣的:
val = 47
units = val
tens = 0
loop:
if units < 10 goto done
units = units - 10
tens = tens + 1
goto loop
done:
;; tens = 4, units = 7.
道歉的,而BASIC編程風格在那裏,我只是試圖讓它更近些它會怎樣看彙編語言。否則,我會用一個while
循環:-)
芹苴模量是什麼在units
可變左一旦低於10 MB。
爲了完整(以及可能的加分,如果這是一個家庭作業,眉來眼去,卿卿我我的),因爲一個字節可以處理多達255:
val = 247
units = val
tens = 0
hundreds = 0
loop1:
if units < 100 goto loop2
units = units - 100
hundreds = hundreds + 1
goto loop1
loop2:
if units < 10 goto done
units = units - 10
tens = tens + 1
goto loop2
done:
;; hundreds = 2, tens = 4, units = 7.
爲了證明這種方法的作品,你可以試試下面的Python代碼:
val = 47
units = val
tens = 0
while units >= 10:
units = units - 10
tens = tens + 1
print "Tens = %d, Units = %d"%(tens,units)
這確實輸出:
Tens = 4, Units = 7
在使用這些值來驅動LED元件的而言,簡單的查找表可能是最容易的。構建一組需要寫入兩個8位存儲器地址的值,然後使用該數字查找寫入設備的值。
我將使用簡化的七段LED(加小數點),因爲它更容易理解:
a
---
f | | b
-g-
e | | c
--- . h
d
讓我們在這個例子中,你寫一個字節abcdefgh
到存儲器映射位置說並且該字節中的位控制着哪些段。
爲不同的數字值(不含小數點)是(未經測試,因此可能需要一些調整):
abcdefgh
0 11111100
1 01100000
2 11011010
3 11110010
4 01100110
5 10110110
6 10111110
7 11100000
8 11111110
9 11110110
給出的數值四,您只需仰望字節在偏移4該表(使用表格的基地址和值的簡單添加),然後從內存中提取該字節並使用它來設置LED段。這個值01100110
將設置段b
,c
,f
和g
,給你:
| |
---
|
你的特殊情況是有點複雜,因爲你有一個十五段LED,並有寫一個字,而不是字節,但理論是完全一樣的。
有你需要寫每個數字,用我上面的算法計算出的值,以抵消成表值的表。
我的建議是考慮你總是有兩個十六進制數字解決方案(在這個例子中,你使用的4和7,但它可能是一個A和E)。 *和7是0111,而不是寫入的1111
這是一個提示,即1個十六進制數字恰好對應4個二進制數字。 因此,例如0xA245是1010(A)0010(2)0100(4)0101(5)。
最後,我的建議是僅執行4個比特的右旋轉,以獲得高半字節(4)。要獲得7,只需在高半字節(0x0F)處將字節掩碼爲0。
在C這將是這樣的: highNibble =值>> 4; lowNibble =值& 0x0F;
我希望我明確自己,並幫助您解決此問題。
你基本上處理BCD representation這裏。從二進制轉換到BCD有很多資源,在這之後,獲得單個數字非常容易。
例如,使用these instructions將二進制轉換爲bcd,然後簡單地遍歷BCD數字的子地址,將每個數字讀取爲一個獨立的字節。代碼簡單,快速,重點突出。
謝謝你,但是這並沒有回答我的問題有關的連續減法僞師歌廳一模... – Ashir
@Ashir:我建議你再看看。模數是所有重複減法後單位變量中剩下的。 – paxdiablo
是的,你是對的,但我沒有十進制數(47)我把它作爲8位二進制(0010 1111)在累加器中。我需要拆分0010 1111,以便在15段顯示器上顯示4(0000 0100)和7(0000 0111)。您的解決方案適用於不是二進制的十進制數,另外,我不知道將在累加器中存儲什麼數字。 – Ashir