繁体   English   中英

LC-3 汇编代码中的错误 - 查找列表中的最大数量

[英]Bug in LC-3 assembly code-finding maximum number in list

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

这是我的汇编代码:

.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
.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

我不知道你正在编程的 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

希望它能让你知道你的问题在哪里。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM