我正在尝试创建一个微程序函数,给定堆栈中的 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 造成的吗?在编写类似的函数来交换第二个和第三个元素时它工作得很好