2 、累加器 A 与片外 RAM 之间的数据传递类指令
MOVX A,@Ri
MOVX @Ri,A
MOVX A,@DPTR
MOVX @DPTR,A
说明:
1 )在 51 中,与外部存储器 RAM 打交道的只可以是 A 累加器。所有需要送入外部 RAM 的数据必需要通过 A 送去,而所有要读入的外部 RAM 中的数据也必需通过 A 读入。在此我们可以看出内外部 RAM 的区别了,内部 RAM 间可以直接进行数据的传递,而外部则不行,比如,要将外部 RAM 中某一单元(设为 0100H 单元的数据)送入另一个单元(设为 0200H 单元),也必须先将 0100H 单元中的内容读入 A ,然后再送到 0200H 单元中去。
- 要读或写外部的 RAM ,当然也必须要知道 RAM 的地址,在后两条指令中,地址是被直接放在 DPTR 中的。而前两条指令,由于 Ri (即 R0 或 R1 )只是一个 8 位的寄存器,所以只提供低 8 位地址。因为有时扩展的外部 RAM 的数量比较少,少于或等于 256 个,就只需要提供 8 位地址就够了。
- 使用时应当首先将要读或写的地址送入 DPTR 或 Ri 中,然后再用读写命令。
例:将外部 RAM 中 100H 单元中的内容送入外部 RAM 中 200H 单元中。
MOV DPTR , #0100H
MOVX A , @DPTR
MOV DPTR,#0200H
MOVX @DPTR,A
- 程序存储器向累加器 A 传送指令
MOVC A , @A+DPTR
本指令是将 ROM 中的数送入 A 中。本指令也被称为查表指令,常用此指令来查一个已做好在 ROM 中的表格
说明:
- 此条指令引出一个新的寻址方法:变址寻址。本指令是要在 ROM 的一个地址单元中找出数据,显然必须知道这个单元的地址,这个单元的地址是这样确定的:在执行本指令立脚点 DPTR 中有一个数, A 中有一个数,执行指令时,将 A 和 DPTR 中的数加起为,就成为要查找的单元的地址。
- 查找到的结果被放在 A 中,因此,本条指令执行前后, A 中的值不一定相同。
例:有一个数在 R0 中,要求用查表的方法确定它的平方值(此数的取值范围是 0-5 )
MOV DPTR , #TABLE
MOV A , R0
MOVC A , @A+DPTR
.
.
TABLE: DB 0,1,4,9,16,25
最新评论
|