Open Design Computer Project

オリジナルCPUから作る本格的自作コンピューター

ユーザ用ツール

サイト用ツール


software:assembler

Assembler (binutils/gas)

GNU binutils (gas, ld) の mist32 向け実装の開発・移植を行いました。GNU のアセンブラやリンカなどが利用できます。

Code repository

GNU binutils の移植

新たなアーキテクチャ向けに GNU binutils を移植するための資料を書いています。

実装されている命令とか

CGEN が生成してくれるドキュメントに表示されている命令は実装されています。(しかし、HTML 生成がバグっている模様…)

binutils-mist32 の使い方

必要なもの

現状 –enable-maintainer-mode を使わないとなぜか動かないので以下のツール群 (README-maintainer-mode 参照)

  • autoconf 2.64
  • automake 1.11
  • libtool 2.2.6
  • gettext 0.14.5

その他に以下のツールが必要

    • cvs 版を使ってください。cgen-1.1 (tarで配布されている最新版) では古くて動きません。
  • guile (>= 1.8)
  • bison
  • flex

configure, make

$ ./configure --target=mist32-elf --program-prefix=mist32-elf- --disable-gdb --prefix=/usr/local
$ make
$ sudo make install

Assemble

コードにあまり意味はない

test.s
.globl  _start
 
.text
_start:
        clr     r1                      ;clear
 
loop:
        clr     r0
        wh16    r1, hi(testdata)        ;hi():  hi 16bit of 32bit
        wl16    r1, lo(testdata)        ;lo(): low 16bit of 32bit 
        lih     r2, hi(testdata2)
        wl16    r2, lo(testdata2)
        ld32    r3, r1                  ;load testadata
        ld32    r4, r2                  ;load testdata2
        add     r3, r4
 
        lil     r5, -86                 ;0xffaa => 0xffffffaa
        add     r5, 0x55
1:
        add     r0, 1                   ;increment
        cmp     r0, 10                  ;10 times?
        br      1b, #ge                 ;jump backward 1, if signed equal or above
 
        b       loop, #al
 
.data
testdata:
        .long   0xaaffffaa
testdata2:
        .long   0x55000055
$ mist32-elf-as test.s
 
$ mist32-elf-objdump -D a.out
 
a.out:     file format elf32-mist32
 
 
Disassembly of section .text:
 
00000000 <_start>:
   0:   0d c0 00 20     clr r1
 
00000004 <loop>:
   4:   0d c0 00 00     clr r0
   8:   0d 60 00 20     wh16 r1,0x0
   c:   0d 40 00 20     wl16 r1,0x0
  10:   0e e0 00 40     lih r2,0x0
  14:   0d 40 00 44     wl16 r2,0x4
  18:   10 40 00 61     ld32 r3,r1
  1c:   10 40 00 82     ld32 r4,r2
  20:   00 00 00 64     add r3,r4
  24:   0e df f4 aa     lil r5,-86
  28:   00 10 08 b5     add r5,85
  2c:   00 10 00 01     add r0,1
  30:   00 d0 00 0a     cmp r0,10
  34:   14 3c ff fe     br 2c <loop+0x28>,#seo
  38:   14 50 00 00     b 0 <_start>,#al
 
Disassembly of section .data:
 
00000000 <testdata>:
   0:   aa ff ff aa     *unknown*
 
00000004 <testdata2>:
   4:   55 00 00 55     *unknown*
 
 
$ mist32-elf-readelf -h a.out 
ELF Header:
  Magic:   7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, big endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Open Architecture mist32
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          172 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           40 (bytes)
  Number of section headers:         8
  Section header string table index: 5
$ mist32-elf-ld -Tdata=0x00010000 -o test.o a.out
 
$ mist32-elf-objdump -D test.o
 
test.o:     file format elf32-mist32
 
 
Disassembly of section .data:
 
00010000 <testdata>:
   10000:       aa ff ff aa     *unknown*
 
00010004 <testdata2>:
   10004:       55 00 00 55     *unknown*
 
Disassembly of section .text:
 
00004000 <_start>:
    4000:       0d c0 00 20     clr r1
 
00004004 <loop>:
    4004:       0d c0 00 00     clr r0
    4008:       0d 60 00 21     wh16 r1,0x1
    400c:       0d 40 00 20     wl16 r1,0x0
    4010:       0e e0 00 41     lih r2,0x1
    4014:       0d 40 00 44     wl16 r2,0x4
    4018:       10 40 00 61     ld32 r3,r1
    401c:       10 40 00 82     ld32 r4,r2
    4020:       00 00 00 64     add r3,r4
    4024:       0e df f4 aa     lil r5,-86
    4028:       00 10 08 b5     add r5,85
    402c:       00 10 00 01     add r0,1
    4030:       00 d0 00 0a     cmp r0,10
    4034:       14 3c ff fe     br 402c <loop+0x28>,#seo
    4038:       14 50 10 01     b 4004 <loop>,#al

実機デバッグ用

DE2-115 ボードの Flash に書き込むためのバイナリの吐き方

$ mist32-elf-objcopy -O binary a.out a.bin
software/assembler.txt · 最終更新: 2015/07/28 23:51 by hktechno