在模拟器中跳过指令

时间:2015-07-30 16:13:02

标签: c assembly msp430

所以我在C中为MSP440模拟一个名为IFcc的额外指令,其中cc是条件。它是如何工作的如果条件为真,则执行'真实指令',并跳过'假指令',反之亦然,如果条件为假。该指令有两个参数,TC是条件为真时要执行的指令数,FC是条件为假时要执行的指令数。 以下是汇编代码的示例:

{{1}}

我弄清楚的是,如何忽略不应执行的指令。程序集本身不会更改为使用分支,因为IFcc指令的要点是消除分支的必要性。对此的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我不认识那条指令,这是你在模拟器中发明的指令吗?

假设是这种情况

msp430指令集是可变字长,所以如果你想让逻辑简单地说做或不执行接下来的两条指令,你必须指定指令,但是你不会知道,直到每个指令的第一个字被解码才知道如何很多单词,但是无论你把计数器放入并倒数指令的数量都没关系,只是不执行管道的执行或写回阶段。

在一天结束时,你在这里所做的只是一个条件或分支的条件,这条指令是如何不同的?没有冲洗管道冲洗管道?谁能说一个分支在当前/现代设计中冲洗管道,如果分支足够接近并且管道足够深,那么设计中可能会优化不冲洗和重新填充,而是继续前进和跳过(对于非常常见的情况,分支是由一些少量的单词转发的。)

最简单的是只分支,在跳过指令后将pc设置为单词,你应该已经在分支中实现了这个,但是ASSEMBLER应该是负责计算下一个N中有多少单词的人。说明。可能是在一种情况下跳过两个指令跳过两个单词(向PC添加4)或者其他地方意味着跳过两个指令意味着跳过5个单词。就像指定标签的分支的实现一样,汇编器负责进行多次传递,最后计算标签在指令流中的偏移量。这基本上意味着使这个分支成为一个标签。

如果你不想让它成为带有标签的分支,那么你必须假装执行接下来的N条指令到你解码它们足以知道它们有多少字宽并跳过那么多字,重复一遍要跳过的指令数。运行时没有别的方法可以做到。

答案 1 :(得分:0)

事实证明,我需要通过在内存写入功能周围添加一些条件来阻止指令写回内存。取决于由IFcc设置的机器状态(无条件,真实条件,错误条件),它将写入内存或被阻止写入记忆