8051汇编寻址模式
立即数寻址
立即数寻址:操作数以指令字节的方式直接存储在程序存储器中,指令格式#立即数,如上图指令格式 MOV Rn, #data 就是将数字data放入通用寄存器中。(注:曾经有个疑问为什么很多通用寄存器都是8个R0-R7?在指令的格式上也能发现在设计指令的时候留了3位可变位 r r r,直接可以指代R0-R7,只是不知道是先有指令集还是先有通用寄存器这个概念了)
寄存器寻址
寄存器寻址:操作数放在选定的寄存器中,如通用寄存器R0-R7,还有一些SFR内核寄存器如A(ACC)、B(B寄存器)、DPTR(DPH<<8+DPL),指令格式寄存器名称,如上图指令格式 MOV A,Rn 就是将通用寄存器Rn里面的值放到累加器ACC寄存器中。
直接寻址
直接寻址:在指令中给定了操作数的实际地址,8051的直接寻址一般都是IRAM中的地址,指令格式地址,如上图指令格式 MOV direct,A 就是将累加器ACC寄存器中的值放到direct所对应的IRAM地址单元中;MOV 0x20, A 就是将寄存器A的值放到IRAM 0x20这个地址单元中去。用C语言的概念理解direct就是一个指针。
寄存器间接寻址
寄存器间接寻址: 操作数的地址放在选定的寄存器中。将寄存器里的数据当作地址,这个地址里面的数才是真正的操作数,指令格式@寄存器名称。如上图指令格式 MOV A,@Ri 就是将Ri寄存器中的值当地址,这个地址所指向的值放到累加器ACC中去。用C语言的概念理解Ri就是一个二级指针。
基址+变址间接寻址
基址+变址间接寻址: 以DPTR或PC作基址寄存器,A作变址寄存器,相加形成16位的地址来访问程序存储区。基址+变址间接寻址在51指令集中只能用来访问程序存储区,指令格式@A+DPTR/PC。如上图指令格式 MOVC A,@A+DPTR 就是将A寄存器里的值加上DPTR寄存器里的值当地址来访问程序存储区,将里面的值再赋给A寄存器。用C语言的概念理解就是A+DPTR的值就是一个指针。
真柠檬物语: 为啥我运行的时候,感觉服务器一切正常,但是客户端连接不上呢
阿绒.: 下载成功了,但是运行还是没有结果
weixin_44207745: 表格里有个值错了吧。62349312对应的16进制数为0x3B76000
Xin_Lindsay: 这个是phy Link错误,建议换一个网口试一下,我以前用thinkpad的网口就不能Link成功,换别的电脑网口就没有问题,具体问题可以问一下沁恒的官方人员。
Sunonein: 我烧FreeRTOS+lwip的程序进去以后无法成功和phy建立连接,报错信息: [sys_arch] init ok Error:Wait phy linking timeout! Please cheak MID. Program has been blocked! 请问是什么原因?