2016-03-08 39 views
0

編寫一個LC-3 彙編代碼,用於查找內存中正數列表的最大值。 R0 包含列表開始的內存中的位置,並且 數字列表的末尾由零或負數表示。代碼應將列表中值最大的 放入寄存器R5中。如果列表的第一個數字爲零或 爲負數,則R5應該包含零。 例如,如果R0內容爲X4000,存儲包含以下 值: X4000:10 x4001:20 x4002:15 x4003:-1如何編寫LC-3彙編代碼來查找列表的最大值?

的問題說,有書中的例子但我發現沒有什麼幫助,我寫了一些代碼之前,

.orig x3000 

      LD R1, NUMBER1 ;load NUMBER1 into R1 
      LD R2, NUMBER2 ;load NUMBER2 into R2 

      BRz Equals  ;we jump to Equals if NUMBER1 = NUMBER2 (we can just jump directly to END) 
      BRn GreaterR2  ;we jump to GreaterR2 if NUMBER1 < NUMBER2 
      BRp GreaterR1  ;we jump to GreaterR1 if NUMBER1 > NUMBER2 

Equals  BRnzp End   ; 

GreaterR2 ADD R5, R5, #2 ;R0 = -1 
      BRnzp End 

GreaterR1 ADD R5, R5, #6 ;R0 = 1 
      BRnzp End 

End HALT    ;THE END 


NUMBER1 .FILL #2    ; 
NUMBER2 .FILL #6    ; 

.END 

所以我有這個,但我不知道如何做一個列表後。我可以得到一些幫助嗎?

回答

0

您的列表實際上是一個以數字結尾的空數組。您可以BLKW其次是要通過獲得與LEA列表中的地址,存儲和遞增計數器變量,然後裝入存儲到保留

list: .BLKW 1000 

你可以從這個存儲器中讀取單詞的數量申報內存空間在LDR註冊。

0

.orig x3000 AND R0,R0,#0;清除R0 LEA R1,N1; R1是指向N1的指針 LDR R5,R1,#0; R5是最大值 迴路
LDR R2,R1,#0;加載數字到R2 ADD R1,R1,#1;增量指針

ADD R2,R2,#0 BRz Exit;如果號碼是cero,跳到退出 BRn退出;如果編號爲負,則跳至退出

;數字是正數,因此檢查哪一個是最大的,並且R3,R3,#0;清除R3 ADD R3,R2,#0;計算值2補
NOT R3,R3 ADD R3,R3,#1 ADD R6,R3,R5 BRP環路 BRZ環路 ;新的最高 和R5,R5,#0 ADD R5,R2,#0 BR環路

退出 HALT

.fill僞N1#10 .fill僞N2#20 .fill僞N3#15 N4 .FILL#-1

.END