有符号数 大于等于 和 小于 判断¶
对于有符号数的大于等于
和小于
判断,只需要将两数作差,判断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 |