计算列表中负数的出现次数
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
上面有3个负整数,所以程序结束时计数(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
最初负责设置标志来保存一条指令。
LC3 没有mov
说明,我接受了。您可以通过添加立即数零来复制数据,因为与 x86 不同,它使用 3 操作数指令,其中 dest 不必是 src 指令之一。
我正在尝试学习 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
上面有3个负整数,所以程序结束时计数(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
最初负责设置标志来保存一条指令。
LC3 没有mov
说明,我接受了。您可以通过添加立即数零来复制数据,因为与 x86 不同,它使用 3 操作数指令,其中 dest 不必是 src 指令之一。