编程统计BUF字单元数据中所含1的个数,并将结果存入COUNT单元中。

编程统计BUF字单元数据中所含1的个数,并将结果存入COUNT单元中。

代码如下:

DATA	SEGMENT
BUF		DW 2345H	;随机存储一下数据
COUNT	DB ?		;用于统计BUF字单元数据中所含1的个数
DATA	ENDS
STACK	SEGMENT STACK
		DB 100 DUP(?);在堆栈段开辟一段大小为100DB的存储空间
STACK	ENDS
CODE	SEGMENT
		ASSUME CS:CODE,DS:DATA,SS:STACK
START:	MOV AX,DATA	;
		MOV DS,AX	;
		MOV AX,BUF	;将BUF中的数据存储到AX寄存器中,因为BUF里面只有一个数据且和AX的大小类型一致,所以直接将BUF的值赋值给AX,使用AX进行参与运算
		XOR CL,CL	;对CL进行初始化清零操作,用于存放统计1的个数
NEXT:	AND AX,AX	;先判断BUF里面的数据是否为0
		JZ  EXIT	;JZ判断上条指令中的AX结果为0跳转,否则执行下一条指令
		SHL AX,1	;执行到此条指令,表示BUF内容不为0.即将AX逻辑左移一位,最高位赋值给CF,最低位补0
		JNC NEXT	;判断上条指令中的AX左移之后,若没有进位(CF=0)则跳转到NEXT标签处,否则(CF=1)执行下一条指令 即一个二进制位数有1,执行下一条指令,若没有1.跳转到NEXT再次左移判断下一个二进制位是否是1
		INC CL		;执行到此条指令,即二进制位为1,CL计数自加
		JMP NEXT	;无条件跳转到NEXT处开始再次的左移操作判断下一位二进制位是否为1
EXIT:	MOV COUNT,CL;把最后统计到1的个数赋值给COUNT
		MOV AH,4CH	;调用4CH号功能,返回DOS操作系统
		INT 21H		;终止当前程序的运行,并返回DOS系统
CODE	ENDS
		END START

猜你喜欢

转载自blog.csdn.net/qq_41264055/article/details/103723266