gpt4 book ai didi

io - 对为旧计算机编写的延迟函数进行逆向工程

转载 作者:行者123 更新时间:2023-12-05 07:59:07 25 4
gpt4 key购买 nike

我正在尝试移植我收到的一些旧 Pascal 代码,其目的是控制一个数字 I/O 卡,但我遇到了一个涉及等待函数的障碍。每当发送信号时,程序员都会做这样的事情

[Set the port status]
LoopDelay([a long integer])
[Set the next port status]
LoopDelay([next long integer])
etc.

LoopDelay 看起来像这样:

procedure loopdelay(looping:longint);
var
counter,count : longint;
begin
for counter:=1 to looping do
inc(count);
end {loopdelay};

在我看来,他好像根据处理器速度做了一些数学运算,并计算出他需要迭代多少次循环才能等待一定的时间。我怎样才能知道等待了多长时间?

附加信息:该处理器是 80 年代末/90 年代初的 486(根据维基百科,频率在 20 到 66 MHz 之间)。计算机运行 DOS 或早期的 Windows,代码是用 Turbo Pascal 7 编译的。传递给 loopdelay 的两个常量是 1266 和 6328。

我应该很快就会去参观这台机器,希望到时候我能找到确切的处理器。理想情况下,我想要一个可以插入时钟速度的公式。

最佳答案

在实际的 Pascal 实现中,您可以使用延迟程序,无需延迟循环。但是应该延迟多久呢?我可以想到四种获取此信息的方法。

  1. 最终您可以找到卡的文档或其中列出了必要延迟的部分。

  2. 您可以找到一台旧 PC 并测量一个计数非常大的延迟循环。

  3. 你反汇编 loopdelay 程序,查找 486 手册并手动计算循环所需的时间。

  4. 尝试错误并增加良好的安全边际。

关于io - 对为旧计算机编写的延迟函数进行逆向工程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22664714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com