计数位和打印结果 LC3 Assembly

Counting bits and printing result LC3 Assembly

我正在尝试编写一个简单的程序,它从 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 组装还是很陌生...

您忘记了 OUT 打印 ASCII 值指向的字符。您需要将答案增加 48。然后,当涉及到超过 9 的位数时,您将 运行 遇到问题,因此您需要在那里进行一些检查。

希望对您有所帮助!