![](/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.