2017年書き初め

正月を過ぎてしまったが、新年ということで初心者ながら短歌を詠んだので記事にする。

55 31 db eb 13            
2d 80 33 e1 01 78 08
2d f0 c7 67 58
79 f2 43 89 d8 5d c3
6a 0d 58 cd 80 eb ed

Linux/x86 向けのアセンブラ短歌になっている。

ソースは次の通り。

    .intel_syntax noprefix
    .section .text
    .global main
    .type main, @function
main:
    push ebp             /* 1 */
    xor ebx, ebx         /* 2 */
    jmp 4f               /* 2 */
1:  sub eax, 0x01E13380  /* 5 */ # 365 * 24 * 60 * 60
    js 3f                /* 2 */
2:  sub eax, 0x5867c7f0  /* 5 */ # 2017-01-01 00:00:00 JST
    jns 1b               /* 2 */
    inc ebx              /* 1 */
3:  mov eax, ebx         /* 2 */
    pop ebp              /* 1 */
    ret                  /* 1 */
4:  push 0x0d            /* 2 */
    pop eax              /* 1 */
    int 0x80             /* 2 */
    jmp 2b               /* 2 */

現在時刻を取得し、2017年であれば終了ステータス0で正常終了し、そうでなければ終了ステータス1で終了する。

上のソースを in2017.S というファイル名で保存し、動作確認をしてみる。

$ gcc in2017.S -o in2017 -masm=intel -m32
$ ./in2017 && echo 2017
2017

今は 2017 年のようだ。 時刻を変えて確認する。

$ sudo date -s "2016-12-31 23:59:59"; ./in2017 || echo "not 2017" 
2016年 12月 31日 土曜日 23:59:59 JST
not 2017
$ sudo date -s "2017-01-01 00:00:00"; ./in2017 && echo "2017"
2017年  1月  1日 日曜日 00:00:00 JST
2017
$ sudo date -s "2017-12-31 23:59:59"; ./in2017 && echo "2017"
2017年 12月 31日 日曜日 23:59:59 JST
2017
$ sudo date -s "2018-01-01 00:00:00"; ./in2017 || echo "not 2017" 
2018年  1月  1日 月曜日 00:00:00 JST
not 2017

確かに2017年かどうかを判別できている。

初めは2017年であれば「🐓」とでも表示する短歌を作ろうと思ったのだが、力不足で完成させられなかった。「🐓」と表示する代わりに、ジャンプ系の命令を多く配してみた。5句中4句にジャンプ命令が含まれている。

書き初め風に言えば、「飛躍の年」だ。
幸多き年になりますように。