Skip to content

Instantly share code, notes, and snippets.

@maehrm
Created October 28, 2018 05:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maehrm/629155572552b75235da12e7df8c0914 to your computer and use it in GitHub Desktop.
Save maehrm/629155572552b75235da12e7df8c0914 to your computer and use it in GitHub Desktop.
平成30年度秋期基本情報午後問12
Q12 START
LAD GR2,YMD
CALL DAYOFFST
RET
YMD DC 2018,10,28
END
DAYOFFST START
RPUSH
LD GR5,0,GR2 ; GR5:年
LD GR3,1,GR2 ; GR3:月
LD GR1,2,GR2 ; GR1:日
SUBL GR1,=1 ; GR1で日数をカウント
LAD GR4,ACCMDAYS,GR3
ADDL GR1,-1,GR4 ; 1月1日からの日数(平年)を求める
CPA GR3,=3 ; 月が3月以降のときうるう年を考慮
JMI SKIP
LD GR2,GR5
CALL LEAPYEAR
ADDL GR1,GR0 ; 2/29分の1を足す
SKIP LD GR2,=1970 ; 1970年から(年-1)年までの間(ただし、
LOOP CPA GR2,GR5 ; 年>1970)、1年の日数を加算
JZE BREAK
CALL LEAPYEAR
ADDL GR0,=365
ADDL GR1,GR0 ; 2/29分の1を足す
ADDA GR2,=1
JUMP LOOP
BREAK LD GR0,GR1
EXIT RPOP
RET
; ACCMDAYSは、平年の各月1日の1月1日からの日数(1月1日は0日目)
ACCMDAYS DC 0,31,59,90,120,151,181,212,243,273,304,334
END
LEAPYEAR START
RPUSH
SUBA GR0,GR0
LD GR3,GR2
AND GR3,=3
JNZ FIN
LD GR3,=100
CALL DIVISIBL
XOR GR0,=1
JNZ FIN
LD GR3,=400
CALL DIVISIBL
FIN RPOP
RET
END
DIVISIBL START
RPUSH
SUBA GR0,GR0
LOOP SUBA GR2,GR3
JPL LOOP
JMI FIN2
LD GR0,=1
FIN2 RPOP
RET
END
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment