Olso:
ich hab jez nur nen Mega8 aber der assembler code würde in etwa folgendermaßen lauten (AVRStudio):
Code:
.include "m8def.inc"
.org 0x0000
.def Xx = R16
.def count= R17
.def zw = R0
rjmp RESET
RESET:
ldi Xx, 0xA3 ;was ist die Wurzel aus A3 ?
ldi count, 0x0
Loop1:
inc count
mul count, count
cp zw, Xx
brlo Loop1
;Ergebniss ist jez in count
also in Xx steht die zahl von der die Wurzel gezogen werden soll, am ende der schleife steht das ergebniss in count. genauer gehts nich in integer
also ich war da jez ein bischen faul, denn wenn man das mit 64 bit macht, sauerts länger, also mach folgendes:
increment nicht um 1 sondern addiere ein register mit anfangs vielleicht 2^8, wenn das ergebniss das erste mal größer war als die gesuchte zahl, zieh vom counter einmal 2^8 ab und shifte das register mit der schrittweite einmal, so dass jez 2^7 drinn steht, wiederhole obe, biss die schrittweite null iss; wennde das ganze nun mit 64 bit oder sowas machen willt musste dier halt'n bischen basteln das die mathematik auch damit geht (muss du mit deinem controller ausmachen )
Lesezeichen