Assembly 8位普通减法运算

Assembly 8位普通减法运算,assembly,conditional,conditional-statements,bitflags,intel-8080,Assembly,Conditional,Conditional Statements,Bitflags,Intel 8080,这是我的代码: init: ; expected to go in "zero" part mvi a, 0ah mvi e, 05h ; content of reg b is "251" ; expected to go in "zero" part ;mvi a, 0ah ;mvi e, 0ah ; if followed two are commented out content of reg b is "254"

这是我的代码:

init:
    ; expected to go in "zero" part
    mvi a, 0ah
    mvi e, 05h
    ; content of reg b is "251"

    ; expected to go in "zero" part
    ;mvi a, 0ah
    ;mvi e, 0ah
    ; if followed two are commented out content of reg b is "254"


    ; expected to go in "minus" part
    ;mvi a, 0ah
    ;mvi e, 03h
    ; if followed two are commented out content of reg b is "254"


    ; expected to go in "minus" part
    ;mvi a,0ah
    ;mvi e,0bh
    ; if followed two are commented out content of reg b is "255"

subtractionLoop:
    sub e
    jp subtractionLoop
    jz zero
    jm minus

minus:
    mvi b, 0ffh
    ; print value as 255 to see it comes within "minus" part
    ; the part means last result is minus, so we can get remainder by adding
    ; content of reg E only one time
    hlt

zero:
    mvi b, 0bh
    ; print value as 11 to see it comes within "zero" part
    hlt
我只是尝试实现简单的除法,但当您阅读注释(
)时,我会得到不同且有趣的结果

我的想法如下:
只要红利为正,
减法循环
继续减法。如果点击到
0
,则转到零部分。否则,转到负部分

我的错误在哪里?
跳跃似乎不正确。

以下是发生的情况:

  • mvi a,0ah

    a
    设置为10

  • mvi e,05h

    e
    设置为5

  • sub-e

    a
    设置为10-5,即5。 符号标志被删除,表示结果不是负值

  • jp减法循环

    跳回
    子e

  • sub e
    (再次)

    a
    设置为5-5=0。 该标志仍处于下降状态

  • jp减法循环

    再次将控件移回子e

  • sub-e

    a
    设置为0-5=-5,无符号值为256-5=251。 这次升起了标志旗

  • 因此,我的猜测是,当您看到
    251
    时,您看到的是
    a
    寄存器的值,而不是
    b
    寄存器的值

    请注意,
    jz
    跳转实际上永远不会将控制权传递到
    zero:
    ,因为
    a
    中的zero结果将使符号标志处于下降状态,因此前面的
    jp
    指令将执行跳转到循环开始的操作。

    下面是发生的情况:

  • mvi a,0ah

    a
    设置为10

  • mvi e,05h

    e
    设置为5

  • sub-e

    a
    设置为10-5,即5。 符号标志被删除,表示结果不是负值

  • jp减法循环

    跳回
    子e

  • sub e
    (再次)

    a
    设置为5-5=0。 该标志仍处于下降状态

  • jp减法循环

    再次将控件移回子e

  • sub-e

    a
    设置为0-5=-5,无符号值为256-5=251。 这次升起了标志旗

  • 因此,我的猜测是,当您看到
    251
    时,您看到的是
    a
    寄存器的值,而不是
    b
    寄存器的值


    请注意,
    jz
    跳转实际上永远不会将控制权传递到
    zero:
    ,因为
    a
    中的zero结果将使符号标志处于下降状态,因此前面的
    jp
    指令将跳转到循环的开始处。

    因为您得到的值是给定代码时不可能得到的值,我会说你读错了结果。@Jester我的算法步骤和跳转如何?因为你得到的值是给定代码不可能得到的,所以我会说你读错了结果。@Jester我的算法步骤和跳转如何??