それは明らかに 16 ビットのリアル モード x86 コード、DOS 用の .com ファイル、またはその他のフラット バイナリです。
$echo 'B8 00 B8 8E E8 B4 00 CD 16 65 88 00 C3' | udcli -x -16
0000000000000000 b800b8 mov ax, 0xb800
0000000000000003 8ee8 mov gs, ax
0000000000000005 b400 mov ah, 0x0
0000000000000007 cd16 int 0x16
0000000000000009 658800 mov [gs:bx+si], al
000000000000000c c3 ret
現在のテキスト ビデオ モードで使用されているビデオ メモリ領域を指すように、bxとsiがいくつかの許容可能な値を持っていると想定しています。0xb800:bx+si可能ですが、お勧めしません。
いずれにせよ、レジスタ値の仮定がまだ許可されている場合は、少なくとも 4 バイト短くすることができます。それが有用な値 (上記を参照) を持っているbxと仮定できる場合は、おそらくそれも、現在のテキスト ビデオ モードで使用されているビデオ メモリ領域を指しています。sidi0xb800:di
00000000 B800B8 mov ax,0xb800
00000003 8EC0 mov es,ax
00000005 98 cbw
00000006 CD16 int 0x16
00000008 AA stosb
00000009 C3 ret
最初に設定axし0xb800て保存しesます (いくつかの BIOS テキスト ビデオ モードのセグメント アドレス)。
al次に、バイト(0) を wordに変換し、axの符号ビットを に拡張するalとax、ax= 0 になります。
次に、BIOS キーボード割り込みint 16h( ah= 0) を使用して、キーボードからの入力を読み取ります (必要に応じて入力を待ちます)。にASCIIコード、alにスキャンコードah。
最後に ASCII コードをビデオ メモリに保存し ( に[es:di]) stosb、文字を画面に出力し、 で DOS (または任意の OS) に戻りretます。
編集:実際には、サイズを 12 バイトに落としても、次のような安定した出力アドレスを保持することが可能です:
00000000 6800B8 push word 0xb800
00000003 1F pop ds
00000004 31C0 xor ax,ax
00000006 CD16 int 0x16
00000008 A20000 mov [0x0],al
0000000B C3 ret
お役に立てれば。