subleq: subtract and branch if less than or equal to zero. 很有名的一個one instruction set computer.
(請各位注意審題啊,問的是一條“指令”,是ISA層面的問題。所以XOR這樣的答案是不對的,XOR屬於硬體實現層面。更何況XOR只能實現所有的組合邏輯,但是時序邏輯也無法實現嘛。)
這條指令實現起來虛擬碼如下:
subleq a, b, c
mem[b] = mem[b] - mem[a];
if (mem[b] <= 0), branch to c;
a, b, c都是virtual address, 這樣“mem[b] = mem[b] - mem[a]”的反覆呼叫可以實現所有的計算,以及資料的儲存和呼叫。“if (mem[b] <= 0), branch to c”可以實現分支(branch)。
更細一點來說,mem[a], mem[b]是從地址a,b呼叫數值,做減法,然後存回地址b. 既然可以做減法了,那複雜一點的組合就可以輕鬆實現加減乘,然後再用一些數值方法實現除法,相對複雜。所以load-store和arithmetic功能都具備了。而且根據減法的結果決定是否跳轉,實現了conditional branch, 那麼unconditional branch的只要程式稍微聰明一點就可實現。那麼機器語言的所有功能其實都能實現了。只不過現實中不太會有人真的這麼設計計算機。
參考了Wikipedia的One instruction set computer,還有其他例子,但原理是類似的。
subleq: subtract and branch if less than or equal to zero. 很有名的一個one instruction set computer.
(請各位注意審題啊,問的是一條“指令”,是ISA層面的問題。所以XOR這樣的答案是不對的,XOR屬於硬體實現層面。更何況XOR只能實現所有的組合邏輯,但是時序邏輯也無法實現嘛。)
這條指令實現起來虛擬碼如下:
subleq a, b, c
mem[b] = mem[b] - mem[a];
if (mem[b] <= 0), branch to c;
a, b, c都是virtual address, 這樣“mem[b] = mem[b] - mem[a]”的反覆呼叫可以實現所有的計算,以及資料的儲存和呼叫。“if (mem[b] <= 0), branch to c”可以實現分支(branch)。
更細一點來說,mem[a], mem[b]是從地址a,b呼叫數值,做減法,然後存回地址b. 既然可以做減法了,那複雜一點的組合就可以輕鬆實現加減乘,然後再用一些數值方法實現除法,相對複雜。所以load-store和arithmetic功能都具備了。而且根據減法的結果決定是否跳轉,實現了conditional branch, 那麼unconditional branch的只要程式稍微聰明一點就可實現。那麼機器語言的所有功能其實都能實現了。只不過現實中不太會有人真的這麼設計計算機。
參考了Wikipedia的One instruction set computer,還有其他例子,但原理是類似的。