創作內容

15 GP

【專案】ByteWorld 流程控制和狀態機 5/20

作者:樂小呈│2021-05-20 17:22:54│巴幣:30│人氣:214
今天
研究bytecode 的流程控制
然後讀 Formal Language 和數學的 finite state machine

流程控制
控制 bytecode 的運作流程,用來達到判斷式和迴圈的效果
簡單來說就是當條件符合時跳到第 5 行執行,不符合即跳到第 10 行這樣...我的筆記上是這樣寫的,但為了搞懂這簡單來說也花了不少時間

去翻了下 java bytecode 的資料,想不到第一次找java的資料竟然是為了裡面的bytecode
C# 好像也有 bytecode,但叫做  Intermediate Language,之後也可以去研究下C#怎麼搞編譯的,感謝教授加博士先生提供

消化一下第二張圖的資訊後才發現是我想得太複雜了,其實流程控制只需要跳躍和條件跳躍而已,原本以為 if else switch for while 各自都算一種流程控制

主要是要把流程分成不同"區塊",根據運行狀態在不同區塊間跳躍,也就是所謂的狀態機,至於怎麼區分區塊和跳到哪裡就是編譯的工作,這裡先不用管

幫命令裡加了兩項流程控制



總之是成功了,打了簡單的判斷式來測試
if(0) Print(100);
else Print(500);
⇒ 0 0 0 14 0 1 4 0 500 1 0 19 0 0 4 0 100 1
我得搞個能 print 更詳細資料的東東才行

迴圈就先跳過,概念都一樣再多手打一次會累死自己


狀態機
但不是設計模式而是數學上更底層的狀態機觀念
參考資料,接續昨天的 Formal Language


讀到這個之後就更能理解流程控制的概念ㄌ,稍微畫了不怎麼正確的流程圖


接下來 hmm
應該需要變數相關的命令,取得和保存 ? Stack 只是將數值暫存而已,一串 bytecode 跑完之後就要清除的
然後是強制中斷的命令 "return",應該也算在流程控制裡吧,上面 V0 因為沒有中斷所以後面才要多一串跳轉到流程終點

這兩個完成就可以先研究編譯了...? 應該吧,變數那裏我不太確定诶

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=5153830
All rights reserved. 版權所有,保留一切權利

相關創作

同標籤作品搜尋:ByteWorld|遊戲開發|程式

留言共 5 篇留言

派大星教授死掉了咩噗
(I) Programming Language (C++, C#, Java)
(II) Assembly (IL, Java bytecode, etc) jump, load/store, add,...
(III) 101010100 (如何編碼對應,如何用最少的資訊表達各種意義?)

Q:應該需要變數相關的命令,取得和保存 ?
要多複雜就看你ㄉVM要支援到怎樣,變數可以放FSM的stack,
但若要可以在function之間傳遞考慮就要用heap(動態分配記憶體),
甚至考慮你說的return?那就是function call了
考慮function call的扔進去的參數(argument)保存哪? FSM的stack上?

這整個坑是在一般大二的計算機結構ㄅ
有興趣ㄉ話個人是推薦這ㄍ
University of Washington: Hardware/Software Interface class
https://youtu.be/DpIJ3M0Gr3Y?start=0320
但他是完全以C => X86/64 assembly的角度在教
蠻詳細ㄉ for/if/function call等都有

至於如何做compiler讓(I)=>(II)=>(III)自動化產生, 那又是另一ㄍ超級大坑了[e8]

05-20 17:52

樂小呈
感謝資料[e12]05-20 19:09
樂小呈
我是想讓vm有盡量完整的功能啦,但也不會做到分配記憶體那麼底層,畢竟vm都和C#借環境來寫ㄌ,變數就直接指向C#應該也可以...?05-20 19:09
派大星教授死掉了咩噗
就是看你怎樣設計ㄅ 最簡單你可以用stack存局部參數 要不要可以動態分配 就看你記憶體要怎麼管理東西擺哪(可以VM自己管理一個記憶體pool...裡面有地址等)[e1]

05-20 19:14

樂小呈
等等記憶體pool是指真的親自到語言底層去搞記憶體分配嗎?05-20 19:22
樂小呈
還是說我C#事先宣告個陣列給VM管理也算記憶體pool[e15]05-20 19:22
派大星教授死掉了咩噗
總之是跟C#要 至於C#怎提供的(先宣告陣列,先開一大塊POOL, C#那邊動態調整等, 那是C#那邊的事情, VM不需要知道)

05-20 19:25

樂小呈
原來如此,感謝 !05-20 19:26
玉子燒-瘋狂發春模式
優質影片欸

05-20 20:03

樂小呈
真的優質,然後他這是完整的離散數學系列,但我只跳到我要的部分看[e6]05-20 20:08
樂小呈
https://www.youtube.com/playlist?list=PLDDGPdw7e6Ag1EIznZ-m-qXu4XX3A0cIz05-20 20:08
玉子燒-瘋狂發春模式
可惜這種英文影片通常都要查超久

05-20 20:04

樂小呈
對阿開始需要比較深的東西影片教學就不好找了[e3]05-20 20:09
我要留言提醒:您尚未登入,請先登入再留言

15喜歡★angus945 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【專案】新專案 Byte... 後一篇:【專案】ByteWorl...

追蹤私訊切換新版閱覽

作品資料夾

happy545你好阿~~
大家端午節快樂喵~~~~XD看更多我要大聲說9小時前


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】