assembly 在SIC汇编程序中如何从目标代码中获得文本的长度?

hiz5n14c  于 2023-02-12  发布在  其他
关注(0)|答案(1)|浏览(116)
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的值,所以这很混乱。

06odsfpq

06odsfpq1#

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

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

相关问题