Loops 如何让这个LC3程序成倍增加?
我试图学习如何在LC3中乘法,但在修改我的旧程序时遇到了麻烦,该程序只用于加法。我如何修改这个程序,使之乘以2个给定的输入? 代码:Loops 如何让这个LC3程序成倍增加?,loops,math,assembly,ascii,lc3,Loops,Math,Assembly,Ascii,Lc3,我试图学习如何在LC3中乘法,但在修改我的旧程序时遇到了麻烦,该程序只用于加法。我如何修改这个程序,使之乘以2个给定的输入? 代码: 在LC-3上进行乘法的最简单方法是重复加法。所以,继续求被乘数的和,并减少乘数;当乘数被消耗(即零)时,迭代停止 这里有很多警告:如果乘数是负数,那么我们要么用倒计时来否定它,要么用倒计时来代替——无论哪种方式,最终结果都是否定的 由于乘法是可交换的,我们可以考虑使用乘法器的绝对值(绝对值),从而减少迭代次数。但对于更优化的乘法,我们将切换到另一个完整的算法,即。
在LC-3上进行乘法的最简单方法是重复加法。所以,继续求被乘数的和,并减少乘数;当乘数被消耗(即零)时,迭代停止 这里有很多警告:如果乘数是负数,那么我们要么用倒计时来否定它,要么用倒计时来代替——无论哪种方式,最终结果都是否定的
由于乘法是可交换的,我们可以考虑使用乘法器的绝对值(绝对值),从而减少迭代次数。但对于更优化的乘法,我们将切换到另一个完整的算法,即。请注意,此算法通常用于硬件实现,在硬件实现中,保存珍贵的寄存器位非常重要,而对于软件来说,这并不是一个真正重要的问题。
在LC-3上进行乘法的最简单方法是重复加法。所以,继续求被乘数的和,并减少乘数;当乘数被消耗(即零)时,迭代停止 这里有很多警告:如果乘数是负数,那么我们要么用倒计时来否定它,要么用倒计时来代替——无论哪种方式,最终结果都是否定的由于乘法是可交换的,我们可以考虑使用乘法器的绝对值(绝对值),从而减少迭代次数。但对于更优化的乘法,我们将切换到另一个完整的算法,即。请注意,此算法通常用于硬件实现,在硬件实现中,保存珍贵的寄存器位非常重要,而对于软件来说,这并不是一个真正重要的问题
.ORIG x3000 ; begin at x3000
; input two numbers
IN ;input an integer character (ascii) {TRAP 23}
LD R3, HEXN30 ;subtract x30 to get integer
ADD R0, R0, R3
ADD R1, R0, x0 ;move the first integer to register 1
IN ;input another integer {TRAP 23}
ADD R0, R0, R3 ;convert it to an integer
; add the numbers
ADD R2, R0, R1 ;add the two integers
; print the results
LEA R0, MESG ;load the address of the message string
PUTS ;"PUTS" outputs a string {TRAP 22}
ADD R0, R2, x0 ;move the sum to R0, to be output
LD R3, HEX30 ;add 30 to integer to get integer character
ADD R0, R0, R3
OUT ;display the sum {TRAP 21}
; stop
HALT ;{TRAP 25}
; data
MESG .STRINGZ "The sum of those two numbers is: "
HEXN30 .FILL xFFD0 ; -30 HEX
HEX30 .FILL x0030 ; 30 HEX
.END```