我正在尝试编写一个简单的程序,它从Data1获取一个16位整数,计算多少位是1位,然后将结果打印到屏幕上。我很确定我的代码应该做的伎俩,但由于某种原因,我得到的输出是一个小盒子符号,而不是实际的整数值。有谁知道为什么我得到这个输出,我怎么能改变它?这是我的代码:
.orig x3000 ;start at address x3000
LD R1, Data1 ;load R1 with Data1
AND R2, R2, #0 ;clear R2
ADD R2, R2, #1 ;set R2 to 1
;R2 will be compared with the data
;value to see if the bit is 1
AND R3, R3, #0 ;clear R3
;R3 will be used as the counter
AND R4, R4, #0 ;R4 will hold the answer
while
ADD R3, R3, #1 ;add 1 to the counter
AND R0, R0, #0
AND R0, R1, R2 ;compare R1 and R2
brp yes ;if the bit is 1, goto yes
no
ADD R2, R2, R2 ;shift bits left
br check ;skip over yes
yes
ADD R4, R4, #1 ;increase the counter
br no ;continue
check
AND R0, R0, #0
ADD R0, R3, #-16 ;if counter is still under 16
brn while
endwhile
LEA R0, msg ;load message
PUTS ;print message
AND R0, R0, #0
ADD R0, R4, #0 ;put R4 (answer) in R0
OUT ;print it to screen
HALT
Data1 .FILL x0002 ;this variable changes
msg .STRINGZ "\nNumber of non-zero bits: "
.end
我应该得到的输出是:
Number of non-zero bits: 1
(因为被检查的值是2,并且2中有1个1位) 但我得到的输出是:
Number of non-zero bits: ☐
非常感谢任何帮助或建议!我对LC3装配还很新......
答案 0 :(得分:0)
您忘记OUT打印ASCII值指向的字符。你需要把你的答案增加到48.当涉及9位以上的位数时你会遇到问题,所以你需要在那里做一些检查。
希望有所帮助!