2015-12-07 63 views
0

試圖讓這個代碼來運行它是LC3地址簿,但我不斷收到以下錯誤:LC3地址簿錯誤

線21:指令引用標籤「書」不能在9位表示簽署PC偏移

第22行:指令引用標籤「當前」不能在9位有符號PC表示偏移

線67:指令引用標籤「當前」不能在9位表示簽名PC偏移量

行69:指令引用標籤「當前」不能在9位有符號PC表示偏移

線77:指令引用標籤「當前」不能在9位有符號PC表示偏移

線79:指令引用標籤「當前」不能在9位有符號PC表示偏移

線90:指令引用標籤「PROMPT5」不能在9位有符號PC表示偏移

代碼在這裏 - >http://pastebin.com/8nZk3Dfd

任何幫助表示讚賞,發現在線代碼,但要使其工作。

回答

0

你得到這些錯誤的原因是因爲你有更多的字符串後的變量。請記住,.STRINGZ中的每個字符都會佔用一塊內存,並且當您的變量距離想要使用它們的代碼太遠時,您會得到PC偏移錯誤。

如果您在字符串提示之前移動變量,那麼這些錯誤應該消失。

+0

我是新來這個LC3,並試圖瞭解裝配,我只是想運行該程序,然後檢查代碼,看看功能是如何被調用,可能是一個長鏡頭,但會真棒,如果你能幫助我得到這個運行。 – user2360488

0

這裏有一些錯誤修復了,你的程序現在將組裝並至少打印所有的字符串,但是我將把修復運行時錯誤留給你。

.ORIG X3000 ;INITIALIZE PROGRAM 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;REGISTER DATA 

;REGISTER 0 IS USED FOR INPUTTING INFORMATION BY THE USER 
;REGISTER 1 IS USED AS THE MENU TESTER (CAN BE USED, ALWAYS INITIALIZED) 
;REGISTER 2 IS COUNTER WITH R5 (CAN BE USED, ALWAYS REINITIALIZED) 
;REGISTER 3 IS ASCII CONVERTER (CAN BE USED, ALWAYS REINITIALIZED) 
;REGISTER 4 IS USED TO STORE MEMORY LOCATION OF BOOK (DO NOT USE) 
;REGISTER 5 IS USED TO COUNT HOW MANY FILES HAVE BEEN STORED (DO NOT USE) 
;REGISTER 6 IS USED AS A COUNTER IN STORING AND FINDING INFORMATION (DO NOT USE) 
;REGISTER 7 IS UNUSED 
;DO NOT USE R4, R5, R6, R7 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;START OF MAIN CODE 
BRnzp MAIN 
PROMPT .STRINGZ "Enter 1 to add a new record and 2 to find a record and 0 to exit:" 
FULLBK .STRINGZ "Address book is full. Would you like to find a record?" 

MAIN 
AND R5, R5, #0 ;INITIALIZES REGISTER 
LD R0, BOOK 
LDI R0, CURRENT 
MENU   ;MENU FUNCTION 
LEA R0, PROMPT ;PROMPT THEM TO ADD OR FIND 
PUTs 
IN 
LD R3, NTHIRTY ;LOADS NEGATIVE THIRTY INTO R3 
ADD R0,R0,R3 ;CONVERTS R0 INTO DECIMAL FROM ASCII 
BRnz SKIP ;CONTINUE IF NOT A 0 OR NEGATIVE NUMBER 

FNDLOOP LD R1, TWO ;LOAD R2 WITH 2 
ADD R1, R1, #-4 ;MAKES 2 INTO -2 
ADD R1, R0, R1 ;TESTS TO SEE IF USER INPUT WAS A 1 TO FIND AN ADDRESS 
BRn ADDLOOP ;LEAVE FIND LOOP 
BRz FIND ;CALLS THE FIND FUNCTION 
BRp MENU ;INVALID NUMBER, GOT BACK TO MENU 

ADDLOOP LD R1, ONE ;LOAD R1 WITH 1 
ADD R1, R1, #-2 ;MAKES 1 INTO -1 
ADD R1, R0, R1 ;TESTS TO SEE IF USER INPUT WAS A 1 TO ADD AN ADDRESS 
BRnp SKIP ;LEAVE ADD LOOP TO A HALT 
BRz ADDRESS ;CALLS THE ADD FUNCTION 

HOWFULL AND R2, R2, #0 ;INITIALIZES R2 
ADD R2, R2, #-9 ;MAKES R2 -10 
ADD R5, R5, #1 ;INCREMENTS R5 BY 1 
ADD R2, R2, R5 ;ADDS R2 AND R5 TOGETHER, IF R5 BECOMES 10 IT WILL EQUAL 0 
BRz BKFULL ;IF R2 IS ZERO, ADDRESS BOOK IS FULL 
BRnzp MENU ;BACK TO THE BEGINNING 

SKIP  
LEA R0, GBYE ;PROMPTS A GOODBYE MESSAGE 
PUTs 
HALT  ;CALL PROGRAM TO A HALT 

BKFULL 
LEA R0, FULLBK ;PROMPTS A FULL BOOK MESSAGE 
PUTs 
IN 
LD R1, TWO ;LOAD R2 WITH 2 
ADD R1, R1, #-4 ;MAKES 2 INTO -2 
ADD R1, R0, R1 ;TESTS TO SEE IF USER INPUT WAS A 1 TO FIND AN ADDRESS 
BRz FIND ;IF 0 CONTINUES TO FIND FUNCTION 
HALT  ;CALL PROGRAM TO A HALT 

ADDRESS 
LD R6, EIGHT ;INITIALIZES R6 TO BE 8 SO IT CAN LOOP 8 TIMES 
LEA R0, PROMPT2 ;PROMPTS QUESTION TO ENTER A NAME 
PUTs 
LOOP1 IN  ;GET CHARACTER OF NAME 
LD R4, CURRENT ;LOAD ADDRESS OF NAME LOCATION 
ADD R4, R4, #1 ;STORE RECORD INTO THE PLACE 
ST R4, CURRENT 
STR R0, R4, #0 
ADD R6, R6, #-1 ;DECREASES COUNTER R6 BY 1 
BRp LOOP1 ;IF IT IS STILL POSITIVE IT LOOPS TO COMPLETE THE NAME 

LD R6, EIGHT ;INITIALIZES R6 TO BE 8 SO IT CAN LOOP 8 TIMES 
LEA R0, PROMPT3 ;PROMPTS QUESTION TO ENTER A PHONE NUMBER 
PUTs 
LOOP2 IN  ;GET CHARACTER OF RECORD 
LD R4, CURRENT ;LOAD ADDRESS OF NAME LOCATION 
ADD R4, R4, #1 ;STORE RECORD INTO THE PLACE 
ST R4, CURRENT 
STR R0, R4, #0 
ADD R6, R6, #-1 ;DECREASES COUNTER R6 BY 1 
BRp LOOP2 ;IF IT IS STILL POSITIVE IT LOOPS TO COMPLETE THE PHONE NUMBER 
LEA R0, THANKYOU 
PUTs 
BRNZP MENU ;BACK TO MENU 

FIND 
LEA R0, PROMPT2 
IN 

LEA R0, PROMPT3 
IN 

BRNZP MENU ;BACK TO MENU 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;START OF .FILL DATA 

NTHIRTY .FILL x-30 
TEN .FILL #10 
ONE .FILL #1 
TWO .FILL #2 
EIGHT .FILL #8 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;START OF STRING PROMPTS 

THANKYOU .STRINGZ "Thank you!" 
GBYE  .STRINGZ "Goodbye!" 
PROMPT2  .STRINGZ "Enter in an 8 character or less name:" 
PROMPT3  .STRINGZ "Enter in an 8 character or less number:" 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
;;START OF ADDRESS BOOK DATA 

CURRENT .BLKW #1 
BOOK .BLKW #160 

.END  ;END PROGRAM