bb 2e 34 31 34 53 6a 04 58 28 c7 53 89 e1 6a 08 5a 20 14 01 01 01 31 db 53 cd 80 58 59 59 c3
.section .text .global main .type main, @function main: /*5*/ mov $0x3431342e, %ebx /*1*/ push %ebx /*2*/ push $4 /*1*/ pop %eax /*2*/ sub %al, %bh /*1*/ push %ebx /*2*/ mov %esp, %ecx /*2*/ push $8 /*1*/ pop %edx /*3*/ and %dl, (%ecx, %eax, 1) /* 20 14 01 */ /*2*/ add %eax, (%ecx) /* 01 01 */ /*2*/ xor %ebx, %ebx /*1*/ push %ebx /*2*/ int $0x80 /*1*/ pop %eax /*1*/ pop %ecx /*1*/ pop %ecx /*1*/ ret(プログラム説明)
実行すると「201414」と出力されます.「2014年1月4日」という意味です. 書初めは1月2日ですが,アセンブラ短歌の書初めはそこから少し間をおいて, 1月4日ということに勝手にしちゃいました (例年だと仕事始めの日なので,仕事始めに書初めでもしていただければと).
EBXに設定した値を流用してスタックに積み, 4句目(「20 14 01 01」の部分)で値を微調整しています. さらにいったん出力した文字を Back Space の出力で修正することで, うまく表示しています.
また標準出力でなく標準入力(ファイルディスクリプタ=ゼロ)に出力することで, 出力先に1という値を設定せずに済んでいます.LinuxやFreeBSDでは, これでもひとまず出力できるようです.
(鑑賞点)
「2014年1月4日」と出力しつつ,4句目には「20 14 01 01」のバイト列が見られて 「2014年1月1日元旦」を表現していることは,アセンブラ短歌による新年の幕開けを 示しています.
またスタックの後始末や戻り値設定を丁寧に行うことで関数としての形式を保ちつつ, 標準入力を利用して出力するといった変則的な手法を用いていることは, 昨年がアセンブラ短歌元年だったことに対して,本年は旧来の伝統を引き継ぎつつ さらなる進化を遂げるための発展の年となることを示唆しているようです.
今年もアセンブラ短歌をよろしくお願いします.