当前页面为 开发中 版本,查看特定版本的文档,请在页面左下角的下拉菜单中进行选择。

有符号数 大于等于 和 小于 判断

对于有符号数的大于等于小于判断,只需要将两数作差,判断NV状态即可,例如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