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