跳转指令微型计算机,哪种类型的汇编程序跳转指令最有用?

Ira Baxter..

5

(我已经为汇编程序编写了40多年;实际上在20世纪70年代早期设计并构建了一个生产多寄存器16位机器).真正有用的是CMP指令和指定该条件的JMP相对.

我建议你让算术指令产生状态位

零结果

从结果出发

结果的标志

溢出(签名)

我们称之为"条件位".你会发现它们都很有用.

你的比较指令基本上应该做一个减法,然后把答案扔掉,设置条件位.

您的JMP指令应使用16个操作码之一,3位条件选择器和PC的9位相对偏移量,例如,与PC的跳转相对条件.短相对分支在代码中非常有用.

3位条件选择器应使用两位来选择4个条件中的一个,并使用一位来选择"反转".这样你可以有"jmp zero","jmp not zero"等.

您可以将"跳过无溢出"视为"始终跳跃"; 这些代码非常方便.(我不明白你怎么想"jmp无条件"和"从子程序返回"可以是同一条指令).

从讨论中的评论来看,似乎你没有任何注册.从代码紧凑性(特别是16位指令)和性能(寄存器访问速度总是快于内存)来看,这是一个严重的错误.在操作码命名寄存器后,我会使用2或3或12位.

Aha:在编辑中,OP注意到他有A和B寄存器,可能是由操作码隐式选择的.我设计的机器受PDP-11的启发,但有16个基本操作码和8个寄存器(留下9位"操作数"),它在编码方面确实有所不同.大多数指令将这9位分为寻址模式和偏移:直接(使用第二个字作为地址),立即(第二个字),立即(7位,意味着机器可以轻松处理ASCII文本),间接第二个寄存器自动 - 增量,间接第二个寄存器自动递减,相对于第二个寄存器的短偏移,以及相对于寄存器的第二个字偏移.它没有堆栈,但您可以使用auto-inc/decrement指令轻松实现一个堆栈,这样就不会丢失.很高兴为您编码.(它还具有带陷阱的虚拟内存,以及寄存器集和VM映射之间的硬件上下文切换).

虽然所有这些听起来都需要复杂的逻辑来解码,但事实并非如此.我们设法用~~ 120个所谓的"中等规模"芯片(每个芯片4个门,多路复用器,4位加法器片等)实现这台机器.这些天我希望你能够在一个FPGA中实现整个过程.

术语混淆,我的坏.GOTO和GOSUB不是一回事,我要在黑板上写几百遍. (3认同)

@Psvedman:在硬件复杂性的完整另一端,可变长度指令集可以提供高代码密度,同时仍然允许大量的操作码和大量的立即数."转义序列"操作码充当下一个操作码的修饰符.无论如何,并不是说你想要实现这样的东西,而是[Agner Fog最近的博客文章提出了高性能计算的指令集.](http://www.agner.org/optimize/blog/read. php?i = 421#470)有一些没有设定的想法.他试图保留一些x86的好处,同时放弃坏处. (2认同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值