8086アセンブラで ライフゲーム -...

21
8086アセンブラで ライフゲーム usk B3 Arch 親 macchanさん https://gist.github.com/usk83/960eae9113a533019ec6

Upload: others

Post on 27-Apr-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

8086アセンブラで ライフゲーム usk B3 Arch 親 macchanさん

https://gist.github.com/usk83/960eae9113a533019ec6�

Page 2: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

モチベーション

ブラックボックスは好きじゃない より基盤技術から理解、修得したい

コンピュータアーキテクチャを一から 学びたい

アセンブラを書きながら、コンピュータアーキテクチャの理解を深めるとともに、今後の基盤とする

0�

Page 3: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

1970年にイギリスの数学者ジョン・コンウェイが考案した生命シミュレーションゲーム

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

過 密 過 疎 維 持 誕 生

ライフゲーム とは

1�

https://ja.wikipedia.org/wiki/ライフゲーム

Page 4: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

1970年にイギリスの数学者ジョン・コンウェイが考案した生命シミュレーションゲーム

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9� 9�

過 密 過 疎 維 持 誕 生

ライフゲーム とは

1�

https://ja.wikipedia.org/wiki/ライフゲーム

Page 5: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

2�

Page 6: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

実装環境

OS ‒  FreeDOS 1.1 (VirtualBox on OS X) アセンブラ&リンカ ‒  Arrowsoft Assembler ‒  VAL 8086 linker

3�

Page 7: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

FreeDOS とは

MS-DOSの代替を目指して開発されたOS オープンソース ほぼ100%の互換性

4�

Page 8: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

なぜ FreeDOS

メモリ保護機能がない よりアーキテクチャの理解に繋がる

x86アーキテクチャ フリー

5�

Page 9: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

VRAMの構成 (IBM PC)

6�

12345・・・ ・・・8012345・・・

・・・25

B800:0� B800:9E�

B800:f00�

Page 10: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

文字コード・属性 (IBM PC)

7�OADG テクニカル・リファレンス ハードウェア編より

生 ( f002 )

死 ( f000 )

Page 11: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

開発手順

EDIT(標準搭載のエディタ) どぎつい背景色、1画面に20×76文字 ハイライト、補完、他便利機能なし

fdosとHostの両方にFloppyをマウント Host側でプログラムの作成 fdos側でコピー、アセンブル、リンク、実行(batファイル化)

8�

Page 12: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

実装概要

全命令数 170命令

純粋なプログラムサイズ 418byte

画面端の処理 上下左右反対側に接続

0/�

Page 13: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

近傍の状態確認の実装 CHECK: mov bx, 7e0h ;U]XZ[K-�K�.� mov WORD PTR es:[bx], -162 mov WORD PTR es:[bx+2], -160 mov WORD PTR es:[bx+4], -158 mov WORD PTR es:[bx+6], -2 mov WORD PTR es:[bx+8], 2 mov WORD PTR es:[bx+10], 158 mov WORD PTR es:[bx+12], 160 mov WORD PTR es:[bx+14], 162 mov cx, 0 ;)�K�%VT_YK���

00�

Page 14: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

近傍の状態確認の実装 CKTOP: cmp di, 79 ;diJL�(K���

ja CKBTM mov WORD PTR es:[bx], 3838 mov WORD PTR es:[bx+2], 3840 mov WORD PTR es:[bx+4], 3842 jmp CKLFT

CKBTM: cmp di, 1920 ;�"K!& jb CKLFT sub WORD PTR es:[bx+10], 4000 sub WORD PTR es:[bx+12], 4000 sub WORD PTR es:[bx+14], 4000

CKLFT: push bx mov ax, di mov dx, 0 mov bx, 80 ;�"G=P@K!& div bx pop bx

01�

cmp dx, 0 ; OQF>QM�" jnz CKRGT add WORD PTR es:[bx], 160 add WORD PTR es:[bx+6], 160 add WORD PTR es:[bx+10], 160 jmp COUNT

CKRGT: push bx mov ax, di mov dx, 0 mov bx, 80 ;�"G=P@!& div bx pop bx cmp dx, 79 ;�O79G�" jne COUNT sub WORD PTR es:[bx+4], 160 sub WORD PTR es:[bx+8], 160 sub WORD PTR es:[bx+14], 160

Page 15: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

近傍の状態確認の実装 COUNT: push si ;�(KU]XZ[S\^WR*, add si, es:[bx] ;)�KU]XZ[S\^WR�# add cl, [si] ;VRAMR��CF��R�# inc bx ;U]XZ[S\^WK-�L inc bx ;16bitBH pop si ;�(KU]XZ[S\^WR�OD cmp bx, 7efh jb COUNT jmp CALC

02�

Page 16: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

近傍の状態確認の実装 CALC: cmp cl, 4 ;)�A2�;�<K�� jb DEAD ;2���L+ jz CALCEND ;2�L$� cmp cl, 6 ;)�A3�;�<K�� jz ALIVE ;3�EN?IL'�:;�<$� jmp DEAD ;3���L+�ALIVE: mov BYTE PTR es:[di], 2 jmp CALCENDDEAD: mov BYTE PTR es:[di], 0 jmp CALCEND

03�

Page 17: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

苦労した点

VRAMを参照して処理する部分 DEBUGコマンドが使えない

画面端の処理 Webページのリンク切れが多い 自分で書いたコードも後で読むと何をしているのか分かりにくい

04�

Page 18: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

工夫した点

文字コードのみの2000byteを操作した 死の状態のセルをNULLにした 計算しやすい

fdosとHostの両方にfloppyをマウントして開発 画面端の処理

05�

Page 19: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

06�

DEMO

Page 20: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

今後の展望 より深くコンピュータアーキテクチャの理解を深めていきたい –  CPU周りの構造理解 –  OS作る

来期TERMなので、研究らしいことを考える

07�

Page 21: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい

参考・引用元 OADGテクニカル・リファレンス ‒  ベクターPCショップ :モバイル・その他のO

S : 商品詳細 : OADGテクニカル・リファレンス http://n.shop.vector.co.jp/service/servlet/Catalogue.Detail.Top?ITEM_NO=SR236180

08�