1 頁 (共 1 頁)

問問8051的問題

文章發表於 : 週三 2月 05, 2003 1:13 am
smb
  這個…小弟因為專題的需要,所以得將8051的程式翻成EM78的,現在遇到一些瓶頸,so來這裡討救兵了,不知道有沒有人能幫我一下,感激不盡囉∼。
SHOW_BG:
  MOV DPTR,#PAGE1
  ↓↓↓↓忽略↓↓↓↓
  MOV R2,#16
SWLOP2:
  XRL A,A;清除A內容
  MOVC A,@A+DPTR
  CALL DATA_W;輸出副程式
  INC DPTR
  DJNZ R2,SWLOP2
  JMP SHOW_BG
  ↓↓↓↓忽略↓↓↓↓
PAGE1:
  DB 000h,001h,002h,003h,004h,005h…………
  DB 010h,011h,012h,013h,014h,015h…………
我知道這是索引定址,不過那個"#PAGE1"跟,"00h,001h……"這兩種用法好奇怪,沒見過書上這麼用過,請問這段執行起來是陸續將000h、0001…∼015h等16個數字丟進A嗎?還是……?

文章發表於 : 週三 2月 05, 2003 1:45 am
RogerShih
應該是把 A 的內容加上 DPTR 所指位址的內容丟進 A, 交給 DATA_W 輸出吧.

# 應該是像 x86 組語的 offset 虛擬指令吧 :aa:

文章發表於 : 週三 2月 05, 2003 2:23 am
smb
  嗯,Roger兄您說的我是知道的,但A的內容已經用XRL A,A清除過了,所以實際上效果應該只有輸出DPTR,先謝謝您的回答 :)
  大半夜的,腦筋也不太清楚,呵呵,我怕我問的很莫名其妙,希望大家海涵。
  這行"MOV DPTR,#PAGE1 ",我不曉得這行究竟丟了什麼東西到DPTR﹙資料指標暫存器﹚裡,#是代表常數。而"DB 000h,001h……",我不曉得可以用逗點連接一堆常數。所以我不曉得究竟是怎麼將Page那一堆數字丟到A…,總之,我暈了 :aa: ,搞不清楚了。

文章發表於 : 週三 2月 05, 2003 2:28 am
RogerShih
很簡單, MOV DPTR,#PAGE1 , 是把 PAGE1 的位址傳給 DPTR, 然後在後面不是有 inc DPTR 嗎?後面的MOVC A,@A+DPTR 這行是把 DPTR 這個位址所指的資料抓出一個 BYTE 給 A.

後面的 DB 是宣告資料存放格式, 後面的就照順序 1Byte, 1Byte 的存放.

文章發表於 : 週三 2月 05, 2003 11:23 am
smb
哦∼ :o ,原來是醬子的ㄚ…對噢,是"位址",哈哈哈∼我好像懂了 :ho: ,謝謝Roger兄! :oops: