|
发表于 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
|
|