注册 登录
编程论坛 汇编论坛

作业加急~

wangsf8 发布于 2006-12-20 22:37, 708 次点击
求教:统计AX中1和0的个数~~我是菜鸟!!!
本人要求:把0的个数存入CH中,把1的个数存入CL中
最后并输出结果,最好是每句有详解
谢谢了,大哥大姐们了!!
4 回复
#2
lefttime2006-12-21 15:22

就来个例子吧:
......
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转移,继续判断
......

#3
曾小2006-12-21 19:05

DSEG SEGMENT
S1 DB ?
D2 DB ?
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV S1,0
MOV S2,0
MOV AX,1234h;给AX 赋值
MOV CX,16
SIGN:SHL AX,1
JC STEP1;若 CF=1
INC S1
MOV CL,S1
DEC CX
JCXNZ SIGN
STEP1:INC S2
MOV CH,S2
JCXNZ SIGN
DEC CX
MOV AH,4CH
INT 21H
CSEG ENDS
END START
我现在想从键盘上输入AX的值,要怎么办?并且样测出它的位数,赋给CX啊?

#4
lefttime2006-12-21 19:23
[QUOTE]我现在想从键盘上输入AX的值,要怎么办?并且样测出它的位数,赋给CX啊?[/QUOTE]

输入给AX必定是16啦,如果你要测出实际的数是几位,我们用移位指令不就行啦
来个例子:(在AX获得数值后)
......
MOV CX,4
NEXT: CMP AX,0
JZ EXIT ;这里的标号EXIT是用来跳出循环的
SHL AX,CL
INC CH
JMP NEXT
EXIT: MOV CL,CH
MOV CH,0
......
#5
lefttime2006-12-21 19:24
对啦,忘了说了,上述是用于测试数是有几位16进制数,而不是几位二进制数
1