| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5061 人关注过本帖
标题:统计0的个数
只看楼主 加入收藏
紫小念
Rank: 1
来 自:山东
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-5-14
结帖率:60%
收藏
已结贴  问题点数:10 回复次数:8 
统计0的个数
汇编编程:编写一个程序,统计AX中的0的个数,放到CL中,假设已知AX=OFF3FH,CL=13
我知道统计1的个数的关键句子是“CMP AX,0000H”,统计0 的该怎么写呢
搜索更多相关主题的帖子: 统计 
2015-01-12 15:49
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:2 
这个 0 明显是指二进制的 0   也就是说  比如  1011011 里面有2个0 5个1

DO IT YOURSELF !
2015-01-12 15:54
紫小念
Rank: 1
来 自:山东
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-5-14
收藏
得分:0 
回复 2楼 wp231957
嗯嗯,这个我知道。要怎么比较一下,把0的个数统计出来,统计1是跟“0000H”进行比较,那0,要跟谁比一下?
2015-01-12 15:56
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:8 
mov dx,0001H
mov ax,FF3FH
xor cx,cx
lpstart:
cmp dx,0000H
jz lpend
mov bx,ax
and bx,dx
jnz lp1
inc cl
lp1:
shl dx,1
jmp lpstart
lpend:
'怎么输出啊?

能编个毛线衣吗?
2015-01-12 16:03
紫小念
Rank: 1
来 自:山东
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-5-14
收藏
得分:0 
回复 4楼 wmf2014
mov cl,00h
mov ax,ff37h
a1:shr ax ,1
jnc a0
inc cl
a0:cmp ax,0000h
jnz  a1
hlt;统计1的个数,0怎么弄?
2015-01-12 16:11
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
1,在你5楼代码里16-cl不就是1的个数
2,你不保留ax原始数据则代码修改如下
xor cx,cx
mov ax,ff37h
a1:shl ax ,1    //应该使用左移吧,左移可以把最高位移入cf,用来判断是否
jnc a0          //jnc就是统计0
inc cl
a0:cmp ax,0000h
jnz  a1
hlt;统计1的个数,0怎么弄?

能编个毛线衣吗?
2015-01-12 16:40
紫小念
Rank: 1
来 自:山东
等 级:新手上路
帖 子:27
专家分:0
注 册:2013-5-14
收藏
得分:0 
回复 5楼 紫小念
谢谢!
2015-01-12 20:34
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
    统计0的个数代码如下:
    assume    cs:code
    code    segment
    start:
        mov    ax,0ff37h
        mov    bx,ax            ;将ax中的内容传送入bx中,以保留原数不变。
        xor    dx,dx            ;将dx清零以做为统计0个数的计数器。
        mov    cx,16            ;因为ax为16位寄存器,其中存储的数据有16位,所以就设置16次循环。
    s1:
        shr    bx,1             ;将bx中的值右移一位,最右边被移出的一位进入标志寄存器的cf位。
        jc     continue         ;cf中的值为1就跳过下面给0计数的指令继续循环。
        inc    dx
    continue:
        loop    s1

        mov    ax,4c00h
        int    21h
    code    ends
        end    start   
2015-05-05 21:45
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
    如果要将统计的结果显示出来,程序如下:
    assume    cs:code,ds:data
    data    segment
    MESSAGE    DB    'Zero has been counted,the number is '
    NUMBER     DB    3    DUP (?)
    data    ends
   
    code    segment
    start:
        mov    ax,data
        mov    ds,ax

        mov    ax,0ff37h
        mov    bx,ax
        xor    dx,dx
        mov    si,0                ;si用作变址寄存器,以便将统计后0的个数所转化的ASCII码存入NUMBER处。
        mov    cx,16
    s1:
        shr    bx,1
        jc     continue
        inc    dx
    continue:
        loop    s1

        mov    ax,dx                ;将dx中统计的0的个数传送入ax中,因为后面的“AAA”指令要用到ax寄存器。
        aaa                         ;将ax中的数值进行调整,转化为两个非压缩BCD码。
        cmp    dx,0ah               ;判断0的个数是否大于等于10个,以便正确的存储入NUMBER处并显示。大于10就要分别存储十位和个位的值,否则只需要存储个位的值。
        jb     s2
        or     ah,30h               ;将ah处存放的数字(0的个数的十位数字)转化为ASCII码
        mov    NUMBER[si],ah        ;存入NUMBER处
        inc    si
    s2:
        or    al,30h                ;将al处存放的数字(0的个数的个位数字)转化为ASCII码.
        mov    NUMBER[si],al
        mov    NUMBER[si+1],'$'     ;存储字符串结束符.

        mov    ah,09h
        lea    dx,MESSAGE   
        int    21h                  ;调用int 21h的09h号功能显示字符串

        mov    ax,4c00h
        int    21h
    code    ends
        end    start
2015-05-05 22:05
快速回复:统计0的个数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021087 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved