本文通过汇编统计变量X中的二进制值中1和0的个数,并记入ONE和ZERO变量中
STACKS SEGMENT STACK
DW 100H DUP(?) --定义一个空间大小为100字大小的栈空间
TOP LABEL WORD --Top表示栈的开始地址
STACKS ENDS
DATAS SEGMENT
X DW 2767 --设置x的值为2767
ONE DW DUP(?) --定义两个变量来存储
ZERO DW DUP(?)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,SS:STACKS,DS:DATAS
MAIN PROC FAR --定义主函数为MAIN
MOV AX,STACKS
MOV SS,AX
LEA SP,TOP --栈顶指向SP
MOV AX,DATAS
MOV DS,AX
XOR DX,DX --清空DX
MOV CX,16 --将16存入CX中,意为将循环16次
MOV AX,X --将x的值存入AX
L1: SHR AX,1 --逻辑右移一位,如果是1,CF将置1,0则置0
ADC DX,0 --DX带进位CF加0,相当于加CF中的值
LOOP L1 --循环L1
MOV [ONE],DX --将DX中的值存入one中
MOV BX,16
SUB BX,DX
MOV [ZERO],BX --将为0的值存入zero中
MOV AH,4CH
INT 21H --结束程序
MAIN ENDP
CODES ENDS
END MAIN --MAIN作为程序的入口