标题:数的累加1+2+4+8+。。。。1024
只看楼主
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
结帖率:0
 问题点数:0 回复次数:9 
数的累加1+2+4+8+。。。。1024
数的累加1+2+4+8+。。。。1024 谢谢指点!
搜索更多相关主题的帖子: 累加 
2006-12-18 13:47
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 

因为被加的数都是2的次方关系,所以采用左移方式,这样效率也比较高
累加片段:
MOV CX,10 ;楼主给出的最大数为2的10次幂,所以计数到最大为10
MOV AX,0 ;AX暂且为累加的寄存器
MOV BX,1 ;用于左移,初始值为1,即2的0次幂
NEXT: ADD AX,BX
SHL BX,1 ;采用逻辑左移 (BX)←(BX)*2
LOOP NEXT


我是金子,我要闪光的
2006-12-18 14:01
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 
我觉得还应该注意的一个问题是计算结果的存放,应该先笔算一下结果,然后选择合适的变量或寄存器来存放结果!

♂ 死后定当长眠,生前何须久睡。♀
2006-12-19 18:13
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
16位足够啦
试想下,最高才10位
1+2+4+...+1024不就是下面二进制数逻辑或运算么

0000000000000001
0000000000000010
0000000000000100
......
0000010000000000

结果不会溢出

我是金子,我要闪光的
2006-12-19 18:31
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
得分:0 

呵呵!是啊 !我也是刚计算完才知道的!


♂ 死后定当长眠,生前何须久睡。♀
2006-12-19 19:41
曾小
Rank: 1
等 级:新手上路
威 望:1
帖 子:239
专家分:0
注 册:2006-9-27
得分:0 
厉害!!!!!!

2006-12-21 19:30
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
得分:0 
请问要怎样实现输出啊?结果要怎么输出呢?

[url]www.[/url]欢迎大家的光临,一起交流学习
2007-01-19 21:18
流浪_汉
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-1-12
得分:0 
可以查看寄存器
要是输出的话可以每4位的看是不是大于9
转化为ASCII码来输出

2007-01-20 11:18
syuanq
Rank: 2
等 级:新手上路
威 望:3
帖 子:297
专家分:0
注 册:2006-12-11
得分:0 

可以写出程序来吗?


[url]www.[/url]欢迎大家的光临,一起交流学习
2007-01-20 18:30
流浪_汉
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2007-1-12
得分:0 
上次没有认真的想,随便说了一下。今天想了想,是要把16位转换为10为才可以的
程序是下面的,我也是刚刚学,可能很麻烦,高贵参考。希望大家也说说自己的想法
stack segment stack'stack'
dw 32 dup(0)
stack ends
data segment
buff db 10,0 ,10 dup(0)
data ends
code segment
main proc far
assume ss:stack,cs:code,ds:data
push ds
mov ax,0
push ax
mov ax,01h
mov bx,01h
mov si,01h
lop:shl bx,1
add ax,bx //加的到结果
cmp bx,0400h
jne lop
mov cx,1000 //得到千位
mov dx,0
div cx
mov buff[si],al
mov ax,dx
mov cx,100 //得到百位
mov dx,0
div cx
inc si
mov buff[si],al
mov ax,dx
mov dx,0
mov cx,10 //得到十位
div cx
inc si
mov buff[si],al
inc si
mov buff[si],dx //存个位
inc si
mov buff[si],'$'
mov si,1
xianshi: mov al,buff[si] //显示结果
cmp al,'$'
je next
add al,30h
mov dl,al
mov ah,2
int 21h
inc si
jmp xianshi
next:mov ah,4ch
int 21h
main endp
code ends
end main

2007-01-22 12:14



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




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

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