更新时间:2024-08-29 07:54
查表指令,用来查找以列表形式或系统地排列在存储器中的数据的一种指令。
由于程序存储器只能读不能写,因此其数据的传输是单向的,即从程序存储器中读出数据到累加器A中。两条查表指令均采用基址寄存器加变址寄存器间接寻址方式。
查表指令的助记符是在MOV的后面加C,“C”是CODE的第1个字母,即代码的意思。
MOVC A@A+PC
这条指令以pc作基址寄存器,A的内容作为无符号整数和pc中的内容(下一条指令的起始地址)相加后得到1个16位的地址,把该地址指出的程序存储器单元的内容送到累加器A。
例:(A)=30H,执行地址1000H处的指令
1000H:MOVC A,@A+PC
本指令占用1B,下一条指令的地址为1001H,(PC)=1001H在加上A中的30H,得1031H,结果将程序存储器中1031H的内容送入A。
这条指令的优点是不改变特殊功能寄存器及pc的状态,根据A的内容就可以取出表格中的常数。缺点是表格只能存放在该条查表指令后面的256个单元内,表格的大小受到限制,而且表格只能被一段程序所利用。
MOVC A@A+DPTR
这条指令以DPTR作为基址寄存器,其余的与MOVC A,@A+PC相同
例 (DPTR)=8100H (A)=40H 执行指令
MOVC A,@A+DPTR
这条查表指令的执行结果只和指针DPTR及累加器A的内容有关,与该指令存放的地址及常数表格存放的地址无关,因此表格的大小和位置可以在64KB程序存储器中任意安排,1个表格可以为各个程序块共用。