singinintherain 发表于 2025-3-11 16:06:29

jlima 发表于 2025-3-9 14:41
另外问一下。

1。寄存器清零时,默认是MOVE指令,改成EOR指令,执行速度会不会更快?


你的68k指令并没有弄懂,地址寄存器不需要清零(它也没有清零这一说),数据寄存器清零采用如下两种方式清零:
moveq#0, D0
clr.lD0

EOR是逻辑指令。

jlima 发表于 2025-3-11 17:40:37

singinintherain 发表于 2025-3-11 16:06
你的68k指令并没有弄懂,地址寄存器不需要清零(它也没有清零这一说),数据寄存器清零采用如下两种方式 ...

你这是纯粹的照本宣科。

EOR.L D0,D0逻辑运算,任何数与自身异或,结果为0。
SUB.L D0,D0算数运行,任何数减去自身,结果为0。

其中EOR指令为纯二进制运算,理论上来说比MOVE、SUB、CLR等指令运行速度更快。

singinintherain 发表于 2025-3-11 19:41:25

jlima 发表于 2025-3-11 17:40
你这是纯粹的照本宣科。

EOR.L D0,D0逻辑运算,任何数与自身异或,结果为0。


你要分清什么叫寄存器清零,什么叫结果等于0.
你说的这些运算其结果确实可以使内存寄存器值为0,但一般不用于寄存器清零,因为他们对状态寄存器的影响不同。
比如你说的SUB.L D0,D0自身减自身,其结果会影响N,Z,C,V四个状态寄存器的值,而CLR指令和MOVE只影响Z,N两个。
另外,效率最高的是clr指令,其次是moveq指令,你说的两个运算是效率最低的,这也是为什么不常用它们的原因。

jlima 发表于 2025-3-11 20:23:13

singinintherain 发表于 2025-3-11 19:41
你要分清什么叫寄存器清零,什么叫结果等于0.
你说的这些运算其结果确实可以使内存寄存器值为0,但一般不 ...
既然目的是寄存器清零,后面跟的肯定不会是条件分支指令,那么状态寄存器对这条指令就没有意义。


我对68K指令集并不太了解,执行效率我也说的是理论上,并不确定,所以才会来询问。

至于为什么我会认为效率最高的是EOR指令,那是因为我用X86的思维来考虑68K了,这个确实是我的错。
在X86上,效率最高的就是逻辑运算指令。反编译X86程序就可以发现,寄存器清零最常用的就是逻辑异或XOR指令。
页: 1 2 [3]
查看完整版本: 关于68K指令集的问题。