我如何从SIC汇编器的目标代码中获得文本的长度?


COPY START 3000
** LDA THREE
** STA ALPHA
** LDCH CHARC
** STCH C1
** LDCH CHARZ
** STCH C3
ALPHA RESW 3
THREE WORD 3
CHARC BYTE C'FO'
C1 RESB 3
CHARZ BYTE C'EOF'
C3 RESB 3
** END **

这是我得到的输入文件。

下面是中间文件和它的目标代码。

COPY    START   3000
3000    **  LDA THREE
3003    **  STA ALPHA
3006    **  LDCH    CHARC
3009    **  STCH    C1
3012    **  LDCH    CHARZ
3015    **  STCH    C3
3018    ALPHA   RESW    3
3027    THREE   WORD    3
3030    CHARC   BYTE    C'FO'
3031    C1  RESB    3
3034    CHARZ   BYTE    C'EOF'
3035    C3  RESB    3
3038    **  END **

H^COPY^003000^003038
T^003000^37^333027^443018^533030^573031^533034^573035^000003^464f^454f46
E^003000

我以为文本长度(T部分)应该是"35",但根据我得到的结果,它是"37"。我不明白这部分。有人能告诉我确切的长度计算方法吗?

我的程序(我设计的)也给了我35的值,所以这很令人困惑。

中间文件和目标代码中有一些错误。

  • SIC目标代码使用十六进制地址。所以第一条指令的地址不是3000,而是0xbb8
  • H记录中,程序名称的长度应为6,因此应使用空格填充。第二个数字应该是程序长度,而不是最后一条指令的地址。
  • 如果在汇编代码中使用RESW,则应在目标代码中注明空白。您可以为整个保留空间添加零,或者(特别是在保留空间较大的情况下)使用下一条指令的地址开始新的T记录。
  • 有一个错误在'FO',你只添加1的地址,而不是2。
  • 你是否使用了一些修改过的SIC组件?有**,我想,这表明缺少标签。此外,操作码似乎也有所不同。但除此之外,它似乎是来自Leeland Beck的System Software的SIC组件。

这是中间文件。每个地址用十进制和十六进制格式写。然后为每条指令生成目标代码。

dec   hex      objCode   assembly -------------
3000  0x00BB8            COPY   START   3000    
3000  0x00BB8  030BD3           LDA     THREE    
3003  0x00BBB  0F0BCA           STA     ALPHA    
3006  0x00BBE  530BD6           LDCH    CHARC    
3009  0x00BC1  570BD8           STCH    C1    
3012  0x00BC4  530BDB           LDCH    CHARZ    
3015  0x00BC7  570BDE           STCH    C3    
3018  0x00BCA  00....00  ALPHA  RESW    3    
3027  0x00BD3  000003    THREE  WORD    3    
3030  0x00BD6  464F      CHARC  BYTE    C'FO'    
3032  0x00BD8  000000    C1     RESB    3    
3035  0x00BDB  454F46    CHARZ  BYTE    C'EOF'    
3038  0x00BDE  000000    C3     RESB    3    
3041  0x00BE1                   END     COPY    

和最终目标代码:

H^COPY  ^000BB8^000029
T^000BB8^12^030BD3^0F0BCA^530BD6^570BD8^530BDB^570BDE
T^000BD3^05^000003^464F
T^000BDB^03^454F46^
E^000BB8

我假设你写的是扩展版本(SIC/XE)和简单的寻址。

最新更新