7shi / ikebin / wiki / 8086 / hello — Bitbucket
全然わからず自力ではできなかったのでコメントだけ書いてみる。
8086のアセンブリのソース
write.s
! write(1, hello, 6); mov ax, #1 int 7 .data1 4 .data2 hello, 6 ! exit(0); mov ax, #0 int 7 .data1 1 .sect .data hello: .ascii "hello\n"
$ 7run -d a.out 0000: b80100 mov ax, 0001 0003: cd07 int 7 0005: 04 ; sys write 0006: 1000 ; arg 0008: 0600 ; arg 000a: b80000 mov ax, 0000 000d: cd07 int 7 000f: 01 ; sys exit
$ hexdump -C a.out 00000000 eb 0e 10 00 06 00 00 00 00 00 00 00 00 00 01 00 |................| 00000010 b8 01 00 cd 07 04 10 00 06 00 b8 00 00 cd 07 01 |................| 00000020 68 65 6c 6c 6f 0a |hello.| 00000026
バイナリダンプするプログラム
let aout = System.IO.File.ReadAllBytes "a.out" // 0x10=16おきにループを始める。 // 16なのはhexdumpの仕様 for i in 0x10 .. 0x10 .. aout.Length - 1 do printf "%08x " i // 左側のダンプ部分 for j in 0 .. 0xf do if i + j < aout.Length then printf "%02x " aout.[i + j] else printf " " // 右側の文字出力部分 for j in 0 .. 0xf do if i + j < aout.Length then let ch = int aout.[i + j] // 32-63だったら文字 if 0x20 <= ch && ch <= 0x7e then printf "%c" (char ch) else printf "." printfn ""
$ fsharpi 1-1.fsx 00000000 eb 0e 10 00 06 00 00 00 00 00 00 00 00 00 01 00 ................ 00000010 b8 01 00 cd 07 04 10 00 06 00 b8 00 00 cd 07 01 ................ 00000020 68 65 6c 6c 6f 0a hello.