首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TAOCP混合汇编语言中"ENT1 *“的含义是什么?

在TAOCP混合汇编语言中"ENT1 *“的含义是什么?
EN

Stack Overflow用户
提问于 2018-06-20 00:19:36
回答 1查看 239关注 0票数 4

在第三版“计算机编程艺术”()一书中,我很难理解以下混合汇编语言指令的含义:ENT1 *,它出现在该书的第189页。

(p.189)例如,如果我们想使MAXN的调用序列成为 JMP MAXN CON n 然后,可以将子例程编写如下: MAXN STJ *+1 ENT1 *

到目前为止,我发现的是下面这一行

代码语言:javascript
复制
MAXN STJ  *+1

将常量n存储的内存地址存储到存储指令ENT1 *的内存位置的0:2字段。

因此,我猜想下面的一行

代码语言:javascript
复制
     ENT1 *

应该加载存储指令ENT1 *以注册I1的内存位置的0:2字段的值。

然而,正如教科书中所述,星号(*)的含义是:

(p.146)星号(读为"self")指其出现的行的位置。

因此,ENT1 *不应该仅仅存储存储指令ENT1 *以注册I1的内存位置的地址吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-20 01:55:44

简短回答

我忽略的一点是,星号(*)是当前位置的值,只有在组装时才值得确认。由于MIX是一种修改指令本身的汇编语言,所以I1 寄存器中存储的值将在运行时中确定。

因此,在这种情况下,星号(*)在ENT1 *中没有任何意义。甚至可以将*更改为任何值,因为存储在I1寄存器中的值将由前面的指令:STJ *+1确定。

用混合生成器进行验证

我已经将以下混合汇编语言代码与从MIX Builder下载的这里 10上的Windows 10汇编语言代码组装在一起。

代码语言:javascript
复制
      ORIG 3000
BEGIN JMP  MAXN
      CON  100
MAXN  STJ  *+1
      ENT1 *
      LD3  0,1
      HLT
      END  BEGIN

装配完毕后,结果是:

我们可以检查第5行ENT1 *中的指令是否将当前内存位置3003存储在0:2字段中。

执行第4行后,第5行的0:2字段更改为3001,即存储常量100的内存位置:

因此,在executin第5行之后,值3001 (而不是3003)将存储在I1寄存器中:

请注意,将4657字节值组合在I1寄存器中将导致3001(= 46 * 64 + 57),即它们是基本64值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50938553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档