在书上看到MCS-51可以直接寻址的操作数存储空间为内部RAM的低128字节(00H-7FH)和特殊功能寄存器(80H-FFH),对于52子系列其内部RAM空间的80H-FFH不能直接寻址,那54和58系列呢,另外寻址的意义在哪,直接操作不就完了,为什么要寻址还有单片机的数据传送指令,对于不同的源操作数和目的操作数都有规定,大家是不是都是把这些背下来的,我感觉又乱又多
MOV A,#34H ;A=34H
MOV R0,A ;R0=34H
MOV @R0,#56H ;(34H)=56H ////在这里就有点看不明白了,这里是到底是把操作数34H改成56H,还是把操作数56H转移到地址是34H里呢,如果是后者那么34H这个地址又是哪来的,前面34H不一直是操作数吗?
MOV R1,34H ;R1=56H ///这里我知道是把地址34H里的内容56H转移到R1里
MOV 40H,R1 ;(40H)=56H
MOV 50H,@R1 ;(50H)=56H
MOV P1,#55H ;P1=55H
若将外部数据存储器地址为3080H的单元内容读出,送到内部RAM地址为30H单元中程序如下
MOV DPTR,#3080H////这里加了一个#号不是表示立即数吗,而且题目不是要求3080单元的内容吗?
MOVX A,@DPTR
MOV 30H, A
怎么样区分指令后面的是操作数还是地址??
等高手指点下
[
本帖最后由 zjjone1023 于 2011-5-18 00:14 编辑 ]
此帖出自
小平头技术问答
MOV R1,34H ;R1=56H //这句就是内存34H中的数赐予R1,因为刚才把34H中的值改为56H,也即R1赐值56H
MOV 40H,R1 ;(40H)=56H//R1中的数赐予内存中地址40H
MOV 50H,@R1 ;(50H)=56H//这句有误,因为@为寻址指令,这句是说以R1中的数为地址寻址,R1中的数为56H,也即内存56H中的数赐予内存50H
MOV P1,#55H ;P1=55H//这句好理解,立即数55H赐予寄存器P1
MOV DPTR,#3080H//这里并不是把DPTR地址设置为3080,而是把地址指针寄存器DPTR的值设置为3080,这是两个不同的概念,DPTR是内部寄存器,没有地址,或者说这个地址你看不到。
MOVX A,@DPTR//以DPTR中的值为地址寻址,因为刚才已经把DPTR设置为3080,也即将地址3080中的数赐予A,因为MOVX为片外传送指令,也即将外部存储器中对应地址为3080的数赐予A
MOV 30H, A//这个前面讲过了,A赐予内存中地址30H的存储器
一周热门 更多>