簡體   English   中英

計算列表中負數的出現次數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM