Скачиваний:
14
Добавлен:
09.05.2014
Размер:
12.5 Кб
Скачать

; ЎЁЎ«Ё®вҐЄ  ¬ Єа®®ЇаҐ¤Ґ«Ґ­Ё© Ё Ї®¤Їа®Ја ¬¬ ўЁавг «м­®Ј® Їа®жҐбб®а 
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)