86系クロスコンパイラ
86系クロスコンパイラ
LSIC-86 ver.3.5
LSIC-86はWindowsまたはUNIX上で動作するi8086のソフトウェア開発をサポートする16ビットCクロスコンパイラです。
特長
- ANSI標準規格に準拠したコンパイラ
- コンパイラが最適なレジスタ割り付けを実行
- i8086の4つのメモリモデルをサポート
- リンカはMS-DOSで実行可能なEXEファイル、またはROM化可能なバイナリ、あるいは拡張インテルHEXファイルを生成
- ターゲットシステムのメモリマップにあわせてオブジェクトを配置可能
- ROM化のための初期設定モジュールおよび全ライブラリ関数のソース付き
言語仕様
- ANSI標準規格に準拠したコンパイラ(多バイト文字 、<local.h>を除く)
- サポートするデータ型
void char signed char int unsigned
int
short unsigned short long unsigned
long float
double long double struct union enum - プリプロセッサ文
#include #if #ifdef #elif
#define
#undef #line #pragma # ## - プロトタイプ宣言
パラメタの間違いを防ぐプロトタイプ宣言が可能です。
コンパイラ
- 高速かつコンパクト
コンパイラがレジスタの最適な自動割り付けを行います。作成したプログラムの実行は高速、オブジェクトコードはコンパクトです。プログラマがregister宣言をあたえなくても、どの変数をレジスタに割り当てるべきかをコンパイラが自動的に判断します。従来のi8086用Cコンパイラはせいぜい2つか3つのレジスタしか割り当てられなかったのに対し、LSI C-86は使用されている変数をax,bx,cx,dx,si,diの6つのレジスタに可能なかぎり割り当てます。さらにLSI C-86は変数の生存期間を調べ、異なる変数に同じレジスタを割り当てることもやってのけます。したがって7つ以上の変数が使われている場合でも、全部レジスタで済ませてしまうこともあります。 - パラメタの受け渡し
関数パラメタは可能なかぎり(最大4個)レジスタを使って渡します。そのため関数呼び出しのオーバーヘッドは非常に軽く、アセンブリ言語サブルーチンとのリンクも簡単に行えます。 - 各種メモリモデルをサポート
スモール(S)、プログラム(P)、データ(D)、ラージ(L)の4つのメモリモデルをサポートしています。さらにfar,nearキーワードをサポートしていますので、効率の悪いラージモデルを使わずに、スモールモデルのプログラムの中で大量のデータを使用することができます。 - コンパイラドライバ
使いやすいコンパイラドライバを用意しています。ソースも含まれていますので、自由にカスタマイズすることができます。 - アセンブリ・インライン関数
アセンブリ言語をCのソースプログラム中に記述することができます。inp(ポート入力)のような関数は、Cプログラムの中にインライン展開することができ、効率が非常に良くなります。
図1. ソースプログラム
char _asm_c();
#define _qq_(s) #s
#define _q_(s) _qq_(s)
#define inp8(p) _asm_c(“\n\tIN\tAL,” _q_(__eval__(p)))
#define outp8(p, c) _asm_c(“\n\tOUT\t” _q_(__eval__(p)) “,AL”, (char)(c))
#define di() _asm_c(“\n\tCLI”)
#define ei() _asm_c(“\n\tSTI”)
void putch(char c)
{
di();
while ((inp8(0x00) & 0x01) == 0)
;
ei();
outp8(0x01, c);
}
生成されたコー
putch_::
PUSH CX
MOV CL,AL
CLI
_2:
IN AL,0
TEST AL,1
JE _2
STI
MOV AL,CL
OUT 1,AL
POP CX
RET
アセンブラ
アセンブラはi8086/i80186/i80286およびi8087/i80287の命令をサポートしています。また、ジャンプ命令を最適化する機能があります。通常の条件ジャンプ命令で分岐できるのは-128~+127バイトの範囲ですが、この範囲外への条件ジャンプ命令は逆の条件のジャンプ+無条件ジャンプの2命令に自動的に変換します。同様に、無条件ジャンプ命令もできるだけ短い命令を生成します。
リンカ
EXEファイルはもちろん、バイナリファイルあるいは拡張インテルHEXファイルを生成します。セグメントがロードされるべきアドレスを指定することによって、ターゲットシステムのメモリマップに柔軟に対応することができます。また、MS-LINKと同等のマップファイルを生成しますので、このファイルをICEなどで利用すればシンボリックデバッグが可能です。
プロファイラ
プロファイラはプログラムの実行をモニタするためのツールです。これは計数型プロファイラで、プログラムのどの文を何回実行したかをカウントします。その結果、プログラムのどの部分が実行されたのかが一目瞭然となりますので、条件判定の論理のミスなどを容易に発見することができます。また、実行回数の多い関数を最適化すればプログラム全体の効率を上げることができますが、プロファイラはその指標をあたえてくれます。
ライブラリ
ANSI標準規格で定義された関数のうち、多バイト文字関数とを除く、すべての関数を用意しています。 さらにUNIXで用意されている関数や、MS-DOSとのインタフェース関数など、数多くの関数を用意しています。ライブラリ関数すべてのソースを公開しています。
関数一覧表
FP_OFF FP_SEG MK_FP
_clear87 _control87 _dos_allocmem _dos_close _dos_creat
_dos_creatnew _dos_findfirst _dos_findnext _dos_freemem _dos_getdate
_dos_getdiskfree _dos_getdrive _dos_getfileattr _dos_getftime _dos_gettime
_dos_getvect _dos_keep _dos_open _dos_read _dos_setblock
_dos_setdate _dos_setdrive _dos_setfileattr _dos_setftime _dos_settime
_dos_setvect _dos_write _fpreset _harderr _hardresume
_hardretn _lrotl _lrotr _matherr _nullcheck
_rotl _rotr _status87 _tolower _toupper
abort abs access acos asctime
asin assert atan atan2 atexit
atof atoi atol bdos bsearch
btom calloc ceil cgets chdir
chkctype chmod chsize clearerr clock
close cos cosh cprintf cputs
creat cscanf ctime ctype daylight
di difftime div dosexterr dup
dup2 ecvt ei eof exec
execl execle execlp execlpe execv
execve execvp execvpe exit exp
fabs far_memccpy far_memchr far_memcmp far_memcpy
far_memicmp far_memmove far_memset far_movmem far_setmem
far_stpcpy far_strcat far_strchr far_strcmp far_strcmpi
far_strcpy far_strcspn far_strdup far_stricmp far_strlen
far_strlwr far_strncat far_strncmp far_strncmpi far_strncpy
far_strnicmp far_strnset far_strpbrk far_strrchr far_strrev
far_strset far_strspn far_strstr far_strtok far_strupr
farcalloc farcoreleft farfree farmallo farrealloc
farstr fclose fcloseall fcvt fdopen
fdreopen feof ferror fflush fgetc
fgetchar fgetpos fgets filelength fileno
floor flushall fmod fopen fprintf
fputc fputchar fputs fread free
freopen frexp fscanf fseek fsetbin
fsetpos fsettext fstat ftell ftime
ftruncate fwrite gcvt getc getch
getchar getche getcwd getenv getpid
gets getw gftime gmtime hantozen
inp inp8 inp8w inpw int86
int86x int86y intdos intdosx intdosy
isalkana isalnmkana isalnum isalpha isascii
isatty iscntrl iscsym iscsymf isdigit
isgraph isgrkana iskana iskanji iskanji2
iskmoji iskpun islower ispnkana isprint
isprkana ispunct isspace isupper isxdigit
itoa jisalpha jisdigit jishira jiskata
jiskigou jisl0 jisl1 jisl2 jislower
jisspace jistojms jistoms jisupper jiszen
jmstojis jstradv jstrchr jstrcmp jstrlen
jstrmatch jstrncat jstrncmp jstrncpy jstrrchr
jstrrev jstrskip jstrstr jstrtok jtohira
jtokata jtolower jtoupper kbhit labs
ldexp ldiv localtime log log10
longjmp lseek ltoa malloc matherr
max memccpy memchr memcmp memcpy
memicmp memmove memset min mkdir
mktemp mktime modf movedata movemem
mstojis mtob nthctype onexit open
outp outp8 outp8w outpw perror
pow printf putc putch putchar
putenv puts putw qsort raise
rand read realloc remove rename
rewind rmdir rmtmp sbrk scanf
segread setbuf setjmp setmem setvbuf
signal sin sinh spawn spawnl
spawnle spawnlp spawnlpe spawnv spawnve
spawnvp spawnvpe sprintf sqrt srand
sscanf stackavail stat stime stpcpy
strcat strchr strcmp strcmpi strcpy
strcspn strdup strerror strftime stricmp
strlen strlwr strncat strncmp strncmpi
strncpy strnicmp strnset strpbrk strrchr
strrev strset strspn strstr strtod
strtok strtol strtoul strupr swab
system tan tanh tell tempnam
time timezone tmpfile tmpnam toascii
tolower toupper truncate tzname tzset
ultoa umask ungetc ungetch unlink
utime va_arg va_end va_list va_start
vfprintf vprintf vsprintf write xprintf
xscanf
ROM化
ROM化のための初期設定モジュールのソースが含まれています。これをターゲットシステム用に修正することによって、どのようなシステムにも対応することができます。また、アセンブラとのリンクが簡単に行え、割り込み処理もCで記述できます。さらに、オブジェクト効率がよく、ROMプログラムもほとんどCで記述できます。
性能
図1-a,bは、ベンチマークプログラムのソースとオブジェクトです。すべての変数がレジスタに割り当てられ、まだdiレジスタが余っていることにご注目ください。ソースの左端の数字はプロファイラによる実行回数です。
図1-a ベンチマークプログラムのソースリスト
#include <stdio.h>
#define SIZE 8190
#define TRUE 1
#define FALSE 0
char flags[SIZE + 1];
1 void main()
1 {
1 int k, i, prime, count, iter;
1
1 printf("100 iterations\n");
1 for (iter = 1; iter <= 100; iter++) {
100 count = 0;
100 for (i = 0; i <= SIZE; i++)
819100 flags[i] = TRUE;
100 for (i = 0; i <= SIZE; i++)
819100 if (flags[i]) {
189900 prime = i + i + 3;
189900 for (k = i + prime; k <= SIZE; k += prime)
1499900 flags[k] = FALSE;
189900 count++;
819100 }
100 }
1 printf("%d primes\n", count);
1 } zentohan
図1-b ベンチマークプログラムのオブジェクトコード
CGROUP GROUP TEXT
DGROUP GROUP DATA,BSS
TEXT CSEG
DATA DSEG
BSS DSEG
flags_: RS 8191
DATA DSEG
Z6 DB ‘100 iterarions’, 10,0
Z25: DB ‘%d primes’,10,0
TEXT CSEG
main_::
PUSH CX
PUSH DX
PUSH SI
MOV AX,Z6
PUSH AX
CALL printf_
ADD SP,2
MOV DX,1
JMP _1
_2:
XOR CX,CX
XOR BX,BX
JMP _6
_7:
MOV [flags_+BX].B,1
INC BX
_6:
CMP BX,8190
JNG _7
XOR SI,SI
JMP _11
_12:
CMP [flags_+SI].B,0 JE _17
MOV AX,SI
ADD AX,SI
ADD AX,3
MOV BX,SI
ADD BX,AX
JMP _18
_19:
MOV [flags_+BX].B,0
ADD BX,AX
_18:
CMP BX,8190
JNG _19
INC CX
_17:
INC SI
_11:
CMP SI,8190
JNG _12
INC DX
_1:
CMP DX,100
JNG _2
PUSH CX
MOV AX,Z25
PUSH AX
CALL printf_
ADD SP,4
POP SI
POP DX
POP CX
RET
EXTRN printf_
END
コンパイル処理の流れ
※Windows Vista以降では日本語表示および日本語入力はできません。
動作環境
ソフトウェア名 | 対応OS |
---|---|
LSI C-86 Ver3.5 (Windowsパック) | Windows XP Professional, Windows Vista※1 Business (32ビット) / Ultimate (32ビット) |
LSI C-86 Ver3.5 (Solarisパック) | Solaris 2.x for SPARC (SunOS 5.4, SunOS 5.5.1, SunOS 5.6, libc 1以上) |
LSI C-86 Ver3.5 (FreeBSD/Linuxパック) | FreeBSD/i386 (2.2.6-RELEASE, libc3), Linux (x86版, libc5.2.18) |
※1.Windows Vistaでは日本語表示および日本語入力はできません。
●CD-ROMドライブ必須 ●libcバージョンは弊社で確認したものです。
商品一覧
商品名 | 型名 | 商品コード | 価格 |
---|---|---|---|
LSI C-86 Ver.3.5(Windowsパック)基本パッケージ 【供給メディア:CD-R】 | LSIC86-10-ST | 4940183061817 | 48,000円(税別) |
LSI C-86 Ver.3.5(Windowsパック) 追加1ライセンス*2 | LSIC86-10-1L | 4940183022009 | 19,000円(税別) |
LSI C-86 Ver.3.5(Solarisパック)基本パッケージ 【供給メディア:CD-R】 | LSIC86-20-ST | 4940183082812 | 48,000円(税別) |
LSI C-86 Ver.3.5(Solarisパック)追加1ライセンス*2 | LSIC86-20-1L | 4940183083000 | 19,000円(税別) |
LSI C-86 Ver.3.5(FreeBSD/Linuxパック)基本パッケージ 【供給メディア:CD-R】 | LSIC86-30-ST | 4940183084816 | 48,000円(税別) |
LSI C-86 Ver.3.5(FreeBSD/Linuxパック) 追加1ライセンス*2 | LSIC86-30-1L | 4940183085004 | 19,000円(税別) |
LSI C-86 Ver.3.5追加ユーザーズマニュアル | LSIC86-10-UM | 4940183023006 | 9,800円(税別) |
※2.基本パッケージ1本をご購入いただくと、商品別に追加ライセンスの購入ができます。追加ライセンスは追加1ライセンスをご用意しておりますので、ご使用になるコンピュータの台数に合わせて必要なライセンス数をご購入いただけます。
スクールパック
商品名 | 型名 | 商品構成 | 価格 |
---|---|---|---|
(Windows)スクールパック 基本10ライセンス | LSIC86SP-10-ST | マスターディスク(1枚) 供給メディア:CD-R、 ライセンスキー(10ユーザー分)、 ユーザーズマニュアル(1冊) | 各150,000円(税別) |
(Solaris)スクールパック 基本10ライセンス | LSIC86SP-20-1L | ||
(FreeBSD/Linux)スクールパック 基本10ライセンス | LSIC86SP-30-ST | ||
(Windows)スクールパック 追加1ライセンス*3 | LSIC86SP-10-1L | ライセンスキー(1ユーザー分) | 各15,000円(税別) |
(Solaris)スクールパック 追加1ライセンス*3 | LSIC86SP-20-1L | ||
(FreeBSD/Linux)スクールパック 追加1ライセンス*3 | LSIC86SP-30-1L | ||
スクールパック 追加ユーザーズマニュアル | LSIC86SP-10-UM | ユーザーズマニュアル(1冊) | 5,000円 |
- Windowsスクールパックの基本10ライセンス、Solarisスクールパックの基本10ライセンス、FreeBSD/Linuxパックの基本10ライセンスは、それぞれ別商品になりますので、予めご了承ください。
- ご注文頂く基本10ライセンス、追加1ライセンスおよび追加ユーザーズマニュアルは、ひとつのパッケージに同朋されます。
- 基本10ライセンスをご購入いただくと、商品別に追加ライセンスの購入ができます。追加ライセンスは追加1ライセンスをご用意しておりますのでご使用になるコンピュータの台数に合わせて、必要なライセンス数をご購入いただけます。
商品構成
- コンパイラドライバ(lcc86)
- プリプロセッサ(cpp)
- コンパイラ(cf/cg86)
- アセンブラ(r86)
- リンカ(lld)
- ライブラリ
- ライブラリのソースコード(Cおよびアセンブリ言語)
- ROM化トレーニングプログラム
- UNIXライクなプログラム保守ツール(kmmake)
- lcc86,cpp,kmmakeなどツールのソースコード
- 日本語マニュアル
- 登録カード
LSI C-86 Ver.3.5の(Windowsパック)基本パッケージ、(Solarisパック)基本パッケージ、(FreeBSD/Linuxパック)基本パッケージは 、それぞれ別商品になりますので予めご了承ください。
本コンパイラを使用して作成されたプログラムの販売については、コンパイラ自身をその中に含んでいない限りロイヤリティ(使用料)は一切不要です。
ご質問はお問い合わせフォームよりお問合せください。
販売代理店
株式会社キョードー | 〒101-0021 東京都千代田区外神田1-10-11 東京ラジオデパート2F TEL.(03)3257-0202(代) FAX.(03)3257-0250 http://www.kydsem.co.jp/ |
---|---|
東栄電気株式会社 | 〒101-0041 東京都千代田区神田須田町2-2 須田町藤和ビル TEL.(03)3252-4291(代) FAX.(03)3254-1006 http://www.toei-dk.co.jp/ |
ソフトバンク株式会社 | 各支店までお問い合せください。 https://www.softbank.jp/ |
ダイワボウ情報システム株式会社 | 各支店までお問い合せください。 http://www.pc-daiwabo.co.jp/ |
TD SYNNEX株式会社 | 各支店までお問い合せください。 https://jp.tdsynnex.com/ |
日本電計株式会社 | 各支店までお問い合せください。 http://www.n-denkei.co.jp/ |
株式会社システナ | 各支店までお問い合せください。 http://www.systena.co.jp/ |
諸注意
- ご使用の際は商品添付の説明書をよくお読みのうえ、正しくお使いください。
- 仕様および外観などは性能向上のため予告なしに変更することがあります。
- 本製品(ソフトウェアを含む)は日本仕様であり、弊社では海外でのサービスおよび技術サポートなどは行っておりません。
- LSI Cはエル・エス・アイ ジャパン株式会社の登録商標です。そのほか、商品名は一般に各開発メーカーの登録商標または商標です。