这个问题涉及内核的设计与实现,不是简单一句话就可以更改的 |
zhxiufan 发表于 2022-7-18 14:35 所以人们发明了RISC体系扔掉这个造成交通拥堵的“交通枢纽”。 |
A累加器就好比交通枢纽,南来北往东去西来都得经过这里,所以大部分指令都需要借助这个枢纽到达彼岸。 |
图一是可以的 你参考答案的图片上的汇编代码,一般这种的是学过C的,也不怎么研究汇编,大多就是参考Keil编译出来的代码修改的以下是一个C代码编译后的汇编代码 你看图片中对R6,R7的操作就知道了,实际上是可以直接操作的,但却要通过A来操作 ![]() 这个只是8051的汇编系统是这样子的而已,并不是所有的汇编都支持寄存器之间数据直接传送的,主要是半导体制造成本限制 图二是不行的,至于原因就是8051的汇编系统就是这么规定的 |
Hephaestus 发表于 2022-7-18 02:12 正解,这就是为什么不同的CPU都有不同汇编指令, 需要你去研读这些指令文档,了解每条指令的用法,而不能想当然的写出 MOVX 40H, @DPTR, 这指令51系列的CPU就不支持。 这也是为什么要学习C语言的原因,C语言对不同CPU来说,相对都一样,只是通过不同的编译器编译为不同CPU的汇编代码,使用起来就比较方便了,不用考虑CPU的不同汇编指令。 |
本帖最后由 Hephaestus 于 2022-7-18 02:18 编辑 这就是CISC和RISC体系的区别了,CISC围绕着一个ACC来运转,RISC围绕一堆寄存器文件来运转,并不需要经过ACC。早期RISC并没有普及就是因为这种体系要用到的内存是CISC的120~150%,而内存非常昂贵。同样道理,楼主的代码可以运行,但是你看看你编译成的机器码要比通过ACC的大得多,执行时间也要慢,现在内存便宜这么做也可以,但是内存利用率和时间效率都比较差。对于某个应用这么做看不出什么差异,但一个大型程序的性能就是这么多细节累积出来的。 没仔细看,MOVX 40H, @DPTR 其实是非法指令,无法编译通过的。 |
标准a51指令的话,图一的可以,图二的不可以。 为什么很多转移需要经过A寄存器,是因为很多操作,都只有对于a寄存器的操作指令。 |