HobbyOSs / opennask

nask clone assembly, it can boot tiny OS with Linux
https://github.com/HobbyOSs/opennask/wiki/%E5%8B%95%E4%BD%9C%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF
GNU General Public License v3.0
20 stars 3 forks source link

Pass1アセンブラの実装, 必要な機械語のサイズを出力する実装とテスト #64

Closed hangingman closed 1 year ago

hangingman commented 1 year ago

ref #58

主にオペコードとオペランドを渡されたら必要な機械語のサイズを出力できるようにした

間接アドレス表現への対応

簡単なテスト

$ echo "MOV AL,[SI]" | src/nask_parse --parse --scan ../test.img

[Abstract Syntax]
(Prog 
  [
    (MnemonicStmt [OpcodesMOV] [
      (MnemoArg [(ImmExp [(IdentFactor "AL")])]), 
      (MnemoArg [(IndirectAddrExp [(ImmExp [(IdentFactor "SI")])] )])
    ])
  ]
)

[Linearized Tree]
MOV AL, [SI]

まだ間接アドレス表現の[ESP+4]のような表記には対応できていない