找回密码
 立即注册

微信扫码登录

使用验证码登录

QQ登录

只需一步,快速开始

楼主: jlima

关于68K指令集的问题。

[复制链接]

0

主题

15

回帖

90

积分

注册会员

积分
90
发表于 3 天前 | 显示全部楼层
jlima 发表于 2025-3-9 14:41
另外问一下。

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

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

EOR是逻辑指令。

2

主题

28

回帖

196

积分

注册会员

积分
196
 楼主| 发表于 3 天前 | 显示全部楼层
singinintherain 发表于 2025-3-11 16:06
你的68k指令并没有弄懂,地址寄存器不需要清零(它也没有清零这一说),数据寄存器清零采用如下两种方式 ...

你这是纯粹的照本宣科。

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

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

0

主题

15

回帖

90

积分

注册会员

积分
90
发表于 3 天前 | 显示全部楼层
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指令,你说的两个运算是效率最低的,这也是为什么不常用它们的原因。

2

主题

28

回帖

196

积分

注册会员

积分
196
 楼主| 发表于 3 天前 | 显示全部楼层
singinintherain 发表于 2025-3-11 19:41
你要分清什么叫寄存器清零,什么叫结果等于0.
你说的这些运算其结果确实可以使内存寄存器值为0,但一般不 ...

既然目的是寄存器清零,后面跟的肯定不会是条件分支指令,那么状态寄存器对这条指令就没有意义。


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

至于为什么我会认为效率最高的是EOR指令,那是因为我用X86的思维来考虑68K了,这个确实是我的错。
在X86上,效率最高的就是逻辑运算指令。反编译X86程序就可以发现,寄存器清零最常用的就是逻辑异或XOR指令。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|肖琪模拟游戏站 ( 沪ICP备2023018581号-5|沪公网安备31011702888952号 )

GMT+8, 2025-3-14 20:44 , Processed in 0.035566 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表