bode:
像这种用拼凑方法来存储数据,以达到节省空间的方法,用汇编指令很容易就做到了,用C语言非常费时间,尤其是这种带乘法的指令,汇编语言的乘法指令是4个机器周期的,C语言的乘法指令只会更高。比如要把a b c d这四个数据原来存储在内部ram的0x0002-0x0005这四个地址中,要把它们放在外部ram的0x0200H和0x0201H地址中,存放格式为ab和cd。MOVDPTR,#0200H //设置外部ram地址指针,指向0x0200H地址单元。MOVR0,#0002H //设置内部ram地址指针,指向0x0002H地址单元。MOVA,@R0 //取得第一个数,为0a。SWAPA //累加器A高低半字节互换,变为a0。INCR0 //内部地址指针加1,指向0x0003H地址单元。XCHDA,@R0 //累加器A与0x0003H单元低半字节交换,A变为ab。MOVX@DPTR,A //把累加器A的内容ab存入外部0x0200H单元。INCDPTR //外部ram地址指针加1,指向0x0201H单元。INCR0 //内部地址指针加1,指向0x0004H地址单元。MOVA,@R0 //取得第一个数,为0c。SWAPA //累加器A高低半字节互换,变为c0。INCR0 //内部地址指针加1,指向0x0005H地址单元。XCHDA,@R0 //累加器A与0x0005H单元低半字节交换,A变为cd。MOVX@DPTR,A //把累加器A的内容cd存入外部0x0200H单元。 上面就是存储数据的过程,里面的指令大都是1个机器周期,除了对DPTR操作的指令是2个机器周期,整个操作过程也就是18个机器周期。读取数据的过程就是上述过程的逆序。相比用C语言来说,效率要高得多。