数据传送类指令是编程时使用最频繁的一类指令。一般数据传送类指令的助记符为“MOV”,通用的格式如下:
MOV,数据传送类指令是把源 *** 作数传送到目的 *** 作数。指令执行后,源 *** 作数不改变,目的 *** 作数修改为源 *** 作数。所以数据传送类 *** 作属“复制”性质,而不是“搬家”。
数据传送类指令不影响标志位,这里所说的标志位是指Cy、Ac和OV,但不包括检验累加器奇偶标志位P。
1.以累加器为目的 *** 作数的指令
这组指令的功能是把源 *** 作数的内容送人累加器A,源 *** 作数有寄存器寻址、直接寻址、间接寻址和立即数寻址等方式,例如指令:
2.以Rn为目的 *** 作数的指令这组指令的功能是把源 *** 作数的内容送入当前工作寄存器区的RO~R7中的某一个寄存器。
3.以直接地址direct为目的 *** 作数的指令
这组指令的功能是把源 *** 作数送入直接地址指定的存储单元。direct指的是内部RAM或SFR地址。
4.以寄存器间接地址为目的 *** 作数的指令这组指令的功能是把源 *** 作数内容送入RO或Rl指定的存储单元中。
5. 16位数传送指令这条指令的功能是把16位立即数送入DPTR,用来设置数据存储器的地址指针。AT89S51中设有两个DPTR,通过设置特殊功能寄存器AUXR1中的DPS位来选择。当DPS-I,则指令中的DPTR即为DPTR1,DPTRO被屏蔽,反之亦然。DPTR既是一个16位的数据指针,又可分为DPH和DPL两个8位寄存器进行 *** 作,十分灵活、方便。设有两个DPTR后,可避免频繁地出入堆栈 *** 作。
对于所有MOV类指令,累加器A是一个特别重要的8位寄存器,CPU对它具有其他寄存器所没有的 *** 作指令。后面将要介绍的加、减、乘、除指令都是以A作为目的 *** 作数的。Rn为CPU当前所选择的寄存器组中的RO~R7,直接地址指定的存储单元为内部RAM的OOH~7FH和特殊功能寄存器(地址范围为80H~FFH)。在间接地址中,用RO或Rl作为内部RAM的地址指针,可访问内部RAM的OOH~7FH共128个单元。
6.堆栈 *** 作指令在AT89S51的内部RAM中可以设定一个后进先出(LIFO,Last In First Out)的区域,称为堆栈。在特殊功能寄存器中有一个堆栈指针SP,它指定堆栈的栈顶位置。堆栈 *** 作有进栈和出栈两种,因此,在指令系统中相应有两条堆栈 *** 作指令。
(1)进栈指令
这条指令的功能是,首先将栈指针SP加1,然后把direct中的内容送到栈指针SP指示的内都RAM单元中。
例如,当(SP)=60H,(A)=30H,(B)=70H时,执行下列指令
结果为(61H)=30H,(62H)=70H,(SP)=62H。
(2)出栈指令
这条指令的功能是,将栈指针SP指示的栈顶(内部RAM单元)内容送入direct字节单元中,栈指针SP减1。
例如,当(SP)=62H,(62H)=70H,(61H)=30H时,执行下列指令:
结果为(DPTR)=7030H,(SP)=60H。
7.累加器A与外部数据存储器RAM/IO传送指令采用16位的DPTR进行间接寻址,可寻址整个64KB片外数据存储器空间,高8位地址(DPH)由P2口输出,低8位地址(DPL)由PO口输出。
采用Ri(i=0.1)进行间接寻址,可寻址片外256个单元的数据存储器。8位地址由PO口输出,锁存在地址锁存器中,然后PO口再作为8位数据口。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)