计数位和打印结果 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 的位数时,您将 运行 遇到问题,因此您需要在那里进行一些检查。
希望对您有所帮助!
我正在尝试编写一个简单的程序,它从 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 的位数时,您将 运行 遇到问题,因此您需要在那里进行一些检查。
希望对您有所帮助!