微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机汇编基础

51单片机汇编基础

时间:11-13 来源:互联网 点击:

址,也即操作数是通过寄存器指向的地址单元得到的,这便是寄存器间接寻址名称的由来。

例如指令:

MOV A,@R0

这条指令的意义是R0寄存器指向地址单元中的内容送到累加器A中。假如R0=#56H,那么是将56H单元中的数据送到累加器A中。

寄存器间接寻址方式可用于访问内部RAM或外部数据存储器。访问内部RAM或外部数据存储器的低256字节时,可通过R0和R1作为间接寄存器。然而有必要指出,内部RAM的高128字节地址与专用积存器的地址是重叠的,所以这种寻址方式不能用于访问特殊功能寄存器。

外部数据存储器的空间为64kB,这时可采用DPTR作为间址寄存器进行访问,指令如下:

MOVX A,@DPTR

这条指令的意义是与上述类似,不再赘述。

[4].立即寻址

立即寻址就是把操作数直接在指令中给出,即操作数包含在指令中,指令操作码的后面紧跟着操作数,一般把指令中的操作数称为立即数,因此而得名。为了与直接寻址方式相区别,在立即数前加上“#”符号,例如:

MOVX A,#0EH

这条指令的意义是将0EH这个操作数送到累加器A中。

[5].变址寻址

变址寻址是以DPTR或PC作为基址寄存器,以累加器A作为变址寄存器,将两寄存器的内容相加形成16位地址形成操作数的实际地址。例如:

MOV A,@A+DPTR

MOVX A,@A+PC

JMP @A+DPTR

在这三条指令中,A作为偏移量寄存器,DPTR或PC作为变址寄存器,A作为无符号数与DPTR或PC的内容相加,得到访问的实际地址。其中前两条是程序存储器读指令,后一条是无条件转移指令。

[6].位寻址

在MCS-51单片机中,RAM中的20H—2FH字节单元对应的位地址为00H—7FH,特殊功能寄存器中的某些位也可进行为寻址,这些单元既可以采用字节方式访问它们,也可采用位寻址的方式访问它们。

[7].相对寻址

相对寻址方式是为了程序的相对转移而设计的,其夜里是以PC的内容为基址,加上给出的偏移量作为转移地址,从而实现程序的转移。转移的目的地址可参见如下表达式:

目的地址=转移指令地址+转移指令字接数+偏移量

值得注意的是,偏移量是有正负号之分的,偏移量的取值范围是当前PC值的-128—+127之间。

MCS-51数据传送指令

数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。

[1]. 以累加器A为目的操作数类指令(4条)

这4条指令的作用是把源操作数指向的内容送到累加器A。有直接、立即数、寄存器和寄存器间接寻址方式:

MOV A,data ;(data)→(A) 直接单元地址中的内容送到累加器A

MOV A,#data ;#data→(A) 立即数送到累加器A中

MOV A,Rn ;(Rn)→(A) Rn中的内容送到累加器A中

MOV A,@Ri ;((Ri))→(A) Ri内容指向的地址单元中的内容送到累加器A

[2]. 以寄存器Rn为目的操作数的指令(3条)

这3条指令的功能是把源操作数指定的内容送到所选定的工作寄存器Rn中。有直接、立即和寄存器寻址方式:

MOV Rn,data ;(data)→(Rn) 直接寻址单元中的内容送到寄存器Rn中

MOV Rn,#data ;#data→(Rn) 立即数直接送到寄存器Rn中

MOV Rn,A ;(A)→(Rn) 累加器A中的内容送到寄存器Rn中

[3]. 以直接地址为目的操作数的指令(5条)

这组指令的功能是把源操作数指定的内容送到由直接地址data所选定的片内RAM中。有直接、立即、寄存器和寄存器间接4种寻址方式:

MOV data,data ;(data)→(data) 直接地址单元中的内容送到直接地址单元

MOV data,#data ;#data→(data) 立即数送到直接地址单元

MOV data,A ;(A)→(data) 累加器A中的内容送到直接地址单元

MOV data,Rn ;(Rn)→(data) 寄存器Rn中的内容送到直接地址单元

MOV data,@Ri ;((Ri))→(data) 寄存器Ri中的内容指定的地址单元中数据送到直接地址单元

[4]. 以间接地址为目的操作数的指令(3条)

这组指令的功能是把源操作数指定的内容送到以Ri中的内容为地址的片内RAM中。有直接、立即和寄存器3种寻址方式:

MOV @Ri,data ;(data)→((Ri)) 直接地址单元中的内容送到以Ri中的内容为地址的RAM单元

MOV @Ri,#data ;#data→((Ri)) 立即数送到以Ri中的内容为地址的RAM单元

MOV @Ri,A ;(A)→((Ri)) 累加器A中的内容送到以Ri中的内容为地址的RAM单元

[5]. 查表指令(2条)

这组指令的功能是对存放于程序存储器中的数据

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top