![]() |
Kalendarz na 200 lat | Kompilacja |
| NAZWA | WEJŚCIOWE | WYJŚCIE DANYCH | |
| Cal | Generowanie ciągu ASCIIZ z angielską nazwą dnia tygodnia na podstawie daty | D1.l, D2.b, D3.l | textbuf |
| Cals | Generowanie ciągu ASCIIZ z angielską nazwą dnia tygodnia na podstawie daty (weryfikacja) | D1.l, D2.b, D3.l | textbuf |
Cal: moveq #$01,D1 ;numer dnia (1-31)
moveq #$01,D2 ;numer miesiąca (1-12)
move.l #$076D,D3 ;numer roku (1901-2099)
lea textbuf,A0 ;adres wyjścia danych
lea Cal6(pc),A1
move.b #$1C,$01(A1) ;luty=28 dni
move.l D3,D4
ror.l #2,D4
add.l D1,D3
move.w D4,D1
add.l D1,D3
swap D4
tst.w D4
bne.s Cal0
subq.l #1,D3
addq.b #1,$01(A1) ;luty=29 dni
Cal0: moveq #$00,D4
Cal1: move.b (A1)+,D4
add.l D4,D3
subq.b #1,D2
bne.s Cal1
sub.l D4,D3
divu #$07,D3
clr.w D3
swap D3
rol.b #2,D3
lea Cal5(pc),A1
add.l D3,A1
Cal2: tst.b (A1)+
bne.s Cal2
bsr.s Cal3
lea Cal4(pc),A1
Cal3: move.b (A1)+,(A0)+
tst.b (A1)
bne.s Cal3
clr.b (A0)
rts
Cal4: dc.b "day"
Cal5: dc.b 0,"Fri",0,"Satur",0,"Sun",0,"Mon",0,"Tues",0,"Wednes",0,"Thurs",0
Cal6: dc.b 31,0,31,30,31,30,31,31,30,31,30,31
;Rozmiar: 148 B, linii kodu: 40
Procedura generuje ciąg ASCIIZ z angielską nazwą dnia tygodnia na podstawie daty, zapisanej
Cals: moveq #$01,D1 ;numer dnia (1-31)
moveq #$01,D2 ;numer miesiąca (1-12)
move.l #$076D,D3 ;numer roku (1901-2099)
lea textbuf,A0 ;adres wyjścia danych
moveq #$30,D5
tst.l D1
beq.s Cals4 ;D1=0
moveq #$1F,D4
cmp.l D4,D1
bhi.s Cals4 ;D1>31
moveq #$31,D5
tst.b D2
beq.s Cals4 ;D2=0
cmp.b #$0C,D2
bhi.s Cals4 ;D2>12
moveq #$32,D5
cmp.l #$076D,D3
bcs.s Cals4 ;D3<1901
cmp.l #$0833,D3
bhi.s Cals4 ;D3>2099
lea Cals7(pc),A1
move.b #$1C,$01(A1) ;luty=28 dni
move.l D3,D4
ror.l #2,D4
add.l D1,D3
move.w D4,D5
add.l D5,D3
swap D4
tst.w D4
bne.s Cals0
subq.l #1,D3
addq.b #1,$01(A1) ;luty=29 dni
Cals0: moveq #$00,D4
Cals1: move.b (A1)+,D4
add.l D4,D3
subq.b #1,D2
bne.s Cals1
moveq #$33,D5
cmp.b D4,D1
bhi.s Cals4 ;D1>liczby dni w danym miesiącu
sub.l D4,D3
divu #$07,D3
clr.w D3
swap D3
rol.b #2,D3
lea Cals6(pc),A1
add.l D3,A1
Cals2: tst.b (A1)+
bne.s Cals2
bsr.s Cals3
lea Cals5(pc),A1
Cals3: move.b (A1)+,(A0)+
tst.b (A1)
bne.s Cals3
clr.b (A0)
rts
Cals4: move.b #$52,(A0)+
move.b D5,(A0)+
clr.b (A0)
rts
Cals5: dc.b "day"
Cals6: dc.b 0,"Fri",0,"Satur",0,"Sun",0,"Mon",0,"Tues",0,"Wednes",0,"Thurs",0
Cals7: dc.b 31,0,31,30,31,30,31,31,30,31,30,31
;Rozmiar: 206 B, linii kodu: 63
Procedura działa podobnie jak wcześniejsza, ale weryfikuje poprawność podanej daty.