在汇编语言程序中,如果我们要用到有多个数据组成的表,比如在语音编码算法中,需要特定的表来计算编码。这个时候我们就要用的查表指令。
在MCS-51单片机的程序存储器中,除了存放程序外,还可以存放一些常数(称为表格数据)。单片机指令系统提供了两条访问程序存储器的指令,称为查表指令,其实就是程序存储器向累加器A传送数据指令。常用的查表质量使用方法有以下两种。常用的查表指令使用方法有以下两种:
MOVC A,@A+PC
PC中存储下一条指令的地址,A中存放要用的数据,相对于下一条指令的距离。
这条指令是由PC作为基址寄存器,它虽然提供个6位地址,但是基址值是固定的,“A+PC”中的PC是程序计数器的当前内容(查表指令的地址加1),所以它的查表范围是查表指令后256B的地址空间。
MOVC A,@A+DPTR
DPTR中存储的是表的起始地址(表头)。A中存放的是要用的数据,相对于表头的距离
这条指令采用DPTR作为基址寄存器,它的寻址范围是整个程序存储器的64KB空间,所以表格可以放在程序存储器的任何位置。其缺点是如果DPTR有其他的用途,在将基址值付给DPTR之前必须保护现场。执行完查表指令后再进行恢复。
那么我们在实际应用的时候,会遇到不同的芯片,不同的内核,不同的指令系统,可能它没有特定的查表指令。这时,我们常常采用第二种方式,用一个MOVE,装表头地址;一个ADD,加上变址值;再用一个MOVE,取出想要的数就行了。
|