0

我正在做一个项目,如下所示:

您将编辑您为 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 值差异才能获得我正在寻找的字符,这就是我不断收到被阻止的问号的时候。

任何帮助,将不胜感激!

4

0 回答 0