【问题标题】:Bug in LC-3 assembly code-finding maximum number in listLC-3 汇编代码中的错误 - 查找列表中的最大数量
【发布时间】:2018-03-21 16:09:41
【问题描述】:

我的代码中有一个错误,它应该在非负数列表中找到最大值并将该值放入 R5。列表开头的内存位置在 R2 中,数字列表的结尾用负值表示。也就是说,如果R2=x4000,并且内存的内容是:x4000=5,x4001=1,x4002=-1,那么值5应该放在R5中。但是有一个错误可以防止这种情况发生。 我的教授说我只需要在某处添加一个单行就可以了。 任何帮助表示赞赏!

这是我的汇编代码:

.ORIG x3000

SETUP LEA R2, DATA ; set R2    
START AND R5,R5,#0
LOOP LDR R3,R2,#0
ADD R2,R2,#1
NOT R4,R5
ADD R4,R4,#1    
ADD R4,R3,R4
BRn LOOP
ADD R5,R3,#0
BRnzp LOOP ;loop
QUIT HALT

DATA .FILL #6
.FILL #8
.FILL #11
.FILL #2
.FILL #0
.FILL #5
.FILL #-4
.END

【问题讨论】:

  • 所以你来这里是为了让我们为你做这件事?也许告诉你的教授你需要更多的解释。他因教你而获得报酬......
  • 我是来寻求帮助的

标签: assembly lc3


【解决方案1】:
.ORIG x3000

SETUP LEA R2, DATA ; set R2    
START AND R5,R5,#0  
LOOP LDR R3,R2,#0   
**BRn QUIT  ;Ends the loop once the list has a negative number in it**  
ADD R2,R2,#1   
NOT R4,R5   
ADD R4,R4,#1    
ADD R4,R3,R4  
BRn LOOP  
ADD R5,R3,#0  
BRnzp LOOP ;loop  
QUIT HALT

DATA .FILL #6  
.FILL #8  
.FILL #11  
.FILL #2  
.FILL #0  
.FILL #5  
.FILL #-4  
.END

【讨论】:

    【解决方案2】:

    我不知道你正在编程的 ASSM,下面是 PSEUSO 代码 ASSM(我最后一次写 ASSM 是在 1991 年):

    BEGIN:
      MOV AX,R2 // Start of data
      MOV BX,-1 // Initial value
    START:
      PEEK AX,CX // Get 1st location to CX
      CMP CX,0 // Compare with zero
      JMP_LESS END // End of list reached
      CMP CX,BX
      JMP_GT ASSIGN // Do the assign
      INC AX // Next address
      JMP START:
    ASSIGN:
      MOV BX,CX // BX now has the bigger #
      INC AX // Next address
      JMP START
    END:
      # Do stuff with highest #
      # Do cleanup
    LIST:
    8
    11
    5
    -4
    

    希望它能让您知道问题出在哪里。

    【讨论】:

    • 您的 peek 指令的目的地位于右侧,但您使用的所有常规 x86 指令的目的地位于左侧。这太奇怪了。使用mov cx, [ax],或load cx, [ax],如果你想弥补助记词。
    • 这帮我弄明白了!我知道当列出的数字为负数时我必须打破循环,但我想太多了。当 R3 为负数时,只需添加一个休息时间即可退出。超级简单
    • 只是为了给提出问题的人一个想法(伪代码)......我在 1988 年到 1991 年期间用 Z80、MC68008 和 386 编写了一个完整的操作系统。这不是“get browny”积分'(赢得年度程序员奖等,只是想帮助某人解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多