Добавил:
Eatmore
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
; ЎЁЎ«Ё®вҐЄ ¬ Єа®®ЇаҐ¤Ґ«ҐЁ© Ё Ї®¤Їа®Ја ¬¬ ўЁавг «м®Ј® Їа®жҐбб®а
include sab515_.ini
;16-а §ап¤лҐ ॣЁбвал
w0 equ 0 ;r01
w1 equ 2 ;r23
w2 equ 4 ;r45
w3 equ 6 ;r67
;32-а §ап¤лҐ ॣЁбвал
d0 equ w0 ;r0-3 w0-1
d1 equ w2 ;r4-7 w2-3
;а бЇаҐ¤Ґ«ҐЁҐ ўгв॥© Ї ¬пвЁ
;Џа®Ја ¬¬ п Ї ¬пвм
SEG CODE
ORG 8000H
jmp start ;®Ўе®¤ ЎЁЎ«Ё®вҐЄЁ Ї®¤Їа®Ја ¬¬ Ё в Ў«Ёж
ORG 8080H ;‚…Љ’ЋђЂ ЇаҐалў Ё©
;‚Ёавг «млҐ б।бвў ®Ўа Ў®вЄЁ ¤ ле - ¬ Єа®Є®¬ ¤л б
;Ї а ¬Ґва ¬Ё, Ґпў® ЁбЇ®«м§гов ॣЁбвал r0-r7,w0-w3,d0-d1
inc_w %macro x
mov a,x+1
add a,#01
mov x+1,a
mov a,x
addc a,#0
mov x,a
%endm
dec_w %macro x
clr c
mov a,x+1
subb a,#01
mov x+1,a
mov a,x
subb a,#0
mov x,a
%endm
swap_w %macro x
mov a,x
mov x,x+1
mov x+1,a
%endm
movb_rx %macro x,y ;XRAM(y+)->x Ў ©в
push psw
mov dph,y
mov dpl,y+1
movx a,@dptr
mov x,a
inc_w y
pop psw
%endm
movb_xr %macro x,y ;XRAM(y+)<-x Ў ©в
push psw
mov dph,y
mov dpl,y+1
mov a,x
movx @dptr,a
inc_w y
pop psw
%endm
movw_rx %macro x,y ;XRAM(y+)->x б«®ў
movb_rx x,y
movb_rx x+1,y
%endm
movw_xr %macro x,y ;XRAM(y+)<-x б«®ў
movb_xr x,y
movb_xr x+1,y
%endm
timet proc ;ў б⥪Ґ § ¤Ґа¦Є
;Їа®Ја ¬¬ п § ¤Ґа¦Є x ¬бҐЄ (1-250)/10 ¬б
L?1 mov r1,#32h
djnz r1,$ ;§ ¤Ґа¦Є 50*2 ¬Єб = 0.1 ¬б
djnz r0,L?1
ret
timet endproc
time %macro x
PUSH 00
PUSH 01
mov r0,#x
call timet
pop 01
pop 00
%endm
add_w %macro y,x ;wx+wy->wy
mov a,x+1
add a,y+1
mov y+1,a
mov a,x
addc a,y
mov y,a
%endm
addc_w %macro y,x ;wx+wy+c->wy
mov a,x+1
addc a,y+1
mov y+1,a
mov a,x
addc a,y
mov y,a
%endm
add_c %macro y,c ;#c+wy->wy ЇаЁ¬ҐпҐвбп в®«мЄ® б Є®бв в®© add_c w1,#1234
mov dptr,c
mov a,y+1
add a,dpl
mov y+1,a
mov a,y
addc a,dph
mov y,a
%endm
mov_w %macro y,x ;wx->wy
mov y+1,x+1
mov y,x
%endm
mov_d %macro y,x ;dx->dy
mov_w y+2,x+2
mov_w y,x
%endm
mov_c %macro y,c ; ЇаЁ Ї®¤бв ®ўЄҐ #c - Є®бв в
mov dptr,c
mov y+1,dpl
mov y,dph
%endm
clr_w %macro x
mov x,#0
mov x+1,#0
%endm
clr_d %macro x
clr_w x
clr_w x+2
%endm
cpl_w %macro x ;0-wy->wy
MOV A,x+1
CPL A
ADD A,#1
MOV x+1,A
MOV A,x
CPL A
ADDC A,#0
MOV x,A
%endm
subb_w %macro y,x ;wy-wx->wy
clr c
mov a,y+1
subb a,x+1
mov y+1,a
mov a,y
subb a,x
mov y,a
%endm
subbc_w %macro y,x ;wy-wx->wy
mov a,y+1
subb a,x+1
mov y+1,a
mov a,y
subb a,x
mov y,a
%endm
subo_w %macro y,x ;wy-wx->wx
clr c
mov a,y+1
subb a,x+1
mov x+1,a
mov a,y
subb a,x
mov x,a
%endm
rlc_w %macro x ;c-§ ¤ ®
mov a,x+1
rlc a
mov x+1,a
mov a,x
rlc a
mov x,a
%endm
rlc_xy %macro x,y ;c-§ ¤ ®
mov r0,y
rrll mov a,x+1
rlc a
mov x+1,a
mov a,x
rlc a
mov x,a
djnz r0,rrll
%endm
rlc_d %macro x,y ;C-§ ¤ ®
rlc_w x+2
rlc_w x
%endm
rrc_d %macro x
rrc_w x
rrc_w x+2
%endm
tabw %macro z,x,y ;ўлЎа вм б«®ў® Ё§ в Ў«Ёжл z=x(y)
mov a,y ;z-б«®ў® y-Ў ©в
rl a
tabb z,x,acc
inc a
movc a,@a+dptr
mov z+1,a
%endm
tabb %macro z,x,y ;ўлЎа вм Ў ©в Ё§ в Ў«Ёжл z=x(y)
;z-Ў ©в y-Ў ©в
mov dptr,#x
mov a,y
movc a,@a+dptr
mov z,a
%endm
;---------------------¬ Єа®-Ї®¤Їа®Ја ¬¬л
okrg: ;( w3+1 )
mov a,r7
add a,#1
mov r7,a
mov a,r6
addc a,#0
mov r6,a
mov a,r5
addc a,#0
mov r5,a
mov a,r4
addc a,#0
mov r4,a
ret
okrd: mov a,r2 ;бв аи п жЁда з бв®Ј® ЇҐаҐ¤ ®ЄагЈ«ҐЁҐ¬
rl a
mov r5,a
lcall okrg
ret
norm: mov a,r0
anl a,#80h
jz dela
lcall shr47
clr c
mov a,r0
rrc a
mov r0,a
mov a,r1
rrc a
mov r1,a
dela: ret
DOPCOD: MOV A,R1
CPL A
ADD A,#1
MOV R1,A
MOV A,R0
CPL A
ADDC A,#0
MOV R0,A
RET
SH1L47: CLr C
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
RET
SHR47:
MOV A,R4
RRC A
MOV R4,A
MOV A,R5
RRC A
MOV R5,A
MOV A,R6
RRC A
MOV R6,A
MOV A,R7
RRC A
MOV R7,A
RET
;( ----------------------------- 㬮¦ҐЁҐ 16*16->32 )
mult: ;( R 0,1*R 6,7 -> R 4,5,6,7 )
CLR A
MOV R4,A
MOV R5,A
MOV R3,#10h
m00: MOV A,R7
clr c
Jnb acc.0,mu1
LCALL SM0145
SJMP Mu1
SM0145: MOV A,R1
ADD A,R5
MOV R5,A
MOV A,R0
ADDC A,R4
MOV R4,A
RET
Mu1: LCALL SHR47
DJNZ R3,M00
RET
mul_w %macro y,x
mov_w w0,y
mov_w w3,x
call mult
%endm
; ------------------------------ бЁ¬¬ҐваЁз®Ґ ®ЄагЈ«ҐЁҐ
DELN: ;( r4567/r01 -> r67 )
lcall norm
mov_c w1,#11h
clr c
mov a,r5
subb a,r1
mov a,r4
subb a,r0
mov a,#0ffh ;ЇаЁ§ Є ЇҐаҐЇ®«ҐЁп
jnc delv
dD1: LCALL SH1L47
LCALL DOPCOD
LCALL SM0145
MOV A,R7
ADDC A,#0
MOV R7,A
LCALL DOPCOD
Dd3:
DJNZ R3,RDL ;17 и Ј®ў ¤Ґ«ҐЁп Ё жЁда з бв®Ј®, бв аи п ў r5(0)
lcall okrd ; ®ЄагЈ«ҐЁҐ Ї® r7(0) жЁдаҐ
lcall shr47 ; ў®ббв ®ў«ҐЁҐ з бв®Ј® Ё бв а襩 жЁдал з бв®Ј®
mov a,#0 ; ЇаЁ§ Є Є®а४⮣® १г«мв в
delv: RET
RDL:
mov 02,06 ;§ Ї®¬Ёвм бв аиго жЁдаг ЇҐаҐ¤ б¤ўЁЈ®¬
anl 02,#80h
MOV A,R7
jb acc.0,dd1
LCALL SH1L47
LCALL SM0145
MOV A,R7
ADDC A,#0
MOV R7,A
sJMP Dd3
DELO: ;( r4567/r01 -> r67 )
lcall norm
mov_c w1,#10h
clr c
mov a,r5
subb a,r1
mov a,r4
subb a,r0
mov a,#0ffh ;ЇаЁ§ Є ЇҐаҐЇ®«ҐЁп
jnc delvA
dDD1: LCALL SH1L47
LCALL DOPCOD
LCALL SM0145
MOV A,R7
ADDC A,#0
MOV R7,A
LCALL DOPCOD
DdD3:
DJNZ R3,RRDL ;17 и Ј®ў ¤Ґ«ҐЁп Ё жЁда з бв®Ј®, бв аи п ў r5(0)
mov a,#0 ; ЇаЁ§ Є Є®а४⮣® १г«мв в
delvA: RET
RRDL:
MOV A,R7
jb acc.0,Ddd1
LCALL SH1L47
LCALL SM0145
MOV A,R7
ADDC A,#0
MOV R7,A
sJMP DDd3
div_w %macro y,x
mov_w w0,x
call deln
mov_w y,w3
%endm
;( -------------------------- ЇҐаҐў®¤ 2/10 )
tr_2d: ;( R 0,1 -> R 2,3 )
anl psw,#0e7h ;( perepolnenie )
clr c
mov a,r1
subb a,#0fh
mov a,r0
subb a,#27h
mov a,#0ffh
jnc tr2dv
CLR A
MOV R2,A
MOV R3,A
MOV R5,#10h
MZ: clr c
RLC_w w0
MOV A,R3
ADDC A,R3
DA A
MOV R3,A
MOV A,R2
ADDC A,R2
DA A
MOV R2,A
DJNZ R5,MZ
mov a,#0
tr2dv: RET
tr2d %macro x
mov_w w0,x
call tr_2d
mov_w x,w1
%endm
;( --------------------------- ЇҐаҐў®¤ 10/2 )
tr_d2: ;( R 2 3 -> R 0 1 )
anl psw,#0e7h
CLR A
MOV R0,A
MOV R1,A
MOV A,#0F0h
ANL A,R2
SWAP A
MOV R4,#9
LCALL AD
MOV A,#0Fh
ANL A,R2
MOV R4,#9
LCALL AD
MOV A,#0F0h
ANL A,R3
SWAP A
MOV R4,#9
LCALL AD
MOV A,#0Fh
ANL A,R3
LCALL AD
RET
AD: ADD A,R1
MOV R1,A
CLR A
ADDC A,R0
MOV R0,A
MOV A,R1
MOV R6,A
MOV A,R0
MOV R5,A
MOV A,R4
JZ AM
MA: MOV A,R6
ADD A,R1
MOV R1,A
MOV A,R5
ADDC A,R0
MOV R0,A
DJNZ R4,MA
AM: RET
trd2 %macro x
mov_w w1,x
call tr_d2
mov_w x,w0
%endm
; --------------------------------------- Є®аҐм Єў ¤а вл© 32->16 )
; Є®аҐм Єў ¤а вл© 32->16)
; sqrt[r4-7] -> r01 , r8-бзҐвзЁЄ
summ:
mov a,r4
add a,#0c0h
mov r4,a ; r4+c0 -> r4 )
mov a,r3
addc a,r1
mov r3,a
mov a,r2
addc a,r0
mov r2,a
sjmp k2
shl01: mov a,r1
rlc a
mov r1,a
mov a,r0
rlc a
mov r0,a
ret
shl27: clr c
mov a,r7
rlc a
mov r7,a
mov a,r6
rlc a
mov r6,a
mov a,r5
rlc a
mov r5,a
mov a,r4
rlc a
mov r4,a
mov a,r3
rlc a
mov r3,a
mov a,r2
rlc a
mov r2,a
ret
shl2r27: acall shl27
acall shl27
ret
sub: mov a,r4
add a,#0c0h
mov r4,a
cpl c
mov a,r3
subb a,r1
mov r3,a
mov a,r2
subb a,r0
mov r2,a
k1: cpl c
k2: acall shl01
acall shl2r27
ret
sqrt32:
mov 08,#10h
mov r2,#0
mov r3,#0
mov r0,#0
mov r1,#0
cikl: acall sub
cikl2: mov a,08
dec a
mov 08,a
jz conec
mov a,r1
anl a,#01
jnz cikl
acall summ
sjmp cikl2
conec: ret
sqrt %macro x ;®ЇҐа ¤ ў ॣЁбвॠd2
call sqrt32
mov_w x,w0
%endm
;===================================================
;ЇаЁЄ« ¤ п Їа®Ја ¬¬ ў бЁб⥬Ґ Є®¬ ¤ ўЁавг «м®© ¬ иЁл
;------------------------------------------------
; ЇаҐ®Ўа §®ў ЁҐ д®а¬г«л б ¬ бив ЎЁа®ў ЁҐ¬
; sinx =x-x^3/3! +x^5/5! -> x(1-x^2/6(1-x^2/20))->
; -> x/mx(mx-x^2/mx^2/6(mx-x^2/20/mx))
; mx=1000 -> x/1000(1000-x^2/20000((1000-x^2/20000)/300)
;и Ј б奬 ўлзЁб«ҐЁ© ¬ Єа® бᥬЎ«Ґа
;start § १ҐаўЁа®ў п ¬ҐвЄ з «
;m1 б⥪,ўў®¤ ;mov sp,#бб+2 trd2 x
;m2 x^2->d1 ;mov_w y,x mul_w y,x ;d1-Їа®Ё§ўҐ¤ҐЁҐ
;m3 d1/20000->x2 ;mov_c y,#20000 div_w x2,y ;d1/y->x2
;m4 1000-x2 ;mov_c cc,#1000 subb_w cc,x2
;m5 x2*[4]->d1 ;mul_w cc,x2 ; d1-Їа®Ё§ўҐ¤ҐЁҐ
;m6 d1/300->y ;mov_c cc,#300 div_w y,cc
;m7 1000-y ;mov_c cc,#1000 subo_w cc,y
;m8 x*[7] ;mul_w y,x ; d1-Їа®Ё§ўҐ¤ҐЁҐ
;m9 [8]/1000->y ;div_w y,cc
;m10 ўлў®¤ ; tr2d y
;--------------------------¬ Єа® бᥬЎ«Ґа AVA51
SEG CODE
; --------------------------------------
start:
m1 mov sp,#stack ;гбв ®ўЁвм ¤® б⥪
trd2 x
m2 mov_w y,x
mul_w y,x ;d1-Їа®Ё§ўҐ¤ҐЁҐ
m3 mov_c y,#20000
div_w x2,y ;d1/y->x2
m4 mov_c cc,#1000
subb_w cc,x2
m5 mul_w cc,x2 ; d1-Їа®Ё§ўҐ¤ҐЁҐ
m6 mov_c cc,#300
div_w y,cc
m7 mov_c cc,#1000
subo_w cc,y
m8 mul_w y,x ; d1-Їа®Ё§ўҐ¤ҐЁҐ
m9 div_w y,cc
m10 tr2d y
end
Соседние файлы в папке описание ассемблера i51(51fx,51gb,52,sab515535)