LC3汇编 - 如何切换二进制数中的最低位?

时间:2017-11-21 04:30:03

标签: assembly lc3

我想知道是否有办法在二进制中切换低位。
例如:
01000001 - > 切换低位 - > 01000000
仅更改右侧的最后一位。
如果您不熟悉LC3,它只能进行以下操作:

  • ADD

  • 不是

2 个答案:

答案 0 :(得分:3)

这通常是通过XOR操作完成的。

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

答案 1 :(得分:1)

如果最低位为0,则需要添加1。

如果最低位为1,则需要添加-1。

因此,如果输入是 a ,那么:

 x = a and 1    ; x = 0/1 depending on lowest bit
 x = x + x      ; x = 0/2
 x = not x      ; x = -1/-3
 x = x + 2      ; x = +1/-1
 r = a + x      ; will toggle lowest bit of original a

我假设在LC3中使用了二进制补码负整数值,因此NOT 2 == -3-1 + 2 = +1

不幸的是我不知道LC3,所以我希望我的步骤相当简单,可以通过LC3指令实现,算法也很有意义。

其他选项是使用NOT切换位(不是添加):

 x = a and (not(1)) ; (0xFFFE in case of 16b word)
     ; x = copy of all bits of A except bottom bit (bottom bit = 0)
 y = not(a) and 1   ; extract toggled bottom bit (1/0)
 r = x + y          ; compose the value back from the upper:lowest bit(s)

编辑:米奇在他的回答中做了什么。