解码PASCAL代码行

时间:2014-04-03 12:30:39

标签: pascal pascalscript

我是PASCAL的新手,我正在研究PASCAL代码。如果有人帮我理解这段代码,我真的很感激。

readagain1:     
        Write(' ', (BYWORD(fileio_dcb.usr_buf^[WRD((2*j)+1)], fileio_dcb.usr_buf^[WRD((2*j)+0)])):4:16);     
        Write(' ', (BYWORD(fileio_dcb.usr_buf^[WRD((2*j)+3)], fileio_dcb.usr_buf^[WRD((2*j)+2)])):4:16);     
        Write(' ', (BYWORD(fileio_dcb.usr_buf^[WRD((2*j)+5)], fileio_dcb.usr_buf^[WRD((2*j)+4)])):4:16);     
        Write(' ', (BYWORD(fileio_dcb.usr_buf^[WRD((2*j)+7)], fileio_dcb.usr_buf^[WRD((2*j)+6)])):4:16);     
        Write(' ', (BYWORD(fileio_dcb.usr_buf^[WRD((2*j)+9)], fileio_dcb.usr_buf^[WRD((2*j)+8)])):4:16);     
        Write(' ', (BYWORD(fileio_dcb.usr_buf^[WRD((2*j)+11)], fileio_dcb.usr_buf^[WRD((2*j)+10)])):4:16);     
        Write(' ', (BYWORD(fileio_dcb.usr_buf^[WRD((2*j)+13)], fileio_dcb.usr_buf^[WRD((2*j)+12)])):4:16);     
        WriteLn(' ', (BYWORD(fileio_dcb.usr_buf^[WRD((2*j)+15)], fileio_dcb.usr_buf^[WRD((2*j)+14)])):4:16);     
        j := j+8;     
        IF (j < 100) THEN GOTO readagain1;
        j := 0;     
        int_dcb.txt_buf.r := 0;     
        WriteLn;
        WriteLn('Reading txt_buf ; ');

readagain1是已经声明的标签。

正在将十六进制数从文件读入缓冲区(fileio_dcb.usr_buf),并且正在对读取的十六进制数执行某些操作。对于理解正在对号码执行的操作,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我的猜测是每次迭代它会写出13(= 100/8向上舍入)行,每行有8(16位)字大小的十六进制数。每条线都有一个领先的空间。

这可能是一种非典型的(非Borland)方言,它可以使用:4:16写出十六进制值(我假设这意味着基数为16,4位宽)。大多数典型的方言(和标准?)只使用:x:y表示浮点数。

BYWORD()和WRD()不是标准标识符,我猜这是一些将两个字节组合成一个单词的嵌入式方言。也许它只能读取对齐地址中的单词,并且是这些内置/宏的解决方法。

请注意,这完全基于&#34;最有可能的是&#34;。片段不够完整,方言不标准。