检查哪个数字更大的程序
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
但我被告知它不会工作,因为我需要将 js
和 jns
更改为 jc
和 jnc
,以防两个数字都是否定,但是当我 运行 它在模拟器上时,它可以双向工作。谁是对的?我或老师,或者我们两种方式都行得通吗?如果说老师请说明原因,因为老师不会。
编辑:我们只能使用 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 回复:有符号溢出与进位。
我正在学习汇编 (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
但我被告知它不会工作,因为我需要将 js
和 jns
更改为 jc
和 jnc
,以防两个数字都是否定,但是当我 运行 它在模拟器上时,它可以双向工作。谁是对的?我或老师,或者我们两种方式都行得通吗?如果说老师请说明原因,因为老师不会。
编辑:我们只能使用 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 回复:有符号溢出与进位。