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