如何在没有XOR指令的CPU上进行异或

pat*_*019 7 assembly

这更像是一个有趣的问题.我正在研究SC61860 CPU,它是1987年夏普PC-1360掌上电脑的8位CPU(也用于PC-1401和1403).它的指令集实际上并不包含异或.它有AND,OR,比较,减法和加法指令.

我尝试了一些ANDing和ORing值的变体来获得XOR会产生的结果,但没有运气.我希望避免比较,但看起来我没有选择.

如果您有兴趣,可以查看说明书.

顺便说一下,这个CPU非常适合学习装配.好的,简单的,足够慢(768kHz),机器语言明显快于使用BASIC内置的计算机;)我通常用C/C++/Java编程.装配一直呼吸着新鲜空气.

Eug*_*Sh. 11

从布尔代数我们知道:

A XOR B = (NOT(A) AND B) OR (A AND NOT(B))
Run Code Online (Sandbox Code Playgroud)

更新:感谢@Brett Hale,@ slabetman,因为CPU出人意料地不支持该NOT指令,它可以通过算术否定和减法来模拟,假设2的补码为负数表示):

NOT(A) = (-1) - A
Run Code Online (Sandbox Code Playgroud)

或者在不同的负表示的情况下,-1可以用相应的存储类型最大值替换(即8位寄存器为255或16位寄存器为65565).

  • `NOT(A)= - 1 - A`,对于8/16位寄存器,它是:`255 - A`或'65535 - A`. (3认同)
  • @BrettHale:小心假设2s补.这些带有奇怪指令集的奇怪CPU中的一些有时使用有符号整数而不是2s补码.因此,如果-1实际上等于128而不是255,那么做"255 - A"会更安全. (2认同)