jump命令による無限ループ

; jmp.ams
bits 16
org 0x100
mov ax, 0x0200
mov dx, 0x0040 ; char='@'
int 0x21
jmp 0x100

アセンブルして実行すると"@@@@@@@@@@....@@@"の嵐.ctrl+cで強制終了可.

不思議なのは,バイナリコードを見ても先頭にあると思われた"bits 16"や"org 0x100"と思われるコードが無いということ.

ADDRESS   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF 
------------------------------------------------------------------------------
00000000  B8 00 02 BA 40 00 CD 21 E9 F5 FF                  ク..コ@.ヘ!鵄.      

最後の3bytes分の"E9 F5 FF"が謎です.まあJump命令に相当するんだとは思う.でも"org 0x100"が無いからね.

"org 0x100"を消して再アセンブルしてみたら

ADDRESS   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F   0123456789ABCDEF 
------------------------------------------------------------------------------
00000000  B8 00 02 BA 40 00 CD 21 E9 F5 00                  ク..コ@.ヘ!鵄.      

"E9 F5 FF"が"E9 F5 00"になった.一番最後のとこに関係してるらしい,までしかわからん.