Assembly 如何用lc3汇编语言实现打印子例程?
你好,我是lc3汇编语言的初学者,我有一个任务: 我需要实现下面显示的打印、右移位和移位子例程,请使用这些子例程中的任何一个:(不完整的代码在下面的末尾) 此外,所有子程序必须保存/恢复所有工作寄存器,包括R7 此处给出了一个LSHR算法:。 通过实现逻辑右移算法来完成RSHIFT子程序,以测试RSHIFT,暂时用JSR RSHIFT替换MAIN中的JSR Shift指令。程序现在应该显示原始数据和右移数据六次 完成移位子程序。要移动的基准面在R0中传递;R1中的值表示换档类型,如下所示: LSHL LSHR ASHL ASHR CSHL CSHR 0 1 2 3 4 5 .. 0000 .. 0001 .. 0010 .. 0011 .. 0100 ..0101 提示:换档方向始终在R1[0]中描述;算术移位由R1[1]表示;圆周位移由R1[2]表示。 提示:所有左移位都可以作为逻辑左移位LSHL的微小变化来实现。LSHL可以通过简单地添加自身的数据来完成。 提示:所有右移都可以作为逻辑右移的变体来实现,该变体已经在RSHIFT子例程中实现 下面是一个简单的打印算法:Assembly 如何用lc3汇编语言实现打印子例程?,assembly,subroutine,bit-shift,lc3,Assembly,Subroutine,Bit Shift,Lc3,你好,我是lc3汇编语言的初学者,我有一个任务: 我需要实现下面显示的打印、右移位和移位子例程,请使用这些子例程中的任何一个:(不完整的代码在下面的末尾) 此外,所有子程序必须保存/恢复所有工作寄存器,包括R7 此处给出了一个LSHR算法:。 通过实现逻辑右移算法来完成RSHIFT子程序,以测试RSHIFT,暂时用JSR RSHIFT替换MAIN中的JSR Shift指令。程序现在应该显示原始数据和右移数据六次 完成移位子程序。要移动的基准面在R0中传递;R1中的值表示换档类型,如下所示: LS
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
我认为“Print”命令应该是PUTS。这将打印内存的内容,从R0开始,以空终止符结束(我想) ??在把问题抛到这里之前,告诉我们你在这个问题上付出了什么努力。你有什么特别的问题吗,或者你只是想让我们帮你做作业?还有,你的老师也笑了。我不希望任何人为我做任何事情,正如我之前所说的,我是lc3汇编语言的初学者,我只是希望有人在我发布的任何子程序中帮助我。如果我把整个作业都贴出来,是因为我不想让你有任何怀疑。我只是要求打印具体的,或者如果没有,任何其他的子程序,为了得到如何做这个子程序的想法,我会做剩下的。非常感谢。