サイトトップへ
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の仕様上代入が許されないものはエラーになる


一般用コメント一覧

一般用コメント欄は使用できません
Front page   Unfreeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help
新着

目次
メンバー一覧


recent(20)
2025-11-26 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コミュニティによって管理・運営されています。