Re: [問題] 請教8051指令的問題
指令長度的規則為A/DPTR/C/Rn/Ri/AB不計算,因這些都有特別的指領支援
例如:
mov a, #data
有三個欄位,每個欄位可以用1byte表示,所以為3但a不算所以為2bytes
mov a, Rn
有三個欄位,但a, Rn不算所以為1byte
INC A
二個欄位,A不算所以為1byte
INC DPTR
二個欄位,DPTR不算所以為1byte
INC ACC
二個欄位,因ACC不是A,所以算2bytes
MOVX A, @DPTR
三個欄位,但A/DPTR不算所以為1BYTE
CJNE Rn, #const8, rel
四個欄位,但Rn不算,所以為3byte
特別注意的是
LCALL/ACALL/LJMP/...這些指令
MOV DPTR, #const16
雖然只三個欄位,其中的const16要算二個bytes,
所以指令長度為4-1=3
太久沒寫51了,有錯再請版上高手幫忙指出
※ 引述《WolfLord (呆呆小狼)》之銘言:
: ※ 引述《wcw519 (chenwei)》之銘言:
: : MOV A#data 指令長度:2Byte 執行時間:1週期
: : MOV A,Rn 指令長度:1Byte 執行時間:1週期
: : MOV A,direct 指令長度:2Byte 執行時間:1週期
: : MOV A,@Ri 指令長度:1Byte 執行時間:1週期
: : 我想知道這指令長度與執行時間的週期次數是怎麼計算的?
: 基本上你指要有這個印象、想法就差不多是這樣了:
: 1.標準8051一個M週期要12個Crystal震盪週期(M Cycle)
: 2.在CPU裡面的資料移動 1個M Cycle,位元移動2個M Cycle
: 3.設定位元、資料(包含清除)1個M Cycle
: 4.邏輯演算下,CPU內班資料1個M Cycle,從ROM般資料2個M Cycle,
: 從外部般資料3個M Cycle
: 5.牽涉位元搬移、移動要2個M Cycle
: 6.一般分期條件要2個M Cycle,牽涉間接資料或長跳躍要3個M Cycle
: 7.外部資料操作3個M Cycle
: 8.乘除法4個M Cycle
: 9.16位元操作(DPTR)2個M Cycle
: 差不多就是這樣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.43.202.170
※ 編輯: ksirf 來自: 114.43.202.170 (10/15 14:23)
※ 編輯: ksirf 來自: 114.43.202.170 (10/16 12:08)
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):
2
11
ASM 近期熱門文章
PTT數位生活區 即時熱門文章