输入十进制数,显示其二进制形式中 1 的个数

本文介绍了一个简单的汇编语言程序,该程序接收用户输入的一个不超过2000的十进制数,并计算并输出该数转换为二进制后的1的个数。通过实际例子验证了程序的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

;要求:从键盘输入一个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
提问者对回答的评价:谢谢啊
;===============================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值