微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检查哪个数字更大的程序

如何解决检查哪个数字更大的程序

我正在学习汇编 (8086),我们学习了跳转,我们被告知要编写一个程序,该程序将从 2 个存储单元中获取 2 个数字,并将较大的一个放入另一个存储单元中。 所以我写道:

mov al,[0]
mov bl,[1]
cmp al,bl
js eq
jns noteq
eq:
    mov [10h],bl
    jmp end
noteq:
    mov [10h],al
    jmp end
end:
    hlt

但有人告诉我它不起作用,因为我需要将 jsjns 更改为 jcjnc,以防两个数字都是负数,但是当我在模拟器上运行它时,它可以双向工作。谁是对的?我或老师,或者我们两种方法都行得通?如果你说老师,请解释原因,因为老师不能。

编辑:我们只能使用 JC JNC JZ JNZ JS JNS

解决方法

数字必须是无符号的,因为如果不检查 OF,就不能正确地进行有符号比较(在减法有符号溢出的情况下获得正确答案,例如在 AL=127,BL=-1 上)。

因此您需要使用 jb(下面未签名),也就是 jc。谈论“负”数字会混淆这个问题;他们实际上希望你做一个无符号比较。但是是的,您的代码有问题的情况是当数字相差 128 或更多时,例如 10 al-bl 的 MSB(进入 SF,符号位)不是您的条件重新寻找。即它不同于CF中的结转(借)。

请注意,JL(小于号符号)是 SF ≠ OF (https://www.felixcloutier.com/x86/jcc)。

另见http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt re:签名溢出与结转。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。