gpt4 book ai didi

assembly - 8080 上的签名溢出检测

转载 作者:行者123 更新时间:2023-12-02 19:03:48 25 4
gpt4 key购买 nike

如果 x-y 我想分支溢出。

我想出了将x-y存储到寄存器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 .

最佳答案

如果没有溢出意味着算术结果可以表示为 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之前.

关于assembly - 8080 上的签名溢出检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com