我试图创建一个微程序功能,给定堆栈中的4个值,交换第3个和第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
这是一个示例程序:
。主要 开始:BIPUSH 0x39 BIPUSH 0x30 BIPUSH 0x36 BIPUSH 0x35 MSWAP OUT OUT OUT OUT 停 .END-主
它应该输出5690 可悲的是,产量只有56 它错过了"错过"两个桩元素..这是由于过度使用SP = SP -1?当写一个类似的函数来交换第二和第三个元素时它工作得很好
答案 0 :(得分:0)
mswap5正在使用H,但尚未设置H.你的意思是在早期的指令中设置它吗?
只需要两次读取和两次写入。
不需要更改SP以访问堆栈。使用H,那么您不必在例程结束时调整SP。