
如上,如果用P1 = 0xfd;就能点亮 P1 的第一个灯,但是用*(unsigned char*)(0x90) = 0xfd;就点不亮。但是我看这两句的汇编代码都是一样的MOV (0x90), #0xfd。
不好意思,上面的*(unsigned char*)(0x90) = 0xfd;的汇编是错的。确实是不一样(应该先编译,再debug看汇编)。如下:

前者P1 = 0xfd;是:
MOV (0x90), #0xfd
后者*(unsigned char*)(0x90) = 0xfd;是
MOV      R0,#P1(0x90)
MOV      @R0,#0xFD
但看起来没有本质区别阿,MOV      @R0,#0xFD这句起到的作用应该和MOV (0x90), #0xfd一样吧
|      1pca7a2      2022-05-15 14:42:51 +08:00 md5sum 对比一下 | 
|  |      2liyang5945      2022-05-15 15:11:11 +08:00 | 
|  |      3amiwrong123 OP @liyang5945 #2  点击 start debug session ,view 开启汇编窗口。 hex 不同是因为前者只有一句汇编,后者有两句汇编。但看了汇编,感觉没有本质区别,都是往内存引用里 赋值。 | 
|  |      4liuxu      2022-05-15 16:03:12 +08:00 | 
|      5wty      2022-05-15 16:44:09 +08:00  2 51 分什么直接寻址间接寻址,跟现代 X86 和 ARM 这种不太一样 RAM 的低 128 字节作为内存(前几个字节还跟寄存器复用),可以用 MOV 和 MOV @ R0 这种操作 高 128 字节跟 SFR 复用,只有直接 MOV 会被解释为操作 SFR ,用 MOV @ R0 操作会被解释为操作 RAM XRAM 需要用 MOVX 访问,Flash 需要用 MOVC 访问 51 这种蛋疼的访问方式让指针也很麻烦,memcpy 甚至用了一个大 switch 去把每种情况都写了一遍。。。。 | 
|      6statumer      2022-05-15 16:44:16 +08:00 via iPhone  1 直接寻址访问 sfr ,间接寻址访问用户内存区 | 
|  |      7RoyLaw      2022-05-15 18:03:00 +08:00 我都毕业快二十年了,大家还在玩 51 单片机嘛?你试试用二进制来操作。 | 
|      9someonesnone      2022-05-15 20:46:53 +08:00 via iPhone 操作 ram 和 sfr 的汇编不一样吧 所以直接写入端口寄存器需要特殊的方法 | 
|  |      10disk      2022-05-15 21:13:36 +08:00 所谓本质需要追溯到汇编阶段,译码阶段甚至是执行阶段。。。注意某些特殊规定。 | 
|      11zbianbiaos      2022-05-15 22:10:52 +08:00 51 是哈佛结构吧(不确定啊),外设没有统一地址管理,SFR 应该是特殊映射寄存器,将一个特殊的地址空间映射到 P1 变量,而不是你能够正常寻址的用户地址空间 | 
|      12anonydmer      2022-05-16 09:22:24 +08:00 十几年前我可以点亮,现在也点不亮咯 | 
|  |      13qwertyssp      2022-05-16 12:05:31 +08:00 既然都看到汇编了,这两句怎么能是等价呢? | 
|      14aru      2022-05-16 13:51:52 +08:00 啥时候教学才能替换为 mips 、arm 、riscv 架构的廉价单片机啊 | 
|      16Halry      2022-05-17 18:33:25 +08:00 via iPhone 51 不是哈弗结构,所以不能直接通过操作内存来控制外设,arm 是,所以可以直接像操作内存的方式操作外设 | 
|  |      17amiwrong123 OP @Halry #16  老哥,不是很懂为什么 是否为哈佛结构 会影响到 能否通过操作内存来控制外设。 从知乎上来看: 哈佛结构与冯诺依曼结构的本质区别在用是否使用同一套地址总线、数据总线,程序和数据是否统一寻址。比如代码地址是从 0~100k ,数据也是从 0~100k 这是哈佛结构,如果代码是从 0~100k ,数据是从 100~200k 并且使用同一套地址总线和数据总线这是冯诺依曼结构。 程序和数据是否统一寻址 为什么会影响到 能否通过操作内存来控制外设阿? | 
|      18Halry      2022-05-22 20:57:24 +08:00 via iPhone @amiwrong123 抱歉,是我记混了,确实不关架构的问题 |