题目:
4-23 假设有(BX)=12FFH,以下程序段:
MOV CL,8
ROL BX,CL
AND BX,0FFH
CMP BX,0FFH
上述程序执行后,(BX) =_______,ZF=________,CF=____________。
关键点:
ROL:循环左移,将最高位放入CF
CMP:比较两个数,为第一个操作减去第二个操作数,但不影响第两个操作数的值,它影响flag的CF,ZF,OF,AF,PF。
ZF=1,则说明两个数相等。
当无符号时:
CF=1,则说明了有进位或借位,cmp是进行的减操作,故可以看出为借位,所以,此时oprd1<oprd2;
CF=0,则说明了无借位,但此时要注意ZF是否为0,若为0,则说明结果不为0,故此时oprd1>oprd2。
当有符号时:
若SF=0,OF=0 则说明了此时的值为正数,没有溢出,可以直观的看出,oprd1>oprd2;
若SF=1,OF=0 则说明了此时的值为负数,没有溢出,则为oprd1<oprd2;
若SF=0,OF=1 则说明了此时的值为正数,有溢出,可以看出oprd1<oprd2;
若SF=1,OF=1则说明了此时的值为负数,有溢出,可以看出oprd1>oprd2;
MOV CL,8
执行后CL=8
ROL BX,CL
把BX左移动CL位后放入到BX
BX是段寄存器
(BX)=12FFH
二进制为:0001 0010 1111 1111
CL=8
指令之后为:1111 1111 0001 0010
十六进制:BX=FF12
CF=1
AND BX,0FFH
0FFH的二进制:0000 0000 1111 1111
BX=FF12
BX的二进制:1111 1111 0001 0010
0000 0000 1111 1111
AND
1111 1111 0001 0010
=
0000 0000 0001 0010
BX=0000 0000 0001 0010
BX十六进制:0012H
CF=0
CMP BX,0FFH
BX=0012H
CMP比较2个数:0012H<FFH
所以ZF=0
CF=1
最后,结果为:(BX)=0012H,ZF=0,CF=1