计数位和打印结果LC3组装

时间:2015-02-10 03:51:46

标签: assembly output bit-shift bits lc3

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

1 个答案:

答案 0 :(得分:0)

您忘记OUT打印ASCII值指向的字符。你需要把你的答案增加到48.当涉及9位以上的位数时你会遇到问题,所以你需要在那里做一些检查。

希望有所帮助!