data/attach/1904/pzosx6lrf5cfjjkhquzzifbbytwd96cb.jpg
单片机数据传送类指令教程:http://www.51hei.com/mcuteach/242.html寄存器教程:http://www.51hei.com/mcuteach/245.html
我看懂了单片机传送类指令的教程!我觉得我自己好厉害啊哈哈哈哈哈哈哈。一遍看不懂看两遍,三遍,直到看懂先谢谢写上面教程的大神
变址寻址,说白了就是以某个地址为起点,加上地址偏移,就得到目标的地址。结合第一个链接里说的,变址寻址一般用来查表
![]()
![](data/attach/1904/wg1bozpcfl7ecga5puqt7gztc6atz8xb.jpg)
另,查表指令只有@A+DPTR跟另外 一种形式(这里没涉及),所以要把R0的值放入A中,
![](https://img-blog.csdn.net/20180118212121556?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvb3VfbnZoYWk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
上图所示。#TABLE是一个标记。你看汇编代码里有些行的打头会有一些自定义的名字。这个TABLE实际就是一个地址(标记),指向程序中TABLE标记 表中的内容是你自己自定义的,偏移多少位你自己知道。所以DPTH存储的就是TABLE表的位置,R0里面存储的是你指定的偏移,那样自然可以得到你想要的数据
堆栈操作: SP是一个地址值的指针。因为需求对芯片的要求也不一样,所以堆栈由用户自定义。 比如 Move SP #5FH 这样我就定义了一个堆栈。在60H开始,存放第一个数据 为什么是60H呢? 因为每一次Push,都会把SP的值+1,然后才会把Push后面的东西放到这个新SP值指向的地址单位 但是每次POP都会先把堆栈中最后一个东西吐回原位,然后才会-1.