LoginSignup
0
1

More than 3 years have passed since last update.

ia16-elf-asを使ってみた

Last updated at Posted at 2021-04-29

8086のMachine codeを参照したかったので、IA16用binutilsに含まれるia16-elf-asを使ってみました。

インストール

ubuntuを使っているならパッケージがありましたので、これを使いました。

$ sudo add-apt-repository ppa:tkchia/build-ia16
$ sudo apt-get update
$ sudo apt-get install binutils-ia16-elf

詳しい手順はオフィシャルのドキュメントを見てください。

インストール先は/usr/binです。

$ dpkg -L binutils-ia16-elf
/.
/usr
/usr/bin
/usr/bin/ia16-elf-addr2line
/usr/bin/ia16-elf-ar
/usr/bin/ia16-elf-as
...

使い方

ソースコード例
IA16用のコードを生成するためには.code16という記述が必要みたいです。

        .code16
        mov    %ax,    %bx

gccの出力をみるともうちょっと記述がありました。

         .arch i8086,jumps
         .code16
         .att_syntax prefix
         .text
          mov    %ax,    %bx

これをasでアセンブルします。

$ ia16-elf-as -o hoge.o hoge.s

hoge.oはELF形式です。これをobjdumpで逆アセンブルしてみます。

 $ ia16-elf-objdump -d hoge.o
 hoge.o:     file format elf32-i386
 Disassembly of section .text:
 00000000 <.text>:
    0:   89 c3                   mov    %eax,%ebx

objcopyでelfをバイナリに変換します。hexdumpで見るとアセンブル結果のみのバイナリになっています。

 $ ia16-elf-objcopy -O binary hoge.o hoge.bin
 $ hexdump -C  hoge.bin
 00000000  89 c3                                             |..|
 00000002

objdumpでバイナリを逆アセンブルする場合はオプション指定が必要です。

$ ia16-elf-objdump -D -b binary -m i8086 hoge.bin
hoge.bin:     file format binary
Disassembly of section .data:
00000000 <.data>:
   0:   89 c3                   mov    %ax,%bx

参考

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1