Class: SCASM::Assembler

Inherits:
BasicObject
Defined in:
lib/scasm/assembler.rb

Instance Method Summary collapse

Constructor Details

#initializeAssembler



9
10
11
12
# File 'lib/scasm/assembler.rb', line 9

def initialize
  @stmts = []
  @relocations = []
end

Instance Method Details

#assembleObject



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

#oObject



68
69
70
# File 'lib/scasm/assembler.rb', line 68

def o
  O.new
end

#pcObject



64
65
66
# File 'lib/scasm/assembler.rb', line 64

def pc
  PC.new
end

#peekObject



52
53
54
# File 'lib/scasm/assembler.rb', line 52

def peek
  Peek.new
end

#popObject



48
49
50
# File 'lib/scasm/assembler.rb', line 48

def pop
  Pop.new
end

#pushObject



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

#spObject



60
61
62
# File 'lib/scasm/assembler.rb', line 60

def sp
  SP.new
end