题目:
统计AX中’0’的个数,放在数据段偏移量为0002的位置(测试数据为1234H,5678H,0FFFFH并通过DEBUG验证结果)
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
;初始化测试数据
MOV AX, 1234H
CALL COUNT_ZEROS ;调用计数子程序
MOV WORD PTR DS:[0002H], CX
MOV AX, 5678H
CALL COUNT_ZEROS
MOV WORD PTR DS:[0004H], CX
MOV AX, 0FFFFH
CALL COUNT_ZEROS
MOV WORD PTR DS:[0006H], CX
;停止程序
MOV AH, 4CH
INT 21H
COUNT_ZEROS PROC
;子程序COUNT_ZEROS ,计算AX中“0”位的数量,并将结果存储在CX中
MOV CX,16 ;将CX初始化为16
COUNT_LOOP:
TEST AX, 0001H ;检查AX的最低位是否为零
JZ COUNT_NOT_ZERO ;如果AX的最低位是0,跳过CX-1
DEC CX ;如果AX的最低位1,CX-1
COUNT_NOT_ZERO:
SHR AX, 1 ;将AX向右移动一位
JNZ COUNT_LOOP ;如果AX不为零,则继续循环
RET
COUNT_ZEROS ENDP ;子程序COUNT_ZEROS结尾
MOV AH,4CH
INT 21H
CODES ENDS
END START