LC-3程序,在两个数字之间加上奇数之和

时间:2017-10-28 19:12:50

标签: assembly lc3

我不确定如何输入两位数字并且实际上能够使用它(加,减,和等)。到目前为止,我可以输入我的开始和结束数字作为字符串并使用LEA输出字符串,但我需要它们在寄存器中,所以我可以将它们从ASCII转换为整数并计算总和。我认为我的和计算的逻辑很好,但我可能是错的。到目前为止,我有这个:

    .ORIG x3000

    AND R0, R0, #0                                                  ; clear R0

    LEA R2, blankspace                                              ; string space R2
    LD R1, pooploop                                                 ; loop condition 
    LEA R0, ENTER   
    PUTS                                                            ; print start number prompt                                                         

startloop       
    GETC
    OUT
STR R0, R2, #0
ADD R2, R2, #1
ADD R1, R1, #-1
    BRp startloop



    LEA R3, deathnote                                               ; string space R3
    LD R1, pooploop                                                 ; loop condition
    LEA R0, END
    PUTS                                                            ; print end number prompt

endloop     
    GETC
    OUT
STR R0, R3, #0
ADD R3, R3, #1
ADD R1, R1, #-1                                                     
    BRp endloop

ADD R2, R2, #-12                                                    ; convert
ADD R2, R2, #-12
ADD R2, R2, #-12
ADD R2, R2, #-12

ADD R3, R3, #-12                                                    ; convert
ADD R3, R3, #-12
ADD R3, R3, #-12
ADD R3, R3, #-12

NOT R2, R2                                                          ; negate R2
ADD R4, R3, R2                                                      ; R3 - R2                                           
    BRn NEG
NOT R2, R2                                                          ; if end number is greater, negate R2 again

loop    
ADD R2, R2, #1                                                      ; increment start number by 1
NOT R2, R2                                                          ; negate R2
ADD R5, R3, R2                                                      ; R3 - (R2+1)
    BRz exit                                                        ; exit when start number is equal to end number
NOT R2, R2                                                          ; negate R2 if start number is less than end number
AND R5, R2, #1                                                      ; 
    BRp sum
    BRnzp loop

sum
ADD R6, R2, #0
    BRnzp loop

exit


NEG LEA R0, ERROR
    PUTS

    HALT


deathnote   .blkw 50
blankspace  .blkw 100
pooploop .FILL x02
ENTER   .STRINGZ "\nEnter Start Number > "
END     .STRINGZ "\nEnter End Number > "
ERROR   .STRINGZ "\nERROR! Invalid Entry!"

1 个答案:

答案 0 :(得分:1)

快速扫描您的代码。

GETC
OUT
STR R0, R2, #0
[...]
GETC
OUT
STR R0, R3, #0

请记住,LD / LDR / LDI / ST / STR / STI指令将进入内存。如果您只是想将一个寄存器的值移动到另一个寄存器,那么您不应该使用任何这些指令。

可以使用ADD或AND指令简单地将一个寄存器移动到另一个寄存器。只需将0添加到寄存器并存储到目标寄存器中,或者将AND与其自身相加并存储到目标寄存器中。