EQU在这段代码中的功能是什么?

时间:2016-02-24 20:52:36

标签: assembly dos

我试图破译旧DOS程序中的这个文件实际上在做什么。

 IDATE  EQU I/1/8/0                    Date : MM/DD/YY
       ITIME  EQU I/9/8/0                    Time : HH:MM:SS
       IUSER  EQU I/17/6/0                User ID : XXX999
       ITERM  EQU I/23/4/0            Terminal ID : ST99
       KAREA  EQU K/1/64/0

我原以为EQU是一位经营者要求"等于"。我似乎无法弄清楚它在这里的用途。

字符串看起来像" I/1/8/0"或" K/1/64/0"实际上是与ITIMEKAREA变量进行比较的值,还是指向存储数据的某个位置?

文件中的其他一些行:

     FUNITM EQU X/3001/013/0
   F0     EQU W/3001/013/0/    000000000
   F1     EQU *13/0/ASM 000103000
   F2     EQU *13/0/ASM,000103000
   F3     EQU *13/0/JCR 000104000
   F4     EQU *13/0/JCRR000104000
   F5     EQU *13/0/JVR 000104000

我希望我知道谷歌的正确用法如何运作......任何线索都会很棒。谢谢

这是程序中的另一个文件,可能是这里写的内容的指示器:

       RMK     Cash receipts listing in Alpha sequence
       RMK
       RMK
       RMK     ***** Data Definition *****
       RMK     ***** File I/O Area is 1024 bytes *****
       RMK           "A" Record in SCRN File contains 8 numbers from 01-98
       RMK            (99 is reserved as the null file pointer)
       RMK            in positions 11-12, 13-14, ... 25-26 where 11-12
       RMK            establishes the physical location of file #1,
       RMK            13-14 file #2 ... 25-26 file #8 as referenced in this
       RMK            source code module.
       RMK            These numbers (01-98) point to the physical file
       RMK            assignments for files #1 thru #8 used in this source
       RMK            file.
       RMK            The actual physical locations of these files (01-98)
       RMK            appear in positions 3 thru 25 in records 1-98 in the
       RMK            STxx\FILES.REF file.
       RMK
       RMK     (I/O Area Definitions)
IAREA  EQU I/1/1024/0     The "I" area position 1 for a length 1024
       RMK
       RMK     (File #1 I/O Area Definition)
       CPY /DB\CHK/
       RMK
       RMK     (File #2 I/O Area Definition)
       CPY /DB\CST/

2 个答案:

答案 0 :(得分:2)

虽然我从未见过像这样使用的EQU,但它们看起来像某种字段或结构定义。

从IDATE行开始:

I - Integer type.
1 - Offset of the 'IDATE' field.
8 - Length of the 'IDATE' field.
0 - ???  Perhaps # of decimal places?

如果我们取IDATE的偏移量并加上它的长度,那么我们就会得到9,这是ITIME线上的偏移量。同样适用于IUSER,ITERM和KAREA。

显然这与btrieve数据有关。我使用了btrieve(很多年前),并且从未看过使用这种语法定义的表。更常见的是人们使用DDF文件(例如,请参阅this)。如果您仍然难以解析数据,可能需要寻找。

答案 1 :(得分:0)

首先,谢谢大家的意见;它帮助引导我走向正确的方向;

事实证明,EQU用于为BTRIEVE数据库创建数据库表定义。

很高兴,我可以通过BUTIL实用程序轻松操作数据,并编写一些脚本将部分二进制.DAT文件拆分为逗号分隔列。

特别感谢David Wohlferd(如果您发布有关结构定义的答案,我会将其标记为已接受)。