汇编—一个整数二进制值中1和0的个数

本文通过汇编统计变量X中的二进制值中1和0的个数,并记入ONE和ZERO变量中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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作为程序的入口
-->