有符号数 大于等于 和 小于 判断¶
对于有符号数的大于等于和小于判断,只需要将两数作差,判断N和V状态即可,例如x - y:
N==V:表示x >= y;N!=V:表示x < y。
这里的N指符号位,即计算结果的最高位;V指状态标志OV。
而对于<=和>可以转换为>=和<进行:
x <= y => y >= x
x > y => y < x
至于相等和不等的比较则需要使用指令se/sne进行。
以下为大于等于和小于判断的示例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | #define X_VAL -123456
#define Y_VAL -456789
dseg
byte x[4]
byte y[4]
byte z
cseg
main: mov A, #X_VAL & 0xff
mov x + 0, A
mov A, #(X_VAL >> 8) & 0xff
mov x + 1, A
mov A, #(X_VAL >> 16) & 0xff
mov x + 2, A
mov A, #(X_VAL >> 24) & 0xff
mov x + 3, A
mov A, #Y_VAL & 0xff
mov y + 0, A
mov A, #(Y_VAL >> 8) & 0xff
mov y + 1, A
mov A, #(Y_VAL >> 16) & 0xff
mov y + 2, A
mov A, #(Y_VAL >> 24) & 0xff
mov y + 3, A
//执行判断 z = x >= y
mov A, x + 0
sub A, y + 0
mov A, x + 1
subc A, y + 1
mov A, x + 2
subc A, y + 2
mov A, x + 3
subc A, y + 3
brev A //z = N == V ? 1 : 0
sbnz STATUS_BIT_OV
xor A, #1
and A, #1
mov z, A
//z = 0x01
|