8086アセンブラで ライフゲーム -...
TRANSCRIPT
![Page 1: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/1.jpg)
8086アセンブラで ライフゲーム usk B3 Arch 親 macchanさん
https://gist.github.com/usk83/960eae9113a533019ec6�
![Page 2: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/2.jpg)
モチベーション
ブラックボックスは好きじゃない より基盤技術から理解、修得したい
コンピュータアーキテクチャを一から 学びたい
アセンブラを書きながら、コンピュータアーキテクチャの理解を深めるとともに、今後の基盤とする
0�
![Page 3: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/3.jpg)
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モチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/4.jpg)
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モチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/5.jpg)
2�
![Page 6: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/6.jpg)
実装環境
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モチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/7.jpg)
FreeDOS とは
MS-DOSの代替を目指して開発されたOS オープンソース ほぼ100%の互換性
4�
![Page 8: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/8.jpg)
なぜ FreeDOS
メモリ保護機能がない よりアーキテクチャの理解に繋がる
x86アーキテクチャ フリー
5�
![Page 9: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/9.jpg)
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モチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/10.jpg)
文字コード・属性 (IBM PC)
7�OADG テクニカル・リファレンス ハードウェア編より
生 ( f002 )
死 ( f000 )
![Page 11: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/11.jpg)
開発手順
EDIT(標準搭載のエディタ) どぎつい背景色、1画面に20×76文字 ハイライト、補完、他便利機能なし
fdosとHostの両方にFloppyをマウント Host側でプログラムの作成 fdos側でコピー、アセンブル、リンク、実行(batファイル化)
8�
![Page 12: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/12.jpg)
実装概要
全命令数 170命令
純粋なプログラムサイズ 418byte
画面端の処理 上下左右反対側に接続
0/�
![Page 13: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/13.jpg)
近傍の状態確認の実装 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モチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/14.jpg)
近傍の状態確認の実装 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モチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/15.jpg)
近傍の状態確認の実装 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モチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/16.jpg)
近傍の状態確認の実装 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モチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/17.jpg)
苦労した点
VRAMを参照して処理する部分 DEBUGコマンドが使えない
画面端の処理 Webページのリンク切れが多い 自分で書いたコードも後で読むと何をしているのか分かりにくい
04�
![Page 18: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/18.jpg)
工夫した点
文字コードのみの2000byteを操作した 死の状態のセルをNULLにした 計算しやすい
fdosとHostの両方にfloppyをマウントして開発 画面端の処理
05�
![Page 19: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/19.jpg)
06�
DEMO
![Page 20: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/20.jpg)
今後の展望 より深くコンピュータアーキテクチャの理解を深めていきたい – CPU周りの構造理解 – OS作る
来期TERMなので、研究らしいことを考える
07�
![Page 21: 8086アセンブラで ライフゲーム - Labweb.sfc.wide.ad.jp/~usk/b3s/slide.pdfモチベーション ブラックボックスは好きじゃない より基盤技術から理解、修得したい](https://reader034.vdocuments.site/reader034/viewer/2022042207/5ea98bd9315256764e6ed244/html5/thumbnails/21.jpg)
参考・引用元 OADGテクニカル・リファレンス ‒ ベクターPCショップ :モバイル・その他のO
S : 商品詳細 : OADGテクニカル・リファレンス http://n.shop.vector.co.jp/service/servlet/Catalogue.Detail.Top?ITEM_NO=SR236180
08�