![](/img/trans.png)
[英]The most efficient way of counting positive, negative and zero number using loop unrolling
[英]Counting occurances of a negative number from a list
我正在尝试学习LC-3组装并查看以下示例:
.orig x3100
ADD R3, R0, #0 ;copy R0 into R3
AND R1, R1, #0 ;clear count
ADD R3, R3, #0 ;test for Neg
BRZP NEXT ;count if Neg
ADD R1, R1, #1
NEXT AND R2, R2, #0 ;check remaining 15 bits
ADD R2, R2, #-15
LOOP ADD R3, R3, R3 ;shift R3 left
BRZP AGAIN ;count if Neg
ADD R1, R1, #1
AGAIN ADD R2, R2, #1 ;loop until done
BRN LOOP
有几点我不太了解:
ADD R3, R3, #0 ;test for Neg
我看不到它是如何测试负值的:我正在阅读它,因为它对R3没有任何作用,即它什么也没做。 在下面的代码行中,我不太了解BRZP
。
我想更改此示例,而不是从整数列表中进行检查:
INTEGERS .fill 84
.fill -2
.fill -13
.fill 4
.fill -4
在上面,有三个负整数,因此在程序结束时,计数(R1)将为3。 我该怎么做?
我假设ADD R3, R3, #0 ;test for Neg
将根据结果设置标志,因此条件分支将基于ADD
存储到R3
的结果。
正如Jester指出的那样,似乎在循环使用单个整数对设置位进行计数,使用add r3,r3,r3
将其左移并设置标志。
我不特别了解lc3,但看起来您可以通过清除计数器并ADD R3, R0, #0 ;copy R0 into R3
来保存指令ADD R3, R0, #0 ;copy R0 into R3
最初会负责设置标志。
LC3没有mov
指令,我接受。 您可以通过添加立即数零来复制数据,因为与x86不同,它使用3操作数指令,而dest不必是src指令之一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.