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
设置为10mvi e,05h
e
设置为5sub-e
a
设置为10-5,即5。
符号标志被删除,表示结果不是负值jp减法循环
跳回子e
sub e
(再次)
a
设置为5-5=0。
该标志仍处于下降状态jp减法循环
再次将控件移回子esub-e
a
设置为0-5=-5,无符号值为256-5=251。
这次升起了标志旗251
时,您看到的是a
寄存器的值,而不是b
寄存器的值
请注意,jz
跳转实际上永远不会将控制权传递到zero:
,因为a
中的zero结果将使符号标志处于下降状态,因此前面的jp
指令将执行跳转到循环开始的操作。下面是发生的情况:
mvi a,0ah
a
设置为10mvi e,05h
e
设置为5sub-e
a
设置为10-5,即5。
符号标志被删除,表示结果不是负值jp减法循环
跳回子e
sub e
(再次)
a
设置为5-5=0。
该标志仍处于下降状态jp减法循环
再次将控件移回子esub-e
a
设置为0-5=-5,无符号值为256-5=251。
这次升起了标志旗251
时,您看到的是a
寄存器的值,而不是b
寄存器的值
请注意,
jz
跳转实际上永远不会将控制权传递到zero:
,因为a
中的zero结果将使符号标志处于下降状态,因此前面的jp
指令将跳转到循环的开始处。因为您得到的值是给定代码时不可能得到的值,我会说你读错了结果。@Jester我的算法步骤和跳转如何?因为你得到的值是给定代码不可能得到的,所以我会说你读错了结果。@Jester我的算法步骤和跳转如何??