【发布时间】:2015-11-23 00:29:33
【问题描述】:
我正在尝试学习 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。我该怎么做?
【问题讨论】:
-
该示例似乎计算单个数字中的设置位,而不是检测数组中的负数。所以它不是很有用。无论如何,添加零用于设置标志,以便您可以检查数字是否为负。
BRZP用于跳过零或正的增量,而不是负数。它在这里用于检查最高有效位(符号位),同时将所有其他位移到该位置。