weixianlang 发表于 2011-8-5 21:07:36

关于3的N次方的解释

本帖最后由 weixianlang 于 2011-8-5 21:08 编辑

很多在监测点2点几就开始问3的4次方了,我很纳闷,以前我在学的时候好像没碰到过,所以我也直接给了大家回答,但是我发现多数人已经习惯了一直N次方的习惯性代码,就是
add ax,ax
add ax,ax
......
以此类推

书上的例子是有特殊性的,因为底数是2,2的N次方就是底数每次乘以2以后的结果作为下一次的底数,下一次的底数再乘以2,又一次类推,
但是,我就不说别的数了,就说1,1的N次方得多少?
add ax,ax
add ax,ax??????
...........
感觉不对了吧?这就是王爽据这个例子的奥秘,如果刚学几个加法,就能求N次幂,那么也太夸张了(至少我现在还没见到谁只有传送和加法指令搞定的,当然,是可以的,小点的数字,来个大点的,你怎么办?)所以王爽为了给大家一个合理的例子,就选择了这个特殊的数字,2,也方便大家实践,所以请大家不要被这个2误导了,后面的知识好多着,也没必要为了这个题目苦恼,打好基础,后面的难题就会迎刃而解!

只是丶梦 发表于 2011-8-5 21:54:18

{:1_1:}被你一说我才想到1这个.但是想了下我只能想到用
cmp ax,1
再看标志寄存器如果是ZF=1
就跳到专门的执行.

思路完毕.请求漏洞

parbbo 发表于 2011-8-5 22:04:25

2是个特殊数字,做底数容易误导初学者,认为所有底数的n次幂都是只要add就ok

sean1207 发表于 2011-8-5 22:10:55

是啊是啊……挺误导人的……{:1_1:}

fisher60 发表于 2011-8-6 10:28:38

举一反三,有启发

冰寒幽灵 发表于 2011-8-7 19:01:03

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

weixianlang 发表于 2011-8-7 22:59:38

冰寒幽灵 发表于 2011-8-7 19:01 static/image/common/back.gif
assume cs:code
data segment
dw 128 dup (0);$


这位施主...???

parbbo 发表于 2011-8-7 23:37:50

哥们哪是注释吧,不知到什么意思

汇编壹加壹 发表于 2011-8-8 00:41:43

冰寒幽灵 发表于 2011-8-7 19:01 static/image/common/back.gif
assume cs:code
data segment
dw 128 dup (0);$


此乃 成吉思汗
页: [1]
查看完整版本: 关于3的N次方的解释