bode:
像這種用拼湊方法來(lái)存儲(chǔ)數(shù)據(jù),以達(dá)到節(jié)省空間的方法,用匯編指令很容易就做到了,用C語(yǔ)言非常費(fèi)時(shí)間,尤其是這種帶乘法的指令,匯編語(yǔ)言的乘法指令是4個(gè)機(jī)器周期的,C語(yǔ)言的乘法指令只會(huì)更高。比如要把a(bǔ) b c d這四個(gè)數(shù)據(jù)原來(lái)存儲(chǔ)在內(nèi)部ram的0x0002-0x0005這四個(gè)地址中,要把它們放在外部ram的0x0200H和0x0201H地址中,存放格式為ab和cd。MOVDPTR,#0200H //設(shè)置外部ram地址指針,指向0x0200H地址單元。MOVR0,#0002H //設(shè)置內(nèi)部ram地址指針,指向0x0002H地址單元。MOVA,@R0 //取得第一個(gè)數(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 //取得第一個(gè)數(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單元。 上面就是存儲(chǔ)數(shù)據(jù)的過(guò)程,里面的指令大都是1個(gè)機(jī)器周期,除了對(duì)DPTR操作的指令是2個(gè)機(jī)器周期,整個(gè)操作過(guò)程也就是18個(gè)機(jī)器周期。讀取數(shù)據(jù)的過(guò)程就是上述過(guò)程的逆序。相比用C語(yǔ)言來(lái)說(shuō),效率要高得多。