Assembly 数字下2的一次幂
以下代码段是一名学生尝试在PIC汇编中编写查找表的代码。这个 代码应该返回数字N下2的一次幂。所以对于值10,答案是 应该是8,对于7,应该是4Assembly 数字下2的一次幂,assembly,bit-manipulation,pic,Assembly,Bit Manipulation,Pic,以下代码段是一名学生尝试在PIC汇编中编写查找表的代码。这个 代码应该返回数字N下2的一次幂。所以对于值10,答案是 应该是8,对于7,应该是4 nop nop retlw 8 Nop Nop Nop retlw 4 Nop retlw 2 Nop retlw 0 lesspow subwf PCL, F 我怎么能用一个子程序重写上面的代码,这个子程序使用除add和add之外的任何指令 减去 这是你的家庭作业: lesspow: movwf temp clrc r
nop
nop
retlw 8
Nop
Nop
Nop
retlw 4
Nop
retlw 2
Nop
retlw 0
lesspow subwf PCL, F
我怎么能用一个子程序重写上面的代码,这个子程序使用除add和add之外的任何指令
减去 这是你的家庭作业:
lesspow:
movwf temp
clrc
rrf temp,F
iorwf temp,W
clrc
rrf temp,F
iorwf temp,W
clrc
rrf temp,F
iorwf temp,W
clrc
rrf temp,F
iorwf temp,W
clrc
rrf temp,F
iorwf temp,W
clrc
rrf temp,F
iorwf temp,W
clrc
rrf temp,F
iorwf temp,W
movwf temp
rrf temp,F
xorwf temp,W
return
否w您可以添加适当的注释。如果输入已经是2的幂怎么办?对于输入=8,结果是8还是4?如果是8,那么基本上就是隔离最高的集合位。如果PIC可以计算前导零,这可能会有所帮助。否则,您可以循环清除最低设置位(
x&=x-1
),直到它变为零,然后返回上一个x
。假设您可以实现x-1
,而不使用sub
指令。如果它是2的幂,它将返回自身。。。。你能帮我查一下密码吗。。。。非常感谢你。。。。但是为什么我不能添加适当的注释呢?我没有得到它…我有一个问题,什么是“irowf”指令。。。。。非常感谢。again@Dan:未注释的代码转储和对算法的解释基本上永远都不是堆栈溢出的好答案;它对未来的读者帮助不大。这也基本上与中的回答准则相反,如果您关心这些准则的话。如果你认为这是一个值得回答的有趣问题,那就好好回答吧,我的意思是。@PeterCordes,原来的海报问题就是同一类示例代码。在我看来,这个答案和那个答案一样好。如果你认为这个答案应该被删除,那就这么说吧,我马上就去做。@Dan1138:我想如果我必须在未注释的工作代码和删除代码之间做出选择,我想我们应该保留它。如果我知道PIC ISA,我大概可以知道它在做什么。(但这不是我熟悉的ISA之一,它的助记符比一些更神秘;我想我看到了清晰的进位标志,并作为它的一部分向右旋转……)。但理想情况下,添加1或2个句子来描述算法将是这个答案的最佳选择。谢谢大家,我感谢你们的所有努力。。多谢各位