?? 16位32位整型數(shù)開方.txt
字號:
.
16位
整型數(shù)開方
.include "8515def.inc"
.def numlo = r16
.def numhi = r17
.def sqrt = r18
.def suber = r24
.def suberh = r25
; enter with the 16 bit Number in r16,r17
.org 0x00
rjmp reset
.org 0x20
reset: ldi r16,0x02 ; Stack Pointer Setup
out SPH,r16 ; Stack Pointer High Byte
ldi r16,0x5f ; Stack Pointer Setup
out SPL,r16 ; Stack Pointer Low Byte
loopm:
ldi r16,0x64
ldi r17,0x01
rcall sqrt
nop
rjmp loopm
Sqrt:
clr sqrt
ldi suber,1 ; initialize the seed to be subtracted
clr suberh ; for each iteration
loop: sub numlo,suber
sbc numhi,suberh
brlo exit
inc sqrt
adiw suber,2 ; keep the number to subtract ODD.
rjmp loop
exit:
ret ; the sqrt(num) on exit is stored in r18
.
32位
整型數(shù)開方
;input r15:r14:r13:r12 (it make a copy from r3::r0)
;output r25:r24
;use r20,r21,r22,r26,r28
;輸入返回數(shù)據(jù):lsqrt(0x5300164) = 0x2471
;對應(yīng)于8M晶振時開方所用時間為 48.38us;原程序提供者:Jens NL,Email:jensnl@home.com
.include "8515def.inc"
.org 0x00
rjmp reset
.org 0x20
reset:
ldi r16,0x02 ; Stack Pointer Setup
out SPH,r16 ; Stack Pointer High Byte
ldi r16,0x5F ; Stack Pointer Setup
out SPL,r16 ; Stack Pointer Low Byte
; 驗證
;test r25:r24 = lsqrt(0x5300164)
loopm:
ldi r16,0x64
mov r12,r16
ldi r16,0x01
mov r13,r16
ldi r16,0x30
mov r14,r16
ldi r16,0x05
mov r15,r16
rcall lsqrt
nop
rjmp loopm
lsqrt:
clr r20
clr r21
clr r22
clr r24
clr r25
clr r26
ldi r28,16
m03:
rol r15
rol r20
rol r21
rol r22
rol r15
rol r20
rol r21
rol r22
lsl r24
rol r25
rol r26
cp r24,r20
cpc r25,r21
cpc r26,r22
brsh m01
sbc r20,r24
sbc r21,r25
sbc r22,r26
subi r24,-2
m05:
m01:
dec r28
sbrs r28,0
sbrc r28,1
rjmp m03
breq m08
mov r15,r14
mov r14,r13
mov r13,r12
rjmp m03
m08:
lsr r26
ror r25
ror r24
ret
ASM源程序 匯編精華推薦網(wǎng)站: JACKT 匯編系統(tǒng)推薦:AVR Studio3 非常友好的工作界面
ASM軟件下載 最新版本 AVR Studio3.53 軟件使用手冊(E) ATMEL AVR論壇
--------------------------------------------------------------------------------
Copyright? 1999-2001, 曉奇工作室 E-Mail:info@xiao-qi.com
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -