![]() |
發(fā)布時間: 2021-11-16 07:41
正文摘要:這個代碼看不懂,有人可以給講一講思路嗎 比如Cy=1時 R5=00H 那么 MOV A,R5 ADDC A,R5 MOV R5,A 執(zhí) ... |
這個還是比較簡單的,如果是開方,三角計算,則更難。 |
yzwzfyz 發(fā)表于 2021-11-18 16:13 看了你寫的解答,令我驚嘆萬分,為啥我就寫不出這樣的,如此層次清晰的,感覺只要識字的就能看懂的,答復呢? |
R67是16位二進制數(shù),R345是BCD結(jié)果。 1、HB2:將結(jié)果清0,準累計結(jié)果。 2、HB3:先將R67的最高位移出,或0或1。 3、移出的0或1,放入結(jié)果的末位,進行BCD調(diào)整。 理解:假設(shè)最高位是1(也就是你舉例的),它將被移入CY,通過ADDC,被加入到R5的末位中,未來還會被向高位移動15次,并且還會被BCD調(diào)整15次,加上本次,一共被移位、調(diào)整16次。 每左移一次相當于是二進制乘2,16次移動是還原成原值(原來在第幾位的還是在第幾位),這個很好理解。而每次乘2后會被進行BCD調(diào)整,就變成了10進制了。進行16次移位16次BCD調(diào)整,是否能正確地轉(zhuǎn)換,就不太好理解了。 不過你可以做個試驗:R67=1000000000000000,16次操作后看看是否 R345=032768。如此,便于你理解。 第1234次操作后, R345=0008, 第5次操作后, R345=0016,(移位變成0010H,BCD調(diào)整后變成0016) 第6次操作后, R345=0032,(移位變成002CH,BCD調(diào)整后變成0032) 第7次操作后, R345=0064,(移位變成0064H,BCD調(diào)整后變成0064) 第8次操作后, R345=0128,(移位變成00C8H,BCD調(diào)整后變成0128) ...... |
我的做法是這樣的。 做一個表:分別對應16位中各個位的BCD值,B15...B0,如果該位是1就加這個值(BCD加法),是0就不加,這樣很好理解。 B15:032768 B14: 016384 B13:008192 …… B0 : 000001 |
yzwzfyz 發(fā)表于 2021-11-18 15:12 ?? 是說我么? 我補充一下, 這個應該是中間步驟, 或者整個代碼都是匯編寫的。 R6, R7 是原始的16位2進制數(shù), 范圍是: 0~65535 轉(zhuǎn)譯出來的 十是進制BCD 保存在 R3,R4,R5 由于,沒有把他們移回R5,R6,R7 不在傳參位,所以,故計要么還有一段代碼,要么就是整個代碼就是匯編寫的,所以不需要放到傳參位。 |
要說清楚,是哪16位,轉(zhuǎn)換成放在哪里。 |
188610329 發(fā)表于 2021-11-16 14:38 好的,謝謝,我去查查相關(guān)資料 |
講就是: 2進制除法,就是這么一個計算過程。16位就是16次,32位就是32次, 說白了,就是利用加法器實現(xiàn)除法。你看看2進制運算方面的資料就能看明白了。說要說半天了。 |
Powered by 單片機教程網(wǎng)