求助下,3的4次方如何算?
今天刚学汇编,课本里面的我都能理解,但就是甲鱼兄提出的3的4次方,我不知道从何下手了,有几点不明白,用:
MOV AX,3
ADD AX,AX AX=6
ADD AX,AX AX=12
……
但这样向上翻倍是得不可以得到3的4次方地对吧?
那我应该如何算?各位前辈们可否你下你们的思路?还是我根本没有必要去了解?(可能以后学到其它指令会更方便)
前辈最好只用 MOV,ADD 这二个指令帮我,因为我现在只学到这二个。
追加一个问题
如果:ADD BX,AX这样可以吗?那最后得到的值是BX地还是AX的? 写程序 代码 能优化最好 就 优化减小内存占用空间如果用的 代码量太高给别人也不好看过的、
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:} 优化这个我懂关键是我现在想知道他最基础的运算,我现在是刚学,最基础的都不懂那就不能谈优化了。
先不谈循环,这个我还没有学到,等学到后在用,
先说第一个你给的例子,我这样理解对吗?
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次方吧? 3的4次不能这样算,正确算法应该是:
mov ax,3
mul ax
mul ax
不是的,我是说我只想用MOV &ADD这二个命令来算,因为我还没有学到其它的,呵呵!~我只想一步一步的走!谢谢楼上的二位。 本帖最后由 饭炒疍 于 2011-8-2 15:16 编辑
我只不过是没有绕过那个弯,其实道理我懂的 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寄存器里 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寄存器里 兄弟,别浪费时间,mov,add只能实现2的次幂运算 乘法就用乘法指令mul 如果你学到标志寄存器就可以写出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
何苦浪费mul呢? 可以实现,只是须要很长的代码量 那你可用mul指令写出13的17次方的程序吗?13^17=??? 你在用个寄存器就可以了。自己想吧,不多说了
页:
[1]