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: 40Procedura 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: 63Procedura działa podobnie jak wcześniejsza, ale weryfikuje poprawność podanej daty.