我正在做一个项目,如下所示:
您将编辑您为 Lab #9 编写的程序,该程序提示用户输入要旋转 (AMOUNT) 给定值 (ORIGINAL) 的位数,并存储旋转后的 (ROTATED) 值。
对于本实验练习,您需要在控制台上将 ORIGINAL 和 ROTATED 位的值显示为带有正确标签的 16 个字符的字符串。
示例:如果 ORIGINAL 包含位模式 1111000000001111 并且用户输入 5 作为要旋转的量,那么您的程序应显示以下输出:
数量:5
原文:1111000000001111
旋转:0000000111111110
我的代码如下:
.ORIG x3000
LEA R0 PROMPT ; loads R0 with the starting address of prompt
PUTS ; prints prompt
LD R0 ENDLINE
OUT
GETC
OUT
ADD R4 R0 #0
ADD R4 R4 #-16
ADD R4 R4 #-16
ADD R4 R4 #-16
GETC
OUT
ADD R5 R0 #0
ADD R5 R5 #0
ADD R5 R5 #-16
ADD R5 R5 #-16
ADD R5 R5 #-16
ADD R4 R4 #0
BRz zloop
ADD R5 R5 #10
zloop
ST R5 AMOUNT
ST R6 AMOUNT
LD R2, MASK ; MASK = 1000 0000 0000 0000 for checking MSB
LD R0, ORIGINAL ; ORIGINAL = xF00F
loop2
AND R3, R2, R0 ; checks to see if MSB is 0 or 1(negative)
BRn loop ; ignores next code if negative (i.e. MSB = 1)
ADD R0, R0, R0 ; Left Shift
ADD R5, R5, #-1 ; AMOUNT--
ADD R6, R6 #1
BRp loop2 ; if still positive, repeat check from above
BRz loop3 ; if negative, we're done! so jumps to store final ORIGINAL value
loop ; comes here after checking if MSB is 1
ADD R0, R0, R0 ; left shift
ADD R0, R0, #1 ; add 1 to rotate
ADD R5, R5, #-1 ; decrement amount
ADD R6, R6 #1
BRp loop2 ; if positive, we still have work to do. jumps up to loop2 to go through check again
loop3 ; we will arrive here if ORIGINAL value is positive and AMOUNT is 0
LD R0 ENDLINE
OUT
LEA R0, AMOUNTSTR
PUTS
ADD R0 R6 #0
HALT
OUT
LD R0 ENDLINE
ST R0, ROTATED ; stores original into ROTATED
ENDLINE .FILL x000A
AMOUNT .FILL x001E
ROTATED .BLKW #1
ORIGINAL .FILL xF00F
ORIGSTR .STRINGZ "ORIGINAL: 1111000000001111"
AMOUNTSTR .STRINGZ "AMOUNT: "
MASK .FILL x8000
PROMPT .STRINGZ "Enter a two digit number to rotate a binary string up to 16 bits. Example: 05"
.END
当我运行它并输入数字时,我要么得到一个带有问号的正方形,要么得到一个我不需要的 ASCII 码。我试图查看是否必须添加相应的 ASCII 值差异才能获得我正在寻找的字符,这就是我不断收到被阻止的问号的时候。
任何帮助,将不胜感激!