SIC汇编目标代码T部分文本长度计算存疑,求正确方法
SIC汇编目标代码T记录长度计算方法解析
输入的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记录长度的准确计算方法
SIC目标代码中T记录的长度字段是2位十六进制数,代表该记录覆盖的连续存储块总字节数,计算步骤如下:
- 确定T记录的起始地址(本例为
003000) - 找到该记录覆盖的最后一个有实际内容(指令或数据)的存储地址:
从中间文件可知,CHARZ BYTE C'EOF'起始于3034,占3字节,因此最后一个有内容的地址是3036 - 总字节数 = 最后一个有内容的地址 - 起始地址 + 1
代入数值计算:3036H - 3000H + 1 = 37H(十进制为55),这就是T记录中37的由来
计算结果偏差的原因
你得出的35是错误地仅统计了实际有指令/数据的字节数,或是误判了最后一个有内容的地址。T记录的长度按连续存储块的整体范围计算,而非仅实际有内容的字节数——即使中间存在RESW/RESB预留的空字节,只要在起始地址到最后一个有内容地址的范围内,都要计入总长度。
内容的提问来源于stack exchange,提问作者Dalim Oh
相关产品推荐
相关产品推荐

