|
;汇编部分
;#include<avr/io.h>
;#include<avr/interrupt.h>
;#include"MyMath.h"
.section .text
;uint16_t mysqrt_i(uint32_t a)
.global mysqrt_i
mysqrt_i:
mov r20,r24 ;r25:r24-->p
mov r21,r25
;r21:r20:r23:r22 32bit
eor r26,r26
eor r25,r25
eor r24,r24
eor r18,r18 ;r20:r19:r18-->4p
eor r19,r19
eor r27,r27
;1
lsl r22
rol r23
rol r20
rol r21
rol r26
lsl r22
rol r23
rol r20
rol r21
rol r26 ;左移2位
cp r18,r26
breq mysqrt_i_next2_0
;商1
ori r24,1
sbc r26,r18
ori r18,4
mysqrt_i_next2_0:
;2
lsl r24 ;
lsl r22
rol r23
rol r20
rol r21
rol r26
lsl r22
rol r23
rol r20
rol r21
rol r26 ;左移2位
cp r18,r26
brlo mysqrt_i_s21
lsl r18
rjmp mysqrt_i_s2_1
mysqrt_i_s21:
;商1
ori r24,1
sbc r26,r18
lsl r18 ;4p
ori r18,0x4
mysqrt_i_s2_1:
;3
lsl r24 ;
;lsl r18 ;4p
lsl r22
rol r23
rol r20
rol r21
rol r26
lsl r22
rol r23
rol r20
rol r21
rol r26 ;左移2位
cp r18,r26
brlo mysqrt_i_s31
lsl r18 ;4P
rjmp mysqrt_i_s3_2
mysqrt_i_s31:
ori r24,1
sbc r26,r18
lsl r18
ori r18,0x4 ;4P
mysqrt_i_s3_2:
;4
lsl r24 ; p
lsl r22
rol r23
rol r20
rol r21
rol r26
lsl r22
rol r23
rol r20
rol r21
rol r26 ;左移2位
cp r18,r26
brlo mysqrt_i_s41
lsl r18
rjmp mysqrt_i_s4_2
mysqrt_i_s41:
ori r24,1
sbc r26,r18
lsl r18 ;4p
ori r18,4
mysqrt_i_s4_2:
;一个字节已经移完,部分商已经产生了4位,R22已经移空
;接下来我移入R22:R26中
;5
lsl r24
lsl r23
rol r20
rol r21
rol r26
rol r22
lsl r23
rol r20
rol r21
rol r26 ;左移2位
rol r22
;
cp r19, r22
brlo mysqrt_i_s51
cp r18,r26
brlo mysqrt_i_s51
lsl r18
rjmp mysqrt_i_s5_2
mysqrt_i_s51:
ori r24,1
sbc r26,r18
sbci r22,0
lsl r18
ori r18,4
mysqrt_i_s5_2:
;6
lsl r24
lsl r23
rol r20
rol r21
rol r26
rol r22
lsl r23
rol r20
rol r21
rol r26 ;左移2位
rol r22
;
cp r19, r22
brlo mysqrt_i_s61
cp r18,r26
brlo mysqrt_i_s61
lsl r18
rjmp mysqrt_i_s6_2
mysqrt_i_s61:
ori r24,1
sbc r26,r18
sbci r22,0
lsl r18
ori r18,4
mysqrt_i_s6_2:
;7
lsl r24
lsl r23
rol r20
rol r21
rol r26
rol r22
lsl r23
rol r20
rol r21
rol r26 ;左移2位
rol r22
cp r19, r22
brlo mysqrt_i_s71
cp r18,r26
brlo mysqrt_i_s71
lsl r18
rol r19
rjmp mysqrt_i_s72
mysqrt_i_s71:
;商1
ori r24,1
sbc r26,r18
sbc r22,r19
lsl r18 ;4p
rol r19
ori r18,4
mysqrt_i_s72:
;8
lsl r24
lsl r23
rol r20
rol r21
rol r26
rol r22
lsl r23
rol r20
rol r21
rol r26 ;左移2位
rol r22
cp r19,r22
brlo mysqrt_i_s81
brne mysqrt_i_s82_2
cp r18,r26
brlo mysqrt_i_s81
mysqrt_i_s82_2:
lsl r18
rol r19
rjmp mysqrt_i_s82
mysqrt_i_s81:
;商1
ori r24,1
sbc r26,r18
sbc r22,r19
lsl r18
rol r19
ori r18,4
mysqrt_i_s82:
;9 r23已经空了,此时可以移进R23:R22:R26
lsl r24
rol r25
lsl r20
rol r21
rol r26
rol r22
rol r23
lsl r20
rol r21
rol r26 ;左移2位
rol r22
rol r23
cp r27, r23
brlo mysqrt_i_s91
cp r19,r22
brlo mysqrt_i_s91
brne mysqrt_i_s92_2
cp r18,r26
brlo mysqrt_i_s91
mysqrt_i_s92_2:
lsl r18
rol r19
rjmp mysqrt_i_s92
mysqrt_i_s91:
;商1
ori r24,1
sbc r26,r18
sbc r22,r19
sbci r23,0
lsl r18
rol r19
ori r18,4
mysqrt_i_s92:
;10
lsl r24
rol r25
lsl r20
rol r21
rol r26
rol r22
rol r23
lsl r20
rol r21
rol r26 ;左移2位
rol r22
rol r23
cp r27, r23
brlo mysqrt_i_s101
cp r19,r22
brlo mysqrt_i_s101
brne mysqrt_i_s102_2
cp r18,r26
brlo mysqrt_i_s101
mysqrt_i_s102_2:
lsl r18
rol r19
rjmp mysqrt_i_s102
mysqrt_i_s101:
;商1
ori r24,1
sbc r26,r18
sbc r22,r19
sbci r23,0
lsl r18
rol r19
ori r18,4
mysqrt_i_s102:
;11
lsl r24
rol r25
lsl r20
rol r21
rol r26
rol r22
rol r23
lsl r20
rol r21
rol r26 ;左移2位
rol r22
rol r23
cp r27, r23
brlo mysqrt_i_s111
cp r19,r22
brlo mysqrt_i_s111
brne mysqrt_i_s112_2
cp r18,r26
brlo mysqrt_i_s111
mysqrt_i_s112_2:
lsl r18
rol r19
rjmp mysqrt_i_s112
mysqrt_i_s111:
;商1
ori r24,1
sbc r26,r18
sbc r22,r19
sbci r23,0
lsl r18
rol r19
ori r18,4
mysqrt_i_s112:
;12
lsl r24
rol r25
lsl r20
rol r21
rol r26
rol r22
rol r23
lsl r20
rol r21
rol r26 ;左移2位
rol r22
rol r23
cp r27, r23
brlo mysqrt_i_s121
cp r19,r22
brlo mysqrt_i_s121
brne mysqrt_i_s122_2
cp r18,r26
brlo mysqrt_i_s121
mysqrt_i_s122_2:
lsl r18
rol r19
rjmp mysqrt_i_s122
mysqrt_i_s121:
;商1
ori r24,1
sbc r26,r18
sbc r22,r19
sbci r23,0
lsl r18
rol r19
ori r18,4 ;4p
mysqrt_i_s122:
;13
;R20已经空了
lsl r24
rol r25
lsl r21
rol r26
rol r22
rol r23
rol r20
lsl r21
rol r26 ;左移2位
rol r22
rol r23
rol r20
tst r20
brne mysqrt_i_s131
tst r23
brne mysqrt_i_s131
cp r19,r22
brlo mysqrt_i_s131
brne mysqrt_i_s132_2
cp r18,r26
brlo mysqrt_i_s131
mysqrt_i_s132_2:
lsl r18
rol r19
rjmp mysqrt_i_s132
mysqrt_i_s131:
;商1
ori r24,1
sec
sbc r26,r18
sbc r22,r19
sbc r23,0
sbc r20,0
lsl r18
rol r19
ori r18,4
mysqrt_i_s132:
;14
lsl r24
rol r25
lsl r21
rol r26
rol r22
rol r23
rol r20
lsl r21
rol r26 ;左移2位
rol r22
rol r23
rol r20
tst r20
brne mysqrt_i_s141
tst r23
brne mysqrt_i_s141
cp r19,r22
brlo mysqrt_i_s141
brne mysqrt_i_s142_2
cp r18,r26
brlo mysqrt_i_s141
mysqrt_i_s142_2:
lsl r18
rol r19
rjmp mysqrt_i_s142
mysqrt_i_s141:
;商1
ori r24,1
sec
sbc r26,r18
sbc r22,r19
sbci r23,0
sbci r20,0
lsl r18
rol r19
ori r18,4;4p
mysqrt_i_s142:
;15
lsl r24
rol r25
lsl r21
rol r26
rol r22
rol r23
rol r20
lsl r21
rol r26 ;左移2位
rol r22
rol r23
rol r20
tst r20
brne mysqrt_i_s151
tst r23
brne mysqrt_i_s151
cp r19,r22
brlo mysqrt_i_s151
brne mysqrt_i_s152_2
cp r18,r26
brlo mysqrt_i_s151
mysqrt_i_s152_2:
lsl r18
rol r19
rol r27
rjmp mysqrt_i_s152
mysqrt_i_s151:
;商1
ori r24,1
sec
sbc r26,r18
sbc r22,r19
sbci r23,0
sbci r20,0
lsl r18
rol r19
rol r27
ori r18,4 ;4p
mysqrt_i_s152:
;16
lsl r24
rol r25
lsl r21
rol r26
rol r22
rol r23
rol r20
lsl r21
rol r26 ;左移2位
rol r22
rol r23
rol r20
tst r20
brne mysqrt_i_s161
cp r27,r23
brlo mysqrt_i_s161
brne mysqrt_i_s162_2
cp r19,r22
brlo mysqrt_i_s161
brne mysqrt_i_s162_2
cp r18,r26
brlo mysqrt_i_s161
mysqrt_i_s162_2:
lsl r18
rol r19
rol r20
rjmp mysqrt_i_s162
mysqrt_i_s161:
;商1
ori r24,1 ;其实后面的可以不用做了
sec
sbc r26,r18
sbc r22,r19
sbc r23,r27
sbci r20,0
lsl r18
rol r19
rol r20
ori r18,4
mysqrt_i_s162:
;17
ret |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|