想知道如何确定每个文本记录中的目标代码的长度。我知道长度以字节为单位表示为十六进制,但是,特定于任何地方都不知道大小。这是由汇编程序任意选择的吗?
这是我从书中获取的对象程序的一个例子
“系统软件 - 系统编程简介”,作者:Leland L. Beck
H COPY 001000 00107A
T 001000 1E 141033 482039 001036 281030 301015 482061 3C1003 00102A 0C1039 00102D
T 00101E 15 0C1036 482061 081044 4C0000 454F46 000003 000000
T 002039 1E 041030 001030 E0205D 30203F D8205D 281030 302057 549039 2C205E 38203F
T 002057 1C 101036 4C0000 F1 001000 041030 E02079 302064 509039 DC2079 2C1036
00 001573 07 382064 4C0000 05
E 001000
我怀疑的是如何选择这些长度 - 1E,15,1E,1C和07--而不是如何计算它们。谢谢!
答案 0 :(得分:3)
首先,注意"没有与地址1033-2038对应的目标代码。 这个存储只是由加载程序保留,供用户使用 执行期间的程序。"
接下来,要意识到输出缓冲区最大为1E字节。
因此第一行是1E,因为使用了整个输出缓冲区。
但是下一行只有15,因为保留的内存不会生成操作码,所以缓冲区不会一直填充。
下一行是操作码的完整1E缓冲区,但请注意其起始地址与前一代码不相邻,而是在保留内存之后开始。
下一行有一个内联单字节(F1),因此在1E大小的缓冲区中没有空间用于最后一个完整操作码,因此该行在1C处被剪切。 (因为1E-1C = 2且下一个操作码需要3个字节)
最后一行只有程序的最后7个字节。