检查哪个数字更大的程序

A program that checks which number is bigger

我正在学习汇编 (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 < 222,所以 al-bl 的 MSB(进入 SF,符号位)不是你的条件'正在寻找。即它不同于CF中的结转(借)

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

另见 http://teaching.idallen.com/dat2343/10f/notes/040_overflow.txt 回复:有符号溢出与进位。