如何编写这个 LC-3 代码来计算 R0 中存储的值中 0 的数量并将结果存储到 R1 中

问题描述 投票:0回答:2

如何修改此 LC-3 代码以使其计算 0 而不是 1 的数量

.ORIG x3000
      LD R2, INPUT
      AND  R0, R0, #0   ; COUNTER INITIALIZED TO ZERO
      ADD  R1, R0, #1
      ADD  R3, R0, #15
  LOOP  
      AND R4, R2, R1   
      BRz  SKIP 
      ADD R0, R0, #1
  SKIP  
      ADD R1, R1, R1
      ADD R3, R3, #-1
      BRzp  LOOP
  INPUT .FILL x1997
      .END
assembly lc3 hammingweight bitcount
2个回答
1
投票

你看过它在调试器中是如何工作的吗?  单步执行这个小程序,您就会看到它是如何工作的。

你能在这里找到 if-then 结构吗?  if-then 结构的形式为 if-condition-then-action。  所以,您正在寻找具有这种效果的东西:

if ( bit is set ) 
    R0++;

并且您想将其更改为相反的条件,因此它会计算零。

if ( bit is clear )
    R0++;

其中

bit is clear
! (bit is set)
相同,即相反。

请注意,以上内容是针对 C 等结构化语言而言的。在汇编中,if-condition-then-action 看起来更像是这样:

    if ( condition is false ) goto Label1; // action is skipped if condition is false
    ..action..                             // action runs if condition is true
Label1:

这是因为汇编/机器代码中唯一的控制结构是条件分支,在 C 中看起来像

if ( condition ) goto label;


0
投票

如果,我想,你的程序没问题(我不尝试),一个快速修改是将所有 0 翻转为 1,将 1 翻转为 0。

不做这项工作! 我把练习留给你了。

另一种方法是,如果你数 n 位 1,这意味着你有 16-n 位 0... 再说一次,NOT 是你计算 16-n 的朋友

请注意,两者都保留了可以用作子例程的代码。

不要忘记使用HALT来停止程序

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.