如何在汇编时切换1位并将1位设置为0,只有XOR,OR,AND?

时间:2014-06-10 14:41:06

标签: assembly bitwise-operators

目前我正在使用学校提供的指令数量有限的芯片。我想要实现的是首先用掩码切换一个位然后将一些位设置为零。只有3条指令:AND,OR,XOR。 (没有SHIFT NOT指令)

例如

0001 1001   // toggle bit 5
0000 1001   
0001 1001   // set bit 1 to 0
0001 1000

我正在尝试使用H桥生成PWM。

编辑:

修正:

; toggle bits
LOAD    R0 [GB+OUTPUT_BUF]
XOR     R0 CONV_FORW_MASK
XOR     R0 FLIP_FORW_MASK
XOR     R0 PUSH_FORW_MASK
XOR     R0 PUSH_BACK_MASK

; set mask bit to zero  
LOAD    R1 PUSH_FORW_MASK
XOR     R1 -1
AND     R0 [R1]

2 个答案:

答案 0 :(得分:1)

实际上,一条指令NAND(与结果反转的AND)就足够了,因为你可以从其中4条指令构建一个XOR(提示,提示)。 我建议通过尝试仅从NAND构建XOR来开始锻炼。然后其余部分可能会自行落实到位。

答案 1 :(得分:1)

在C中它将是:

unsigned char byte = 0x19;

unsigned char bit_set = (0x01 & byte) ^ byte;

unsigned char bit_toggle = ((byte ^ 0x10) & 0x10);

byte = ( byte & 0xEF ) | bit_toggle ;

现在转换为汇编。