鱼C论坛

 找回密码
 立即注册
查看: 7629|回复: 15

求助下,3的4次方如何算?

[复制链接]
发表于 2011-8-2 12:49:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天刚学汇编,课本里面的我都能理解,但就是甲鱼兄提出的3的4次方,我不知道从何下手了,有几点不明白,
用:
MOV AX,3
ADD AX,AX     AX=6
ADD AX,AX     AX=12
……
但这样向上翻倍是得不可以得到3的4次方地对吧?
那我应该如何算?各位前辈们可否你下你们的思路?还是我根本没有必要去了解?(可能以后学到其它指令会更方便)
前辈最好只用 MOV,ADD 这二个指令帮我,因为我现在只学到这二个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 12:59:37 | 显示全部楼层
追加一个问题
如果:ADD BX,AX这样可以吗?那最后得到的值是BX地还是AX的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 14:50:39 | 显示全部楼层
写程序 代码 能优化最好 就 优化  减小内存占用空间  如果用的 代码量太高  给别人也不好看过的  、
mov ax,3
mov bx,ax
add bx,bx
add bx,bx
add bx,bx
add bx,bx
mov ax,bx代码行数多 看起来还麻烦  如果用到 后来学的 循环


mov ax,3
mov cx,4
s:        add ax,ax

loop s   你 说那个 看起来容易点 ?{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 15:07:49 | 显示全部楼层
优化这个我懂关键是我现在想知道他最基础的运算,我现在是刚学,最基础的都不懂那就不能谈优化了。
先不谈循环,这个我还没有学到,等学到后在用,
先说第一个你给的例子,我这样理解对吗?
mov ax,3
mov bx,ax      bx=3
add bx,bx       bx=6
add bx,bx       bx=12
add bx,bx       bx=24
add bx,bx       bx=48
mov ax,bx      ax=48

那这样算的话还没有得到3的4次方吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 15:10:16 | 显示全部楼层
3的4次不能这样算,正确算法应该是:
mov ax,3
mul ax
mul ax
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 15:14:58 | 显示全部楼层
不是的,我是说我只想用MOV &ADD这二个命令来算,因为我还没有学到其它的,呵呵!~我只想一步一步的走!谢谢楼上的二位。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 15:15:31 | 显示全部楼层
本帖最后由 饭炒疍 于 2011-8-2 15:16 编辑

我只不过是没有绕过那个弯,其实道理我懂的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 18:52:31 | 显示全部楼层
3的4次方程序如下:
mov ax,3
mov dx,0
add dx,ax
add dx,ax
add dx,ax
mov ax,dx
mov dx,0
add dx,ax
add dx,ax
add dx,ax
mov ax,dx
mov dx,0
add dx,ax
add dx,ax
add dx,ax;算数结果在DX里

下面是用循环实现:
mov ax,3
mov bx,4
mov dx,0
mov cx,bx
sub cx,1
s:
add dx,ax
add dx,ax
add dx,ax
mov ax,dx
mov dx,0
loop s
算数结果在AX寄存器里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 18:53:07 | 显示全部楼层
3的4次方程序如下:
mov ax,3
mov dx,0
add dx,ax
add dx,ax
add dx,ax
mov ax,dx
mov dx,0
add dx,ax
add dx,ax
add dx,ax
mov ax,dx
mov dx,0
add dx,ax
add dx,ax
add dx,ax;算数结果在DX里

下面是用循环实现:
mov ax,3
mov bx,4
mov dx,0
mov cx,bx
sub cx,1
s:
add dx,ax
add dx,ax
add dx,ax
mov ax,dx
mov dx,0
loop s
算数结果在AX寄存器里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 18:56:34 | 显示全部楼层
兄弟,别浪费时间,mov,add只能实现2的次幂运算
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 18:57:14 | 显示全部楼层
乘法就用乘法指令mul
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 18:58:27 | 显示全部楼层
如果你学到标志寄存器就可以写出X的Y次方

下面是这今天写的,求:X^Y

写得好乱,但也实现了功能,谁能把它优化下??



assume cs:code
data segment
dw 128 dup (0);$
data ends
code segment
start:  
mov ax,data;此程序求AX的DX次方,结果放在数据段的前128个字节中,以16进制的形式存放,
mov ds,ax;如果你的计算结果大于128个字节数,可以自行更改$处
mov bx,0
mov di,16*8;$
mov si,1
mov ax,3;参数   x^y这里的AX等于X
cmp ax,0
je ookk
mov bp,ax
mov dx,4;参数    X^Y这里的DX=Y
mov cx,dx
sub cx,1
jb ookk
jcxz okk;上有政策
mov [bx],ax
s1:push cx

mov cx,bp
s:push cx
mov cx,si
add cx,0
s2:
mov ax,[bx]
adc [bx+di],ax
pushf
cmp cx,1
jz j
jmp nj
j:popf
jb j1
pushf
jmp nj
j1:inc si
add bx,2
add word ptr [bx+di],1
jmp ok
nj:add bx,2
popf
ok:loop s2
mov bx,0
pop cx
loop s
push si
s5:
mov ax,[bx+di]
mov [bx],ax
mov word ptr [bx+di],0
add bx,2
dec si
cmp si,0
ja s5
mov bx,0
pop si
pop cx
loop s1
jmp short ookk
okk:mov [bx],ax;下有对策
ookk:mov ax,4c00h
int 21h

code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 19:00:41 | 显示全部楼层
何苦浪费mul呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 19:08:12 | 显示全部楼层
可以实现,只是须要很长的代码量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 19:39:56 | 显示全部楼层
那你可用mul指令写出13的17次方的程序吗?13^17=???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-7 19:41:32 | 显示全部楼层
你在用个寄存器就可以了。自己想吧,不多说了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 10:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表