繁体   English   中英

LC-3程序,将两个数字之间的奇数整数之和

[英]LC-3 program that adds the sum of odd integers between two number

我不确定如何输入两位数的数字,并且实际上是否可以使用它(加,减,与等)。 到目前为止,我可以将我的开始和结束数字输入为字符串,并使用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!"

快速扫描您的代码。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM