就来个例子吧:...... MOV CX,1000H ;在这里我假设0的个数为16,1的个数为0 MOV BL,16 ;判断的位数初始化NEXT0: TEST AX,1 ;与1相与,用于判断0或1;在这里与2的整数次方相与都行,当然不能超过8000H JZ NEXT1 ;如果第一位为0则转移,这时就不用更改CX INC CL ;如果第一位为1则 CH减1,CL加1 DEC CH SHL AX,1 ;左移一位,把其它没判断的位移到第一位进行判断NEXT1: DEC BL ;判断次数减1 JNZ NEXT0 ;次数不为0转移,继续判断......
DSEG SEGMENTS1 DB ?D2 DB ?DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX MOV S1,0 MOV S2,0 MOV AX,1234h;给AX 赋值 MOV CX,16SIGN:SHL AX,1 JC STEP1;若 CF=1 INC S1 MOV CL,S1 DEC CX JCXNZ SIGNSTEP1:INC S2 MOV CH,S2 JCXNZ SIGN DEC CX MOV AH,4CH INT 21HCSEG ENDSEND START我现在想从键盘上输入AX的值,要怎么办?并且样测出它的位数,赋给CX啊?