簡體   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