【发布时间】:2018-01-06 16:25:45
【问题描述】:
80386-80686+:不建议软件程序员使用EBX寄存器,因为是CPU的特殊寄存器,或者因为操作系统不能使用。 (至于Windows)出于某些原因需要它...?
但是如果我在使用它之前将它保存到堆栈中(并在退出时恢复它)可能存在什么问题?会有什么后果?
通过这个简单的例程来模拟精灵管理,我使用了 EBX 寄存器,但似乎只有在 Windows 7.0 和 ACER 机器下,我创建的视频游戏才会变慢。只是一个疑问......
我的回答:因为每个程序都需要数据区或(16 位)数据段,而 Delphi 中的 EBX 寄存器用于保存这个数据指针,每次写入 EBX 都会减慢我的程序。
Procedure Sub_MoveSprite; Assembler;
/* Sub-ROUTINE per MoveSprite (FlipX-FlipY).
INPUT:
EAX= Attributi immagine.
EBX= Scarto X per origine.
ECX= Quantità X di Pixel per LINEA.
EDX= Quantità Y di linee da trasf.
EBP= Scarto X per destinazione.
ESI= OFFSET per origine.
EDI= OFFSET per destinaz */
Asm
Push EBP
Push EBX
Push ECX
BT EAX,Def_Target_DirX_D
SbB EBP,EBP
LEA EBP,[2*EBP+1]
BT EAX,Def_Source_DirX_D
SbB EBX,EBX
LEA EBX,[2*EBX+1]
@@01:Mov AL,[ESI]
Cmp AL,AH
JE @@00
Mov [EDI],AL
@@00:Add ESI,EBX
Add EDI,EBP
Loop @@01
Mov ECX,[ESP]
Add ESI,[ESP+4]
Add EDI,[ESP+8]
Dec EDX
JNE @@01
Add ESP,12
End;
对不起,先生。 Peter Cordes,但我只回答了一个挫折的原因。我的测试是:INTEL COMPAQ NX7400 便携式 2 GHz,2 GB RAM,AMD ASUS X53U 便携式 1 GHz,2 GB RAM 和 SVGA RADEON,AMD SEMPRON (tm) 2400+,1.68 GHz,1 GB RAM,SVGA NVIDIA GeForce 6600,主要。操作系统视窗XP。但我只是怀疑它会导致一些问题 运行我的软件时会出现短暂的眨眼间断。也提到了这个问题 一些 Stack Overflow 用户(EBX 注册)。
代码似乎都是在 Borland Delphi 7.0 上使用 ASM 并在之后访问 EBX 寄存器 之前在入口代码上将其压入堆栈,然后在退出时将其从堆栈中弹出。
我声明我使用轮询策略而不是按对象管理事件, 主窗体的例外,它使用系统计时器来执行 main-program-procedure,更多管理事件 OnPaint(不同步 光学刷,但这不是问题), OnActivate, OnCreate, OnDestroy, FormKeyUp/ 向下和鼠标单击。
问题是我的软件在不同频率的距离处有点不稳定 我什至不明白它取决于什么。
我在这里嵌套了代码。为什么需要其他代码来解释所有内容?现在,为什么,除了 cpu: INTEL/AMD 80386+, PENTIUM (double core) 和其他类似的我用过的 也许我已经解释了所有测试。
【问题讨论】:
-
如果有的话,那是由于 delphi。在普通代码中,您可以很好地使用
EBX它只是另一个被调用者保存的寄存器) -
'在使用前将其保存到堆栈中(并在退出时恢复)可能存在哪些问题?' - 我希望没有:)
-
与什么相比慢下来?您还没有显示比这更慢的代码。您也没有说明您正在测试什么 CPU,或者回答性能问题所需的任何内容(例如,使用性能计数器进行分析以查看运行速度较慢的内容)。
-
亲爱的小丑,也许我没有解释清楚:很明显我也可以在delphi中使用EBX寄存器。我为自己想了一个问题,唯一明显的答案不是你给出的答案:我说的是性能,而不是其他任何东西。我添加了我的答案:因为每个程序都需要数据区或(16 位)数据段,并且 Delphi 中的 EBX 寄存器用于保存此数据指针,每次写入 EBX 都会减慢我的程序...
-
对不起,先生。 Peter Cordes,但我只回答了一个挫折的原因。我的测试是:INTEL COMPAQ NX7400 便携式 2 GHz,2 GB RAM,AMD ASUS X53U 便携式 1 GHz,2 GB RAM 和 SVGA RADEON,AMD SEMPRON (tm) 2400+,1.68 GHz,1 GB RAM,SVGA NVIDIA GeForce 6600,主要。操作系统视窗XP。但我只是怀疑它的问题会导致我的软件运行时出现一些短暂的眨眼中断。一些 Stack Overflow 用户(EBX 寄存器)也提到了这个问题。待续……
标签: c assembly delphi-7 cpu-registers