MCPcopy Create free account
hub / github.com/djhworld/simple-computer / ToString

Method ToString

asm/assembler.go:97–158  ·  view source on GitHub ↗
(codeStartOffset uint16, instructions []Instruction)

Source from the content-addressed store, hash-verified

95}
96
97func (a *Assembler) ToString(codeStartOffset uint16, instructions []Instruction) (string, error) {
98 a.labels = make(map[string]uint16)
99 a.symbols = make(map[string]uint16)
100 position := uint16(0)
101
102 //calculate lengths
103 for _, ins := range instructions {
104 position += uint16(ins.Size())
105
106 if label, ok := ins.(DEFLABEL); ok {
107 a.labels[label.Name] = position + codeStartOffset
108 }
109
110 if symbol, ok := ins.(DEFSYMBOL); ok {
111 a.symbols[symbol.Name] = symbol.Value
112 }
113 }
114
115 result := strings.Builder{}
116
117 position = 0
118 for index, ins := range instructions {
119 if _, ok := ins.(DEFLABEL); ok {
120 l := ins.(DEFLABEL)
121 result.WriteString("\n")
122 result.WriteString(l.Name)
123 result.WriteString(":")
124 } else if _, ok := ins.(DEFSYMBOL); ok {
125 s := ins.(DEFSYMBOL)
126 result.WriteString(s.String())
127 } else {
128 a.symbols[CURRENTINSTRUCTION] = position + codeStartOffset
129 a.symbols[NEXTINSTRUCTION] = getNextExecutableInstructionLoc(a.symbols[CURRENTINSTRUCTION], index, instructions)
130 result.WriteString("\t")
131 result.WriteString(fmt.Sprintf("%s:\t", utils.ValueToString(position+codeStartOffset)))
132
133 emit, err := ins.Emit(a.ResolveLabel, a.ResolveSymbol)
134 if err != nil {
135 return "", err
136 }
137 result.WriteString("{")
138 for i := 0; i < ins.Size(); i++ {
139 result.WriteString(fmt.Sprintf("%s", utils.ValueToString(emit[i])))
140 if i < ins.Size()-1 {
141 result.WriteString(" ")
142 }
143 }
144 result.WriteString("}")
145 switch ins.Size() {
146 case 4:
147 result.WriteString("\t")
148 default:
149 result.WriteString(strings.Repeat("\t", 3))
150 }
151 result.WriteString(ins.String())
152 position += uint16(ins.Size())
153 }
154 result.WriteString("\n")

Callers 1

mainFunction · 0.95

Calls 5

ValueToStringFunction · 0.92
SizeMethod · 0.65
StringMethod · 0.65
EmitMethod · 0.65

Tested by

no test coverage detected