饭炒疍 发表于 2011-8-2 12:49:21

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

今天刚学汇编,课本里面的我都能理解,但就是甲鱼兄提出的3的4次方,我不知道从何下手了,有几点不明白,
用:
MOV AX,3
ADD AX,AX   AX=6
ADD AX,AX   AX=12
……
但这样向上翻倍是得不可以得到3的4次方地对吧?
那我应该如何算?各位前辈们可否你下你们的思路?还是我根本没有必要去了解?(可能以后学到其它指令会更方便)
前辈最好只用 MOV,ADD 这二个指令帮我,因为我现在只学到这二个。

饭炒疍 发表于 2011-8-2 12:59:37

追加一个问题
如果:ADD BX,AX这样可以吗?那最后得到的值是BX地还是AX的?

嗜血丨灵异狂 发表于 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:}

饭炒疍 发表于 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次方吧?

死亡请帖 发表于 2011-8-2 15:10:16

3的4次不能这样算,正确算法应该是:
mov ax,3
mul ax
mul ax

饭炒疍 发表于 2011-8-2 15:14:58

不是的,我是说我只想用MOV &ADD这二个命令来算,因为我还没有学到其它的,呵呵!~我只想一步一步的走!谢谢楼上的二位。

饭炒疍 发表于 2011-8-2 15:15:31

本帖最后由 饭炒疍 于 2011-8-2 15:16 编辑

我只不过是没有绕过那个弯,其实道理我懂的

冰寒幽灵 发表于 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寄存器里

冰寒幽灵 发表于 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寄存器里

parbbo 发表于 2011-8-7 18:56:34

兄弟,别浪费时间,mov,add只能实现2的次幂运算

parbbo 发表于 2011-8-7 18:57:14

乘法就用乘法指令mul

冰寒幽灵 发表于 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 ,ax
s1:push cx

mov cx,bp
s:push cx
mov cx,si
add cx,0
s2:
mov ax,
adc ,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 ,1
jmp ok
nj:add bx,2
popf
ok:loop s2
mov bx,0
pop cx
loop s
push si
s5:
mov ax,
mov ,ax
mov word ptr ,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 ,ax;下有对策
ookk:mov ax,4c00h
int 21h

code ends
end start

parbbo 发表于 2011-8-7 19:00:41

何苦浪费mul呢?

冰寒幽灵 发表于 2011-8-7 19:08:12

可以实现,只是须要很长的代码量

冰寒幽灵 发表于 2011-8-7 19:39:56

那你可用mul指令写出13的17次方的程序吗?13^17=???

??? 发表于 2011-8-7 19:41:32

你在用个寄存器就可以了。自己想吧,不多说了
页: [1]
查看完整版本: 求助下,3的4次方如何算?