2013-11-27 82 views
0

您好,我是一名初學者,使用lc3彙編語言,我有這個任務:如何以lc3彙編語言實現PRINT子程序?

我需要實現打印,右移和shift子例程如下所示,任何這些子例程的幫助將不勝感激: (不完整代碼低於在末端)

而且所有子程序必須保存/恢復所有工作寄存器包括R7

甲LSHR算法在這裏給出:http://users.cis.fiu.edu/~pestaina/RightShift.pdf。 通過實現邏輯右移算法完成RSHIFT子例程要測試RSHIFT,用JSR RSHIFT臨時替換MAIN中的JSR SHIFT指令。程序現在應該顯示原始和右移數據六次。

完成SHIFT子程序。要移位的數據在R0中傳遞; R1中的值表示移位類型如下: LSHL LSHR ASHL ASHR CSHL CSHR .. 0000 .. 0001 .. 0010 .. 0011 .. 0100 ..0101 提示:移位方向總是在R1 [0]中描述;算術移位由R1表示[1];循環移位由R1 [2]表示。提示:所有左移都可以實現爲邏輯左移LSHL的微小變化。 LSHL可以通過簡單地將數據與自己相加來完成。 提示:所有右移都可以實現爲已在RSHIFT子例程中實現的邏輯右移的變體。

這裏有一個簡單的打印算法:

do 16 times 
{ 
    output (Reg[15] ? ‘1’ : ‘0’); 
    ShiftLeft(Reg ); 
} 

,這是我需要完成

.ORIG x3000 
MAIN 
LEA R3, DATA ;R3 - Pointer to 1st Test Datum 
TEST 
LDR R2, R3, #0 ;R2 - Get next Test Datum 
BRZ EXIT  ;  Exit if 0 

AND R1, R1, #0 ;R1 - Shift Type initially 0 
LEA R5, CAPS ;R5 - Pointer to 1st Caption 
NEXT 
AND R0, R5, #-1 ;R5 - Display Caption LSHL, etc. 
TRAP x22 
LD R0, CR_LF 
TRAP x21 

ADD R0, R2, #0 ;  Display Original Datum 
JSR PRINT 
LD R0, CR_LF 
TRAP x21 

ADD R0, R2, #0 ;  Shift Original Datum 
JSR SHIFT  ;R0 - Shifted Datum 

JSR PRINT  ;  Display Shifted Datum 
LD R0, CR_LF 
TRAP x21 

ADD R5, R5, #5 ;R5 - Locate next Caption 
ADD R1, R1, #1 ;R1 - Sequence to next Shift Type 
ADD R4, R1, #-5 ;  Test Shift Type 
BRNZ NEXT  ;  Exit if > 5 

ADD R3, R3, #1 ;R3 - Locate next Test Datum 
BRNZP TEST  ;  Repeat 
EXIT 
TRAP x25  ;  Halt 
;Variables 
DATA .FILL x9875  ;Test Datum 
     .FILL x0000  ;Sentinel 
CR_LF .FILL x000A  ;New-Line \n 
CAPS .STRINGZ "LSHL"  ;Captions 
     .STRINGZ "LSHR" 
    .STRINGZ "ASHL" 
     .STRINGZ "ASHR" 
    .STRINGZ "CSHL" 
    .STRINGZ "CSHR" 
;==================================================================== 
PRINT ;Display content of R0 in binary 
    RET 
;==================================================================== 
SHIFT ;Universal Shift Subroutine 
;  R0 - Datum to be Shifted 
;  R1 - Shift Type: 000(0) - LSHL - Logical Left 
;    001(1) - LSHR - Logical Right 
;       010(2) - ASHL - Arithmetic Left 
;       011(3) - ASHR - Arithmetic Right 
;       100(4) - CSHL - Circular Left 
;       101(5) - CSHR - Circular Right 
RET 
;==================================================================== 
RSHIFT ;Perform a Logical Shift Right on R0 
    ;Shifted result returned in R0 

RET 
;==================================================================== 
.END 
+0

[你有什麼試過](http://whathaveyoutried.com)?請告訴我們在這裏傾銷之前你已經投入了什麼努力。你有一個具體的問題,或者你只是想讓我們爲你做功課?另外,你的老師在[擁有] LOL [http://stackoverflow.com/a/20252389/851811]。 –

+0

我不想讓任何人爲我做任何事情,就像我之前說過的,我是一名初學者使用lc3彙編語言,而我只是希望有人幫助我完成我發佈的任何子例程。如果我發佈整個家庭作業是因爲我不想從你那裏懷疑。我只是要求具體打印或者如果不打印,對於其他任何子程序,以便了解如何執行該子程序,我會做其餘的。謝謝 – user3040046

回答

0

節目我覺得「打印」命令應該是看跌期權。這將打印內存的內容,從R0開始,並以空終止符結束(我認爲)。