如果x-y
溢出,我想分支。
我想出将 xy 存储到 注册A ,存储 0 进入 寄存器B 和 比较 这两个寄存器。
与8086不同,8080 doesn't have an OF flag or jo
/ jno
instructions。
x db
y db
lda x
mov b,a
lda y
sub b
mvi b,0
cmp b
jp overflow
notOverFlow HLT
overflow HLT
适用于 x = 128,y = 127 但不适用于值 x = 0,y = 0
答案 0 :(得分:1)
如果没有溢出意味着算术结果可以表示为8位有符号值,则应遵循以下规则:
y = 0
,则没有溢出。y > 0
,则如果truncate(x - y) > x
溢出。y < 0
,则如果truncate(x - y) < x
溢出。此处truncate(x)
表示x
的截断的8位带符号值。
然后代码可能看起来像这样:
lda y ; Load y.
mov b, a
lda x ; Load x.
mov c, a
sub b ; No overflow if truncate(x - y) = x, that is, y = 0.
cmp c
jz no_overflow
jm else ; Jump if truncate(x - y) < x.
; At this point y != 0 and truncate(x - y) > x.
mov a, b ; Overflow if y > 0.
ana a
jp overflow
no_overflow:
...
; At this point y != 0 and truncate(x - y) < x.
else:
mov a, b ; Overflow if y < 0.
ana a
jp no_overflow
overflow:
...
作为一种优化措施,可以在mov a, b
之前用一条mov a, b
替换两条jm else
指令。