标题:统计“1”的个数___孙德文编《微型计算机原理及应用》
取消只看楼主
ccj1981
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-9-18
结帖率:0
已结贴  问题点数:0 回复次数:3 
统计“1”的个数___孙德文编《微型计算机原理及应用》
例9 寄存器AX中有一个16们二进制数,编程统计其中“1”的个数,结果存放在CX中。
本例最好采用“先判断、后执行”的结构,即先检查AX中有无为“1”的位。则代码段的有关程序如下:
1.     MOV  CX,0   计数器初始化
2. LOP:    AND  AX,AX  不知AX相加为何意
3.            JZ   STP     相加后结果为“0”则跳到STP
4.            SAL  AX,1   AX算术左移1位
5.            JNC  LOP     如果无进位则跳到LOP
6.            INC  CX      CX增量加1
7.            JMP  LOP     无条件转移到LOP
8. STP:   HLT          处理器暂停

这个检查“1”的个数,我觉得直接用SAL左移,然后每往前移动一位时检查有无进位(CF标志位),有进位就是“1”,并CX计数器加1,得到结果。

或者直接用AND  AX,AX一直相加,每加一次检查一次有无进位(CF标志位),有进位就是“1”,并CX计数器加1,得到结果。

现在两个方法加起来一起用,好像有问题。
2.  0111
  + 0111
  = 1110

4.  1110
左移1100

5.有进位

6.CX = 0+1=1

7.循环到LOP处

2.  1100
  + 1100
  = 1000

4.  1000
左移0000

5.有进位

6.CX = 1+1=2

7.循环到LOP处

2.  0000
  + 0000
  = 0000

3.相加后结果为“0”则跳到STP处结束程序。

最后结果CX=2与实际不符就有3个“1”。
是不是我哪里理解错了?
我看的书是自考课本孙德文编《微型计算机原理及应用》
课程代码2277,第100页。
搜索更多相关主题的帖子: 编程 处理器 寄存器 二进制 
2011-09-18 11:41
ccj1981
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-9-18
得分:0 


我截了图,看到了回复一下,你是怎么理解的,谢谢啦。
http://zhidao.baidu.com/question/320443523.html
2011-09-18 11:49
ccj1981
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-9-18
得分:0 
谢谢楼上两位,我把AND理解成ADD了。

2. LOP:    AND  AX,AX  不知AX相加为何意

2011-09-18 15:04
ccj1981
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-9-18
得分:0 
AND指令是为下一条间断指令JZ服务的,整个循环中只有JZ才可以跳出循环,没有JZ就成了死循环了。
2011-09-18 15:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-350215-1-1.html




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

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