سلام من برنامه جذر 2 به زبان اسمبلی برای 8051 رو میخواستم .. کسی میتونه راهنمایی کنه؟
اطلاعیه
Collapse
No announcement yet.
برنامه جذر به زبان اسمبلی
Collapse
X
-
پاسخ : برنامه جذر به زبان اسمبلی
سلام.
اگه یادتون باشه یک روش تقریبی برای جذر گرفتن توی دوره راهنمایی یاد می دادن که فکر کنم باید اون روش رو برای جذر گرفتن با میکرو پیاده کنید.
این هم الگوریتم جذر در برنامه CodeVision که به زبان اسمبلی است....
a=sqrt(b);
////////////////////////////////
LDS R30,_b
LDS R31,_b+1
LDS R22,_b+2
LDS R23,_b+3
CALL __PUTPARD1
CALL _sqrt
STS _a,R30
STS _a+1,R31
STS _a+2,R22
STS _a+3,R23
__PUTPARD1:
ST -Y,R23
ST -Y,R22
ST -Y,R31
ST -Y,R30
RET
_sqrt:
sbiw r28,4
push r21
ldd r25,y+7
tst r25
brne __sqrt0
adiw r28,8
rjmp __zerores
__sqrt0:
brpl __sqrt1
adiw r28,8
rjmp __maxres
__sqrt1:
push r20
ldi r20,66
ldd r24,y+6
ldd r27,y+5
ldd r26,y+4
__sqrt2:
st y,r24
std y+1,r25
std y+2,r26
std y+3,r27
movw r30,r26
movw r22,r24
ldd r26,y+4
ldd r27,y+5
ldd r24,y+6
ldd r25,y+7
rcall __divf21
ld r24,y
ldd r25,y+1
ldd r26,y+2
ldd r27,y+3
rcall __addf12
rcall __unpack1
dec r23
rcall __repack
ld r24,y
ldd r25,y+1
ldd r26,y+2
ldd r27,y+3
eor r26,r30
andi r26,0xf8
brne __sqrt4
cp r27,r31
cpc r24,r22
cpc r25,r23
breq __sqrt3
__sqrt4:
dec r20
breq __sqrt3
movw r26,r30
movw r24,r22
rjmp __sqrt2
__sqrt3:
pop r20
pop r21
adiw r28,8
ret
__ROUND_REPACK:
TST R21
BRPL __REPACK
CPI R21,0x80
BRNE __ROUND_REPACK0
SBRS R30,0
RJMP __REPACK
__ROUND_REPACK0:
ADIW R30,1
ADC R22,R25
ADC R23,R25
BRVS __REPACK1
__REPACK:
LDI R21,0x80
EOR R21,R23
BRNE __REPACK0
PUSH R21
RJMP __ZERORES
__REPACK0:
CPI R21,0xFF
BREQ __REPACK1
LSL R22
LSL R0
ROR R21
ROR R22
MOV R23,R21
RET
__REPACK1:
PUSH R21
TST R0
BRMI __REPACK2
RJMP __MAXRES
__REPACK2:
RJMP __MINRES
__UNPACK:
LDI R21,0x80
MOV R1,R25
AND R1,R21
LSL R24
ROL R25
EOR R25,R21
LSL R21
ROR R24
__UNPACK1:
LDI R21,0x80
MOV R0,R23
AND R0,R21
LSL R22
ROL R23
EOR R23,R21
LSL R21
ROR R22
RET
__SWAPACC:
PUSH R20
MOVW R20,R30
MOVW R30,R26
MOVW R26,R20
MOVW R20,R22
MOVW R22,R24
MOVW R24,R20
MOV R20,R0
MOV R0,R1
MOV R1,R20
POP R20
RET
__UADD12:
ADD R30,R26
ADC R31,R27
ADC R22,R24
RET
__NEGMAN1:
COM R30
COM R31
COM R22
SUBI R30,-1
SBCI R31,-1
SBCI R22,-1
RET
__ADDF12:
PUSH R21
RCALL __UNPACK
CPI R25,0x80
BREQ __ADDF129
__ADDF120:
CPI R23,0x80
BREQ __ADDF128
__ADDF121:
MOV R21,R23
SUB R21,R25
BRVS __ADDF129
BRPL __ADDF122
RCALL __SWAPACC
RJMP __ADDF121
__ADDF122:
CPI R21,24
BRLO __ADDF123
CLR R26
CLR R27
CLR R24
__ADDF123:
CPI R21,8
BRLO __ADDF124
MOV R26,R27
MOV R27,R24
CLR R24
SUBI R21,8
RJMP __ADDF123
__ADDF124:
TST R21
BREQ __ADDF126
__ADDF125:
LSR R24
ROR R27
ROR R26
DEC R21
BRNE __ADDF125
__ADDF126:
MOV R21,R0
EOR R21,R1
BRMI __ADDF127
RCALL __UADD12
BRCC __ADDF129
ROR R22
ROR R31
ROR R30
INC R23
BRVC __ADDF129
RJMP __MAXRES
__ADDF128:
RCALL __SWAPACC
__ADDF129:
RCALL __REPACK
POP R21
RET
__ADDF127:
SUB R30,R26
SBC R31,R27
SBC R22,R24
BREQ __ZERORES
BRCC __ADDF1210
COM R0
RCALL __NEGMAN1
__ADDF1210:
TST R22
BRMI __ADDF129
LSL R30
ROL R31
ROL R22
DEC R23
BRVC __ADDF1210
__ZERORES:
CLR R30
CLR R31
CLR R22
CLR R23
POP R21
RET
__MINRES:
SER R30
SER R31
LDI R22,0x7F
SER R23
POP R21
RET
__MAXRES:
SER R30
SER R31
LDI R22,0x7F
LDI R23,0x7F
POP R21
RET
__DIVF21:
PUSH R21
RCALL __UNPACK
CPI R23,0x80
BRNE __DIVF210
TST R1
__DIVF211:
BRPL __DIVF219
RJMP __MINRES
__DIVF219:
RJMP __MAXRES
__DIVF210:
CPI R25,0x80
BRNE __DIVF218
__DIVF217:
RJMP __ZERORES
__DIVF218:
EOR R0,R1
SEC
SBC R25,R23
BRVC __DIVF216
BRLT __DIVF217
TST R0
RJMP __DIVF211
__DIVF216:
MOV R23,R25
PUSH R17
PUSH R18
PUSH R19
PUSH R20
CLR R1
CLR R17
CLR R18
CLR R19
CLR R20
CLR R21
LDI R25,32
__DIVF212:
CP R26,R30
CPC R27,R31
CPC R24,R22
CPC R20,R17
BRLO __DIVF213
SUB R26,R30
SBC R27,R31
SBC R24,R22
SBC R20,R17
SEC
RJMP __DIVF214
__DIVF213:
CLC
__DIVF214:
ROL R21
ROL R18
ROL R19
ROL R1
ROL R26
ROL R27
ROL R24
ROL R20
DEC R25
BRNE __DIVF212
MOVW R30,R18
MOV R22,R1
POP R20
POP R19
POP R18
POP R17
TST R22
BRMI __DIVF215
LSL R21
ROL R30
ROL R31
ROL R22
DEC R23
BRVS __DIVF217
__DIVF215:
RCALL __ROUND_REPACK
POP R21
RET
-
پاسخ : برنامه جذر به زبان اسمبلی
اینم جذر اسمبلی 8051 که یکی از دوستان زحمتشو کشید :
.MODEL small
.STACK 100h
.DATA
.CODE
SqrRoot Proc
; CX = Number.
; Returns :
; BX = Number.
mov bx,cx
SqrRootLoop:
mov ax,cx
mov dx,0
div bx
add ax,bx
shr ax,1
mov bx,ax
cmp bx,256d
ja SqrRootLoop
mov ax,bx
mov dx,bx
mul dx
cmp ax,cx
ja SqrRootLoop
mov ax,bx
inc ax
mov dx,bx
inc dx
mul dx
cmp ax,cx
jb SqrRootLoop
ret
ENDP SqrRoot
Start:
mov ax,@Data
mov ds,ax
mov cx,30000
call sqrRoot
mov ah,4ch
mov al,0
int 21h
END Start
دیدگاه
دیدگاه