1
jz zero
jl nega
mov al,1
jmp ok
zero:
xor al, al
jmp ok
NEGA: MOV al, 0ffh
mov al, 60h cmp al, 0bbh jb l2 l1: mov al, 0bbh l2: NOP |
分析: 1 jb因此是无符号数 2 60<bb 因此,成立 3 al最后为60h |
mov al, 60h cmp al, 0bbh JL l2 l1: mov al, 0bbh l2: NOP |
有符号数 60正数大于负数bbh,因此不满足条件 al结果为bbh |
xor al, al mov bl, 98h add bl, 88h jnc L2 L1: INC AL; L2: NOP |
jnc判断有没有进位,无进位跳转, 这里有进位,因此不转。al=01 |
xor al, al mov bl, 98h add bl, 88h jnc L2 L1: INC AL; L2: NOP |
判断有没有溢出,明显有。 故同样不转。 |
mov al,1 mov bl, 72h add bl, 40h jc L2 L1: xor al, al L2: nop |
判断进位,没有,不转,=0 |
mov al,1 mov bl, 72h add bl, 40h jo L2 L1: xor al, al L2: nop |
72+40H 有溢出?这个时候,要把两个数 当做有符号数来看待。一个字节的最大有符号值时127,因此溢出了。结果=0 |
mov bl, 46h test bl, 01h jz l2 |
test 是看看最低位是否为0,这里6=0110并不是1,因此jz不跳转。al被L1清空=0 |
mov bl, 46h test bl, 0FFh jNP l2 |
test是与and一致的操作,只是同cmp一样不影响目的操作数,只影响标志寄存器FLAGS。 JP和JNP是判断1的个数是否是偶数。这里怎么判断呢?其实就是看多少个1,这里46=01000110,3个1,奇数,因此JNP转,就会让al=1了 |
2
mov al,x
cmp al,0
jz zero
jl nega
mov al,1
jmp ok
zero:
xor al, al
jmp ok
NEGA: MOV al, 0ffh
3 找三者得最大值:1240h(有符号数,9cc0h为负数)
4 把三个连续存放的单字节无符号数按递增次序重新存放在原存储位置
分析:
1 定义三个连续存放的单字节db数