サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
1: 2010-02-09 (火) 13:58:58 lina ソース 2: 2010-02-09 (火) 15:12:34 lina ソース
Line 6: Line 6:
*実際の動作 [#cc330070] *実際の動作 [#cc330070]
 +**calc1.ask [#ka5f13d5]
 +原版ともいえる、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 */
 +
 +**calc1.3as [#j245353d]
 +これが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
 +**calc1.nas [#dd430c4e]
 +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
 +
 +
 +*考察・・・ [#u436cfc5]
 +**ヘッダ? [#e859e56f]
 + segment CODE(USE32, PARA);      →  CODE  segment  PARA USE32 ER →
 + default(code == CODE);                                                    [INSTRSET "i486p"]
 +                                                                           [OPTIMIZE 1]
 +                                                                           [OPTION 1]
 +                                                                           [BITS 32]
 +                                                                           [SECTION .text]
 +
 +こういう変換がされているってことで合ってるかな・・・~
 +COLOR(red){ちなみに[FORMAT "BIN"  ]はnaskcnv0による指定で変化する}
 +
 +**関数? [#f2ec9464]
 + void xxxx(){                    xxx:                    ← Void・引数なし。そのままラベル名に?
 +       ホゲホゲ;                  ホゲ    ホゲ  ホゲ
 +       フガフガ;    →            フガ    フガ  フガ
 +       ヌトヌト;                  ヌト    ヌト  ヌト
 + ]                              .local    equ      0    ←かならずこれが入る?
 +
 +
 +**構文? [#a0a87c9e]
 +
 +***DB [#v006d880]
 +これは簡単。ほぼ直接変換すればいいんだからwww。~
 +予測だけどたぶん、aska上では10進数・16進数・2進数が書けるはず。これを自動で変換し、並べてるだけっぽい。
 +
 +***asmout [#ee495c91]
 +ほぼ直接、左側に置かれているなぁ・・・
 +
 +**代入? [#t6372d2c]
 + EBX = EDX;          →    mov EBX,EDX
 + [EBX] = CL;              mov [EBX],CL
 +こう翻訳されてる。見たままってことでいいはず。~
 +COLOR(red){でもたぶん、やっちゃいけない代入とかを検知しているはず・・・}
 +
 +**インクリ・デクリ [#p21ccc94]
 +これも事実上、直訳でいいはず・・・
 +
 +
 +
 +*ニセ仕様書を捏造!(まるで某のようw) [#ge740871]
 +
 +**概要 [#j51b74f5]
 +-Asukaはi386系CPU専用のアセンブラフロントエンドです??
 +-あくまでアセンブラです。
 +-可読性を重視することが最大の目的。
 +-C言語の仕様に似せているが同じようには使えないこと ←これ重要
 +
 +-命令、条件文は原則ひとつだけ。複合的な条件判定は指定できない。
 +-セミコロンで一文が終わる
 +-スペース・タブ・改行等は基本無視される
 +-行頭が//の場合、その行はコメント扱いとなる
 +
 +
 +-レジスタを指定する場合は全て大文字で

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の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コミュニティによって管理・運営されています。