概述
;要求:从键盘输入一个10进制数(不超过2000),然后输出其二进制数中 1 的个数。
;程序如下:
;================================
DISP_STR MACRO X ;宏定义.
MOV DX, OFFSET X
MOV AH, 9
INT 21H
ENDM
;--------------------------------
DATA SEGMENT ;数据段.
MSG1 DB 13, 10, 'Please Input : $'
MSG3 DB 13, 10, 'The n(1) is : $'
x DW ? ;存放新输入数据.
DATA ENDS
;--------------------------------I
CODE SEGMENT ;代码段.
ASSUME CS: CODE, DS: DATA
START:
MOV AX, DATA
MOV DS, AX
;--------------------------------
IN_LOOP:
DISP_STR MSG1 ;宏调用,提示 Please Input :
;--------------------------------
MOV x, 0 ;数据清零.
_INX:
MOV AH, 1 ;输入字符.
INT 21H
;--------------------------------
CMP AL, 13 ;回车?
JE _IN_END ;是则结束输入.
CMP AL, '0'
JB IN_LOOP ;小于'0',不是数字.
CMP AL, '9'
JA IN_LOOP ;大于'9',不是数字.
SUB AL, '0' ;变成数字
MOV CL, AL
MOV CH, 0 ;CX 就是新输入的数字.
MOV AX, x
MOV BX, 10 ;老数据乘以10
MUL BX
ADD AX, CX ;加上新数据.
MOV x, AX ;保存.
CMP AX, 2000 ;与2000比较
JA IN_LOOP ;大于,就重新输入
JMP _INX ;不大,就继续输入下一位数
;--------------------------------
_IN_END:
DISP_STR MSG3 ;宏调用,提示 The n(1) is :
MOV AX, 0
MOV BX, x
MOV CX, 16 ;判断16位数.
DDDD:
CMP BX, 8000H
JB EEEE
INC AX ;个数加一.
EEEE:
SHL BX, 1 ;左移.
LOOP DDDD ;CX-1,非零转移.
;--------------------------------
DISP: ;以十进制显示AX内容
MOV BX, 10
MOV CX, 0
D_1:MOV DX, 0
DIV BX
ADD DL, '0'
PUSH DX
INC CX
CMP AX, 0
JNE D_1
MOV AH, 2
D_2:POP DX
INT 21H
LOOP D_2
;--------------------------------
MOV AH, 4CH ;到此结束
INT 21H
;--------------------------------
CODE ENDS
END START
;================================
程序经过编译、连接后,执行效果如下:
C:MASM>_1_N
Please Input : 1998
The n(1) is : 8
C:MASM>_1_N
Please Input : 536
The n(1) is : 3
利用计算器,把 1998、536,变成二进制数,可以看到,它们其中确实是有 8 个和 3 个 1。
大家再试试别的数字,看看做而论道编写的程序是否正确。
;===============================
原题网址:http://zhidao.baidu.com/question/428152175.html
提问者对回答的评价:谢谢啊
;===============================
最后
以上就是高高小松鼠为你收集整理的输入十进制数,显示其二进制形式中 1 的个数的全部内容,希望文章能够帮你解决输入十进制数,显示其二进制形式中 1 的个数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复