bode:
像這種用拼湊方法來存儲數(shù)據(jù),以達(dá)到節(jié)省空間的方法,用匯編指令很容易就做到了,用C語言非常費(fèi)時間,尤其是這種帶乘法的指令,匯編語言的乘法指令是4個機(jī)器周期的,C語言的乘法指令只會更高。比如要把a(bǔ) b c d這四個數(shù)據(jù)原來存儲在內(nèi)部ram的0x0002-0x0005這四個地址中,要把它們放在外部ram的0x0200H和0x0201H地址中,存放格式為ab和cd。MOVDPTR,#0200H //設(shè)置外部ram地址指針,指向0x0200H地址單元。MOVR0,#0002H //設(shè)置內(nèi)部ram地址指針,指向0x0002H地址單元。MOVA,@R0 //取得第一個數(shù),為0a。SWAPA //累加器A高低半字節(jié)互換,變?yōu)閍0。INCR0 //內(nèi)部地址指針加1,指向0x0003H地址單元。XCHDA,@R0 //累加器A與0x0003H單元低半字節(jié)交換,A變?yōu)閍b。MOVX@DPTR,A //把累加器A的內(nèi)容ab存入外部0x0200H單元。INCDPTR //外部ram地址指針加1,指向0x0201H單元。INCR0 //內(nèi)部地址指針加1,指向0x0004H地址單元。MOVA,@R0 //取得第一個數(shù),為0c。SWAPA //累加器A高低半字節(jié)互換,變?yōu)閏0。INCR0 //內(nèi)部地址指針加1,指向0x0005H地址單元。XCHDA,@R0 //累加器A與0x0005H單元低半字節(jié)交換,A變?yōu)閏d。MOVX@DPTR,A //把累加器A的內(nèi)容cd存入外部0x0200H單元。 上面就是存儲數(shù)據(jù)的過程,里面的指令大都是1個機(jī)器周期,除了對DPTR操作的指令是2個機(jī)器周期,整個操作過程也就是18個機(jī)器周期。讀取數(shù)據(jù)的過程就是上述過程的逆序。相比用C語言來說,效率要高得多。