Class: SCASM::Assembler
- Inherits:
- BasicObject
- Defined in:
- lib/scasm/assembler.rb
Instance Method Summary collapse
- #assemble ⇒ Object
- #eval(code) ⇒ Object
- #imem(imm) ⇒ Object
- #imm(imm) ⇒ Object
-
#initialize ⇒ Assembler
constructor
A new instance of Assembler.
- #inst(opsym, a, b) ⇒ Object
- #iregmem(regsym, imm) ⇒ Object
- #l(name) ⇒ Object
- #label(name) ⇒ Object
- #o ⇒ Object
- #pc ⇒ Object
- #peek ⇒ Object
- #pop ⇒ Object
- #push ⇒ Object
- #reg(regsym) ⇒ Object
- #regmem(regsym) ⇒ Object
- #sp ⇒ Object
Constructor Details
#initialize ⇒ Assembler
9 10 11 12 |
# File 'lib/scasm/assembler.rb', line 9 def initialize @stmts = [] @relocations = [] end |
Instance Method Details
#assemble ⇒ Object
18 19 20 21 22 23 |
# File 'lib/scasm/assembler.rb', line 18 def assemble resolve_labels io = ::StringIO.new @stmts.each { |stmt| stmt.assemble io } io.string end |
#eval(code) ⇒ Object
14 15 16 |
# File 'lib/scasm/assembler.rb', line 14 def eval code instance_eval code end |
#imem(imm) ⇒ Object
72 73 74 |
# File 'lib/scasm/assembler.rb', line 72 def imem imm ImmediateMemory.new imm end |
#imm(imm) ⇒ Object
76 77 78 |
# File 'lib/scasm/assembler.rb', line 76 def imm imm Immediate.new imm end |
#inst(opsym, a, b) ⇒ Object
25 26 27 28 29 |
# File 'lib/scasm/assembler.rb', line 25 def inst opsym, a, b a = parse_value a b = parse_value b @stmts << Instruction.new(opsym, a, b) end |
#iregmem(regsym, imm) ⇒ Object
44 45 46 |
# File 'lib/scasm/assembler.rb', line 44 def iregmem regsym, imm OffsetRegisterMemory.new regsym, imm end |
#l(name) ⇒ Object
80 81 82 83 |
# File 'lib/scasm/assembler.rb', line 80 def l name ::Kernel.raise "label names must be strings" unless name.is_a? ::String ImmediateLabel.new(name).tap { |x| @relocations << x } end |
#label(name) ⇒ Object
31 32 33 34 |
# File 'lib/scasm/assembler.rb', line 31 def label name ::Kernel.raise "label names must be strings" unless name.is_a? ::String @stmts << Label.new(name) end |
#o ⇒ Object
68 69 70 |
# File 'lib/scasm/assembler.rb', line 68 def o O.new end |
#pc ⇒ Object
64 65 66 |
# File 'lib/scasm/assembler.rb', line 64 def pc PC.new end |
#peek ⇒ Object
52 53 54 |
# File 'lib/scasm/assembler.rb', line 52 def peek Peek.new end |
#pop ⇒ Object
48 49 50 |
# File 'lib/scasm/assembler.rb', line 48 def pop Pop.new end |
#push ⇒ Object
56 57 58 |
# File 'lib/scasm/assembler.rb', line 56 def push Push.new end |
#reg(regsym) ⇒ Object
36 37 38 |
# File 'lib/scasm/assembler.rb', line 36 def reg regsym Register.new regsym end |
#regmem(regsym) ⇒ Object
40 41 42 |
# File 'lib/scasm/assembler.rb', line 40 def regmem regsym RegisterMemory.new regsym end |
#sp ⇒ Object
60 61 62 |
# File 'lib/scasm/assembler.rb', line 60 def sp SP.new end |