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的值,所以这很混乱。
1条答案
按热度按时间06odsfpq1#
中间文件和目标代码中有一些错误。
3000
而是0xbb8
。H
记录中,program name的长度应该是6,所以你应该用空格来填充它。第二个数字应该是程序的长度,而不是最后一条指令的地址。RESW
,则应在目标代码中指明空白空间。您可以为整个保留空间添加零,或者(特别是在保留空间较大的情况下)使用下一条指令的地址开始新的T
记录。'FO'
处有一个错误,您只向地址中添加了1,而不是2。**
,我想,这表示缺少标签。操作码也似乎不同。但除此之外,它似乎是来自Leeland Beck的系统软件的SIC汇编。这是一个中间文件。每个地址都是用十进制和十六进制格式写的。然后为每个指令生成目标代码。
最终目标代码:
我假设你是写的扩展版本(SIC/XE)与简单的寻址。