サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  

askaってあるでそ? Kタン作・今原さん実装・I.Tak.さんandRisapapaさんチューニングのアレ。

これってアセンブラになるのかな。

でね。これ、Kタンはよく使ってるんだけど、使い方とか仕様とかがイマイチビビっとまとまってないんだよね。(なんかもったいない)

そんなわけで。こういうものなのか、すこし研究してみようかなぁってなもんで。

Page Top

calc1.ask anchor.png

原版ともいえる、aska用のソース

segment CODE(USE32, PARA);                                           
default(code == CODE);

void header()
{
	DB(0x47, 0x01, 0x05);
}

void puteax();

void main()
{
	//	CALL([ESI]);
	DB(0x38, 0x65, 0x00, 0x21, 0x69, 0x6e, 0x74, 0x87);               
	asmout("DB 'formula'");
	DB(0x48, 0x60, 0x05, 0x13, 0x3d, 0x20, 0x00);
	PUSH(EAX);
	if (EAX < 0) {
		CALL([ESI]);
		DB(0x51, 0x2d, 0x00);
		NEG(EAX);
	}
	EBX = EDX;
	[EBX] = CL;
	CL = 10;
	puteax();
	CALL([ESI]);
	DB(0x51, 0x20, 0x3d, 0x20, 0x30, 0x78, 0x00);
	POP(EAX);
	CL = 16;
} 

void puteax()
{
	do {
		EBX++;
		EDX = 0;
		DIV(ECX);
		DL += 0x10;
		[EBX] = DL;
	} while (EAX != 0);
	do {
		EBX--;
		CALL([ESI]);
		DB(0x55, 0x16, 0xba);
		DL = [EBX];
	} while (DL != 0);
//	return;
}

/* naskcnv0.g01 -l -s */
Page Top

calc1.3as anchor.png

これがaska.exeでコンパイルされ、calc1.3asになる。(FM-Towns用に販売されてたアセンブラ、386|asm というものの形式)

CODE			segment	PARA USE32 ER 
header			proc	near
			DB	47H,01H,05H
#local			equ	0
header			endp	
				
main			proc	near
			DB	38H,65H,00H,21H,69H,6eH,74H,87H
DB 'formula'
			DB	48H,60H,05H,13H,3dH,20H,00H
			PUSH	EAX
			test	EAX,EAX
			jge	#LL0000
			CALL	[ESI]
			DB	51H,2dH,00H
			NEG	EAX
#LL0000:			
			mov	EBX,EDX
			mov	[EBX],CL
			mov	CL,10
			call	near ptr puteax
			CALL	[ESI]
			DB	51H,20H,3dH,20H,30H,78H,00H
			POP	EAX
			mov	CL,16
#local			equ	0
main			endp	
				
puteax			proc	near
#LL0000:			
			inc	EBX
			xor	EDX,EDX
			DIV	ECX
			add	DL,10H
			mov	[EBX],DL
			test	EAX,EAX
			jne	#LL0000
#LL0001:			
#LL0002:			
			dec	EBX
			CALL	[ESI]
			DB	55H,16H,0baH
			mov	DL,[EBX]
			test	DL,DL
			jne	#LL0002
#LL0003:			
#local			equ	0
puteax			endp	
CODE			ends	
			end	main
Page Top

calc1.nas anchor.png

naskcnv0によって、nask用のコードに変換される。

[FORMAT "BIN"  ]
[INSTRSET "i486p"]
[OPTIMIZE 1]
[OPTION 1]
[BITS 32]
[SECTION .text]
header:
			DB	47H,01H,05H
.local			equ	0
				
main:
			DB	38H,65H,00H,21H,69H,6eH,74H,87H
DB 'formula'
			DB	48H,60H,05H,13H,3dH,20H,00H
			PUSH	EAX
			test	EAX,EAX
			jge	.LL0000
			CALL	[ESI]
			DB	51H,2dH,00H
			NEG	EAX
.LL0000:			
			mov	EBX,EDX
			mov	[EBX],CL
			mov	CL,10
			call	near     puteax
			CALL	[ESI]
			DB	51H,20H,3dH,20H,30H,78H,00H
			POP	EAX
			mov	CL,16
.local			equ	0
				
puteax:
.LL0000:			
			inc	EBX
			xor	EDX,EDX
			DIV	ECX
			add	DL,10H
			mov	[EBX],DL
			test	EAX,EAX
			jne	.LL0000
.LL0001:			
.LL0002:			
			dec	EBX
			CALL	[ESI]
			DB	55H,16H,0baH
			mov	DL,[EBX]
			test	DL,DL
			jne	.LL0002
.LL0003:			
.local			equ	0
Page Top

考察・・・ anchor.png

Page Top

ヘッダ? anchor.png

segment CODE(USE32, PARA);      →   CODE  segment  PARA USE32 ER →     
default(code == CODE);                                                    [INSTRSET "i486p"]
                                                                          [OPTIMIZE 1]
                                                                          [OPTION 1]
                                                                          [BITS 32]
                                                                          [SECTION .text]

こういう変換がされているってことで合ってるかな・・・

ちなみに[FORMAT "BIN" ]はnaskcnv0による指定で変化する

Page Top

関数? anchor.png

void xxxx(){                    xxx:                     ← Void・引数なし。そのままラベル名に?
       ホゲホゲ;                   ホゲ    ホゲ   ホゲ
       フガフガ;     →            フガ    フガ   フガ
       ヌトヌト;                   ヌト    ヌト   ヌト
]                               .local     equ      0    ←かならずこれが入る?
Page Top

構文? anchor.png

Page Top

DB anchor.png

これは簡単。ほぼ直接変換すればいいんだからwww。

予測だけどたぶん、aska上では10進数・16進数・2進数が書けるはず。これを自動で変換し、並べてるだけっぽい。

Page Top

asmout anchor.png

ほぼ直接、左側に置かれているなぁ・・・

Page Top

代入? anchor.png

EBX = EDX;          →    mov	EBX,EDX        
[EBX] = CL;               mov	[EBX],CL

こう翻訳されてる。見たままってことでいいはず。

でもたぶん、やっちゃいけない代入とかを検知しているはず・・・

Page Top

インクリ・デクリ anchor.png

これも事実上、直訳でいいはず・・・

Page Top

ニセ仕様書を捏造!(まるで某のようw) anchor.png

Page Top

概要 anchor.png

  • Asukaはi386系CPU専用のアセンブラフロントエンドです??
  • あくまでアセンブラです。
  • 可読性を重視することが最大の目的。
  • C言語の仕様に似せているが同じようには使えないこと ←これ重要
  • 命令、条件文は原則ひとつだけ。複合的な条件判定は指定できない。
  • セミコロンで一文が終わる
  • スペース・タブ・改行等は基本無視される
  • 行頭が//の場合、その行はコメント扱いとなる
  • レジスタを指定する場合は全て大文字で
  • 即値(なんだっけ?数字を直接指定すること)の場合、10進数・16進数・2進数を書くことができる。また、文字を指定してコードとすることもできる
Page Top

代入 anchor.png

基本、イコールを使って右辺から左辺に指定する。(ほぼMOV命令に直訳されると考えればよい)

当然だが、CPUの仕様上代入が許されないものはエラーになる


一般用コメント一覧

一般用コメント欄は使用できません
トップ   凍結解除 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。