问答题
试编子程序,返回16位二进制数中指定位段的零状态。已知:
入口参数:AX=16位二进制数;
BL=高4位b1、低4位b0;
其中b1和b0分别为位段最高位编号和最低位的编号(15~0)。
出口参数:CE=0;
若指定位段为0,ZF=1,否则ZF=0。
注意:若b1小于b0,则不予处理,返回CF=1。
【正确答案】BITSZ:PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV CH,BL
MOV CL,4
SHR CH,CL ;CH=高位编号b1
MOV CL,OFH
AND CL,BL ;CL=低位编号b0
SUB CH,CL
JB EXIT ;若b1<b0,则退出(CF=1)
INC CH ;计算位段位数(b1-b0+1)
MOV DX,1
SHL DX,CL ;DX=2^b0
MOV BX,DX ;BX=2^b0
XCHG CH,CL
SHL DX,CL ;DX=2^(b1+1)
SUB DX,BX ;在DX中形成字段屏蔽字
AND AX,DX ;设置字段的零状态到ZF(CF=0)
EXIT:POP DX
POP CX
POP BX
POP AX
RET
【答案解析】