# 系統程式 VMCS 虛擬機 本專案研究自 VMCS.pdf 再加上自己的理解 B32register 初步架構  ### mnemonic(註記詞) 1.LDA (load A register) 顧名思義就是把值載入到A暫存器裡 addressing modes (定址模式) 決定暫存器如何獲得所需的值 從operand裡取出的數據為2byte (1byte mnemonic 1byte data) 註記符 $01 2.LDX (load X register) 跟 LDA 很像,都是從operand將值載入暫存器中,兩者最大的差別為大小,一個為16一個為8,所以長度為3byte(1byte mnemonic 2byte data) 註記符 $02 3.STA (store A register) 將A裡面的值存入到64k的memory裡面 註記符 $03 4.END 為結束 註記符 $04  (#)的功能為標記,告訴組譯器要用哪一個值 ($)告訴組譯器為16進制 架構  ### B32 Assembler [Optional Label:] <white space><mnemonic><white space><operand>[Optional white space]<newline> #### Example  首先將英文數字A(asc code)載入A暫存器,然後將$A000也載入到X暫存器,B32的video memeory 也是從$A000開始,從而定義這個function。 之後將A的值存入被X指向的目的地,最後就是end。 --- ### 開始 使用者介面  --- 可以選擇檔案  --- 所需函示  --- 設定初始值  --- Assemble Btn 的程式碼  --- Parse Function 會掃描兩次檔案,第一次掃描label,第二次會掃描並編譯  --- Label Scan function 用來檢查是label還是mnemonic mnemonic的話前面會有一個空格來做為區別。 如果是label的話,會再根據islabelscan這個 bool 判斷是否要加入到 hash table。掃描完後發現 label 後面沒有值了,就會呼叫 EatWhiteSpace() 這個函式來處理空白的部分。  --- ReadMnemonic function 將對應到的mnemonic 去執行對應的 mncmonic function  --- LDA function $01  --- LDX function $02  --- STA function $03  --- Do end function $04  --- ReadRegister funciton 這個函示會讀取下一個字元,然後返回一個合適的列舉。基本上就是不論大小寫都回傳同一個  --- ReadwordValue function 先檢查有沒有$這個符號,如果有,表示這個值是一個16進制而不是integer。之後再將這個數字的型態轉為unsigned short 在return 回去  --- ReadByteValue function 跟上面的很像,只是最後轉換得時候是轉換成byte而不是unsigned short  --- EatWhiteSpace function 處理空白的部分  --- GetLabelname function  --- example 經過編碼後的檔案 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up