代码之家  ›  专栏  ›  技术社区  ›  Breton

phar lap汇编程序:如果可能,我需要信息/文档和二进制文件

  •  1
  • Breton  · 技术社区  · 15 年前

    我已经 inherited 一个相当古老、复杂的代码库,用于最初针对MSDOS的程序。事实证明,该程序的某些部分是用一种鲜为人知的x86汇编语言编写的,称为“phar lap assembler”,它是在生产汇编程序的公司和产品之后编写的。我做了一个相当深入的谷歌搜索,我找不到原始汇编程序,或任何有关它的信息或文档。(尽管我在专家交流中发现了一些令人沮丧的页面,这些页面上的人都在问类似的问题)。

    因此,基本上,在我找到一个pharlap汇编程序(386asm.exe)的副本或者找到足够的方言信息,将其翻译成更“标准”的masm方言之前,我将无法编译这个东西。或者,或者试着通过阅读来理解它。

    或者,如果这些都不可能,那么我只需要一些关于这个问题的帮助,我至少应该能够获得程序的一个部分来编译。

    .c文件中有一个结构声明,如下所示:

    //static struct bhash *bhash;
    
    typedef struct bhash_control {
     void   *cachedata;
     Rgb3   *ctab;
     int    rederr;
     int    grnerr;
     int    bluerr;
     ULONG  drgb;   // temp var used by dithering, blackbox to us here
    #ifdef SHOW_STATS
     int calls, hits1, hits2, fhits, misses;
    #endif
     } BhashCtl;
    
    BhashCtl bhashctl;   // global so assembler code can see it.
    

    然后有一些汇编程序看起来像这样,它大概是试图做出相同的类型声明,这样一些汇编程序代码就可以使用相同的类型:

    BhashCtl struct
     cachedata  dd ?   ; pointer to alloc'd cache data area
    ctab    dd ?   ; contains vb.pencel->cmap->ctab
    rederr    dd ?   ; error diffusion dithering variables...
    grnerr    dd ?
    bluerr    dd ?
    drgb    dd ?   ; rgb value with dithering rolled in
    
    ;calls     dd  ?    ; cache stats...
    ;hits1     dd  ?    ;   to use these, you also need to
    ;hits2     dd  ?    ;   uncomment a few lines below.
    ;fhits     dd  ?    ;   search for 'bhashctl.' to find them.
    ;misses     dd  ?
    
    BhashCtl ends
    
     extern bhashctl:BhashCtl ; the one-and-only lives in bhash.c
    

    这在最后一行编译时出现错误,看起来像这样(watcom汇编程序):

    Error! E518: External definition different from previous one
    

    所以基本上,我认为这句话的意思是,这个结构的汇编程序版本与这个结构的C版本不匹配。我在汇编程序中尝试了许多不同的word和dword组合来代替dd,但我无法克服这个小问题。也许如果我能找到一种方法让这两个声明完全匹配,我对法老的信息需求就会减少。

    此外,如果有人能为这个杂乱无章的问题想出一个更好的标题,我会接受各种想法。

    编辑:好吧,原来我略读了一些重要的信息。这是一个最初为phar-lap汇编程序编写的文件(我没有),我正试图使用watcom assember(WASM)进行汇编。事实证明,这个特定错误的问题在于,PharLap似乎区分大小写,而Watcom则不区分大小写。因此,它认为Bhashctl与Bhashctl相同。在我姐夫的帮助下解决了这个问题。我从来没有想到不敏感的情况是造成这种情况的原因。

    2 回复  |  直到 14 年前
        1
  •  1
  •   barrowc    15 年前

    一些Phar Lap手册(包括386 ASM手册)的邮政编码:

    http://www.dinigroup.com/pharlap.php

        2
  •  0
  •   C. K. Young    15 年前

    这可能不是您需要的答案,但我还是会尝试:将您的组装部分移植到C中有多困难?我知道有一些C不能做的事情,但也许您可以使用内联汇编来完成这一点。