双通道汇编程序 - 创建对象程序

时间:2015-07-11 21:14:24

标签: assembly

想知道如何确定每个文本记录中的目标代码的长度。我知道长度以字节为单位表示为十六进制,但是,特定于任何地方都不知道大小。这是由汇编程序任意选择的吗?

这是我从书中获取的对象程序的一个例子

“系统软件 - 系统编程简介”,作者: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--而不是如何计算它们。谢谢!

1 个答案:

答案 0 :(得分:3)

首先,注意"没有与地址1033-2038对应的目标代码。 这个存储只是由加载程序保留,供用户使用 执行期间的程序。"

接下来,要意识到输出缓冲区最大为1E字节。

因此第一行是1E,因为使用了整个输出缓冲区。

但是下一行只有15,因为保留的内存不会生成操作码,所以缓冲区不会一直填充。

下一行是操作码的完整1E缓冲区,但请注意其起始地址与前一代码不相邻,而是在保留内存之后开始。

下一行有一个内联单字节(F1),因此在1E大小的缓冲区中没有空间用于最后一个完整操作码,因此该行在1C处被剪切。 (因为1E-1C = 2且下一个操作码需要3个字节)

最后一行只有程序的最后7个字节。