1

我正在尝试创建一个微程序函数,给定堆栈中的 4 个值,交换第三个和第四个值。我称它为“mswap”,这是迄今为止的微码:

mswap1 SP = SP - 1 mswap2 SP = SP - 1
mswap3 MAR = SP - 1
mswap4 rd mswap5 MAR = H
mswap6 wr mswap7 MAR = SP
mswap8 rd mswap9 MAR = SP - 1 mswap10 wr
mswap11 MAR = H mswap12 rd mswap13 MAR = SP mswap14 wr mswap15 SP = SP + 1 mswap16 SP = SP + 1; goto Main1

这是一个示例程序:

.main 开始: BIPUSH 0x39 BIPUSH 0x30 BIPUSH 0x36 BIPUSH 0x35 MSWAP OUT OUT OUT OUT HALT .end-main

它应该给出 5690 的输出 可悲的是,输出只有 56 就像我“错过”了两个堆元素。这是由于过度使用 SP = SP -1 造成的吗?在编写类似的函数来交换第二个和第三个元素时它工作得很好

4

1 回答 1

0

mswap5 正在使用 H,但尚未设置 H。你的意思是在前面的指令中设置它吗?

只需要两次读取和两次写入。

SP 无需更改即可访问堆栈。使用 H,那么您将不必在程序结束时调整 SP。

于 2016-01-16T03:52:24.280 回答