[求救文]嗚~這程式應該怎樣改 8051的程式碼Orz..

XD使者

高級會員
已加入
5/4/05
訊息
866
互動分數
0
點數
16
其實....10進制可以用16進制減法...
但是...給個提示...
他還是用ADD...不是用DEC
忘了補充XD
有個指令可以把16進制轉10進制@@"
 

sauce3794

一般般會員
已加入
10/26/07
訊息
94
互動分數
0
點數
6
mov R1 064H?
是要把R1放到64H的記憶體上面嗎?
但是老師要我們做的是要放在30~32H裡面說
直接對累加器跑迴圈比較快吧
但是不知道怎嚜做阿
我試過的 但是重點是要把它改成10進位
就是遞減9次以後進位!
但是他還是跳16次= =
16進位倒數我還可以用偷吃步的方式(好像比較快)
但是現在就是不行改資料庫裡的東西(access學到走火?)
而且程式中的
mo...

老師要你們把計數值放再記憶體(30H~31H) 裡面存取
是比較慢而不是比較快 (老師錯了)
因為經常存取的資料應放在cache或暫存器速度才會快
另外我舉 64H 的例子是計數值 (10進位的100), 可以放在你們老師規定的 (30H ~ 31H中)

你要將計數器改成10進位計數
那只要再迴圈中加一些邏輯判斷
也就是倒數到NumTab 的 0 時
前一位數減一然後再將前一位數重新Display就行了



例:
199 198 197 196 ... 191 190 189

190 跳 189 的做法(虛擬碼) :

代碼:
index 初值為指向個位數的指標
if  (判斷出index位數為零)
{
   loop:          
          if ( [index+1] 位數為0)   註 : 若目前index指標指向個位數則 index+1後 index就指向十位數)
      {
             index++         
             Jump loop
      }
   [index+1] 位數減一 

   重新顯示[index+1] 位數並將 [index] 位數改成顯示9(十進制)
}

此種做法不必作16進制與10進制
若是要使用進制轉換那每減一次需作一次進制轉換,速度將慢很多,隨然肉眼看不出來...
 
最後編輯:
▌延伸閱讀