作者j5307 (JJ)
看板ASM
標題[問題] 有關 index addressing
時間Wed Oct 12 23:24:30 2011
Write a program to get the x value from P1 and send x2 to P2,
continuously.
Solution:
ORG 0
MOV DPTR,
#XSQR_TABLE
MOV A,#0FFH
MOV P1,A ;P1 as INPUT PORT
BACK: MOV A,P1 ;GET X
MOVC A,@A+DPTR ;Count the addr.
MOV P2,A ;Issue it to P2
SJMP BACK
ORG 300H
XSQR_TABLE:
DB 0,1,4,9,16,25,36,49,64,81
END
有幾個地方不太明白
1. MOV P1,A 又MOV A,P1 為什麼要做兩次??
2. MOVC A,@A+DPTR 他如果這樣不就變成了 0FFH+0300H? 那A是??
3. MOV P2,A A不就一直不變怎麼跳啊= =?
這學期第一次學組語碰到好多問題~~~頭都快昏了
希望有高手能解答囉^^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.174.3.195
1F:推 ruemann:就說是從P1讀值輸出到P2,另外先把P1寫成FF是8051輸入PORT 10/13 06:59
2F:→ ruemann:的用法 10/13 06:59
3F:→ eentut:1. 先初始A值 以免讀到錯誤的值 10/13 09:21
4F:→ eentut:2. 先去了解DPTR是什麼吧 簡單而言 先以讀到的A值為index 10/13 09:23
5F:→ eentut:然後對應到XSQR_TABLE裡的值 再取出存到A 10/13 09:25
6F:→ eentut:3. 執行MOVC A,@A+DPTR這行時 A值就變了 10/13 09:26
了解 謝謝^^ 感覺蠻抽象的
※ 編輯: j5307 來自: 111.254.127.114 (10/15 15:04)