【问题标题】:How does Lc3 division workLc3除法是如何工作的
【发布时间】:2015-12-16 03:31:11
【问题描述】:

我一直试图弄清楚减法除法是如何工作的,但没有在线资源可以说明这一点。我还需要一个很好的例子来说明子程序在语法方面的外观。

【问题讨论】:

  • 您的(具体)问题是什么?
  • 重复减法除法非常简单。想一想:反复减去除数,然后计算你循环了多少次。就像在循环中相加一样。
  • 那部分我明白是我画空白的剩余部分

标签: assembly lc3


【解决方案1】:

在 LC3 中有两种方法可以处理除法。如果您正在寻找如何通过减法进行除法的示例,请查看这篇文章:

How do i do a bitshift right in binary

但如果您不必使用减法方法,我建议您向左移动 15 位。它更高效,因为它需要更少的运行时间,并且它的速度不受我们想要位移的数字的影响。


下面的代码向您展示了如何通过向左移动 15 位来执行右移:

.ORIG x3000
LD R0, VALUE

SHIFT_RIGHT
    AND R2, R2, #0              ; Clear R2, used as the loop counter

    SR_LOOP
        ADD R3, R2, #-15        ; check to see how many times we've looped
        BRzp SR_END             ; If R2 - 15 = 0 then exit

        LD R3, BIT_15           ; load BIT_15 into R3
        AND R3, R3, R0          ; check to see if we'll have a carry
        BRz #3                  ; If no carry, skip the next 3 lines
        ADD R0, R0, R0          ; bit shift left once
        ADD R0, R0, #1          ; add 1 for the carry
        BRnzp #1                ; skip the next line of code
        ADD R0, R0, R0          ; bit shift left

        ADD R2, R2, #1          ; increment our loop counter
        BRnzp SR_LOOP           ; start the loop over again
    SR_END

    ST R0, ANSWER               ; we've finished looping 15 times, store R0
    HALT

BIT_15      .FILL   b1000000000000000
VALUE       .FILL   x3BBC       ; some random number we want to bit shift right
ANSWER      .BLKW   1

.END

【讨论】:

    【解决方案2】:

    举个例子:23/8,我们期望返回 2 余数 7。

    Set NUM=23 and DIVISOR=8, initializing DIVIDEND=0 and REMAINDER=0
    Loop as long as NUM > DIVISOR:
       NUM = NUM - DIVISOR decreases the overall number
       DIVIDEND = DIVIDEND + 1 because we've discovered that it fits once more
    

    最后,REMAINDER = NUM​​,因为这是循环终止时不能再减去另一个 DIVISOR 的数字

    所以,让我们一次遍历一次:

    0) NUM=23, DIVIDEND=0
    1) (23 > 8, continue) NUM=23-8=15, DIVIDEND=0+1=1
    2) (15 > 8, continue) NUM=15-8=7, DIVIDEND=1+1=2
    3) (8 < 7, stop)
    

    最终答案,REMAINDER=NUM=7,DIVIDEND=2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 1970-01-01
      • 2011-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多