ログイン

【父の日】父の日なので、プログラマの父に機械語(アセンブリ)で書いたお手紙を送った

作成日 2025-06-15 18:19:10
最新更新日 2025-06-15 18:25:17
#父の日 #NASM #機械語 #アセンブリ #BIOS

今日は父の日です


2025年6月15日は父の日です。
ということで、プログラマの父に機械語で書いたお手紙を送ることにしました。

機械語(アセンブリ)


丁度私はOS開発で得た知識があり、アセンブリ(NASM)への理解も有ったため、
BIOS上で動くプログラムを作ることにしました。

条件
・512バイト(BIOSは先頭の512バイトを読み込むはず)
・良い感じの画面(デザインセンスは放棄した)
・印刷できる
・フロッピーに収まる

完成品


分かる人には分かるコードだと思います。
何処かで見たこともありますよね?
; 父の日2025年06月15用のアセンブリコード ;動作環境:BIOS ;媒体:フロッピー ;・概要 ;BIOSが最初に読み込むIPLに記述しています。 ;そのため512バイトという制限があります。 %define NL 0x0D, 0x0A ;rn %macro print 1 %push print_scope MOV SI, %1 %$loop: MOV AL, [SI] ADD SI, 1 CMP AL, 0 JE %$end MOV AH, 0x0E MOV BX, 15 INT 0x10 JMP %$loop %$end: %pop %endmacro CYLS EQU 10 ;どこまで読み込むか ORG 0x7C00 ;このプログラムがメモリ上のどこに読み込まれるか ;FAT12フォーマットのフロッピーのための記述 JMP entry DB 0x90 DB "20250615" DW 512 DB 1 DW 1 DB 2 DW 224 DW 2880 DB 0xF0 DW 9 DW 18 DW 2 DD 0 DD 2880 ;FAT12/16におけるオフセット36以降のフィールド DB 0x00 DB 0x00 DB 0x29 DD 0xFFFFFFFF DB "CHICHINOHI " DB "FAT12 " TIMES 18 DB 0 entry: MOV AX, 0 ;レジスタ初期化 MOV SS, AX MOV SP, 0x7C00 MOV DS, AX ;画面クリア MOV AH, 0x06 ;スクロールアップ MOV AL, 0 ;AL=スクロール行数(0)で全削除 MOV BH, 0x3E ;BH=属性 MOV CX, 0x0000 ;CH=Row/CL=Col(左上) MOV DX, 0x184F ;DH=Row/DL=79(左下) INT 0x10 MOV AH, 0x02 MOV BH, 0x00 MOV DL, 15 MOV DH, 9 INT 0x10 print d print d MOV AH, 0x02 MOV BH, 0x00 MOV DL, 20 MOV DH, 10 INT 0x10 print a MOV AH, 0x02 MOV BH, 0x00 MOV DL, 15 MOV DH, 11 INT 0x10 print b MOV AH, 0x02 MOV BH, 0x00 MOV DL, 28 MOV DH, 12 INT 0x10 print c MOV AH, 0x02 MOV BH, 0x00 MOV DL, 15 MOV DH, 13 INT 0x10 print d print d MOV AH, 0x02 MOV BH, 0x00 MOV DL, 0 MOV DH, 0 INT 0x10 a: DB "OTOUSAN ICUMO ALIGATOU", NL DB 0 b: DB "KONGOMO JOLOSHIKU ONEGAI SHIMASU", NL DB 0 c: DB "( 'w')/", NL DB 0 d: DB "================" DB 0 TIMES (0x7DFE - 0x7C00 - ($ - $$)) DB 0 ; 現在の場所から0x1Fdまで(残りの未使用領域)を0で埋める。 DB 0x55, 0xaa


たぶん駄文


多分その道の人からすれば「此処はこうすれば良いのでは?」とかあると思いますが、
まあ、私は趣味でやってるので、これで良いです。
ちなみに確かカツカツだったはずです。


ログインしたらコメントが書けますよ!