From dc3ba6504f770cdc5c93911dd86101082109fc21 Mon Sep 17 00:00:00 2001 From: Eduard Urbach Date: Sun, 16 Feb 2025 19:29:22 +0100 Subject: [PATCH] Improved formatting of load and store commands --- src/asm/Memory.go | 34 +++++++++++++++++++++++++++++++++- src/asm/MemoryLabel.go | 11 +---------- src/asm/MemoryNumber.go | 7 +------ src/asm/MemoryRegister.go | 7 +------ 4 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/asm/Memory.go b/src/asm/Memory.go index e97924e..a183de6 100644 --- a/src/asm/Memory.go +++ b/src/asm/Memory.go @@ -1,6 +1,12 @@ package asm -import "git.akyoto.dev/cli/q/src/cpu" +import ( + "fmt" + "math" + "strings" + + "git.akyoto.dev/cli/q/src/cpu" +) type Memory struct { Base cpu.Register @@ -8,3 +14,29 @@ type Memory struct { OffsetRegister cpu.Register Length byte } + +// Format returns a human readable version. +func (mem *Memory) Format(custom string) string { + tmp := strings.Builder{} + tmp.WriteString("[") + tmp.WriteString(fmt.Sprint(mem.Base)) + + if mem.OffsetRegister != math.MaxUint8 { + tmp.WriteString("+") + tmp.WriteString(fmt.Sprint(mem.OffsetRegister)) + } + + if mem.Offset != 0 { + if mem.Offset > 0 { + tmp.WriteString("+") + } + + tmp.WriteString(fmt.Sprint(mem.Offset)) + } + + tmp.WriteString("], ") + tmp.WriteString(custom) + tmp.WriteString(", ") + tmp.WriteString(fmt.Sprint(mem.Length)) + return tmp.String() +} diff --git a/src/asm/MemoryLabel.go b/src/asm/MemoryLabel.go index 63108c8..3ea1b9b 100644 --- a/src/asm/MemoryLabel.go +++ b/src/asm/MemoryLabel.go @@ -1,10 +1,5 @@ package asm -import ( - "fmt" - "math" -) - // MemoryLabel operates with a memory address and a number. type MemoryLabel struct { Label string @@ -13,11 +8,7 @@ type MemoryLabel struct { // String returns a human readable version. func (data *MemoryLabel) String() string { - if data.Address.OffsetRegister == math.MaxUint8 { - return fmt.Sprintf("%dB [%s+%d], %s", data.Address.Length, data.Address.Base, data.Address.Offset, data.Label) - } - - return fmt.Sprintf("%dB [%s+%s+%d], %s", data.Address.Length, data.Address.Base, data.Address.OffsetRegister, data.Address.Offset, data.Label) + return data.Address.Format(data.Label) } // MemoryLabel adds an instruction with a memory address and a label. diff --git a/src/asm/MemoryNumber.go b/src/asm/MemoryNumber.go index 1a255b3..651a20b 100644 --- a/src/asm/MemoryNumber.go +++ b/src/asm/MemoryNumber.go @@ -2,7 +2,6 @@ package asm import ( "fmt" - "math" ) // MemoryNumber operates with a memory address and a number. @@ -13,11 +12,7 @@ type MemoryNumber struct { // String returns a human readable version. func (data *MemoryNumber) String() string { - if data.Address.OffsetRegister == math.MaxUint8 { - return fmt.Sprintf("%dB [%s+%d], %d", data.Address.Length, data.Address.Base, data.Address.Offset, data.Number) - } - - return fmt.Sprintf("%dB [%s+%s+%d], %d", data.Address.Length, data.Address.Base, data.Address.OffsetRegister, data.Address.Offset, data.Number) + return data.Address.Format(fmt.Sprint(data.Number)) } // MemoryNumber adds an instruction with a memory address and a number. diff --git a/src/asm/MemoryRegister.go b/src/asm/MemoryRegister.go index c35a3c8..1c9f51b 100644 --- a/src/asm/MemoryRegister.go +++ b/src/asm/MemoryRegister.go @@ -2,7 +2,6 @@ package asm import ( "fmt" - "math" "git.akyoto.dev/cli/q/src/cpu" ) @@ -15,11 +14,7 @@ type MemoryRegister struct { // String returns a human readable version. func (data *MemoryRegister) String() string { - if data.Address.OffsetRegister == math.MaxUint8 { - return fmt.Sprintf("%dB [%s+%d], %s", data.Address.Length, data.Address.Base, data.Address.Offset, data.Register) - } - - return fmt.Sprintf("%dB [%s+%s+%d], %s", data.Address.Length, data.Address.Base, data.Address.OffsetRegister, data.Address.Offset, data.Register) + return data.Address.Format(fmt.Sprint(data.Register)) } // MemoryRegister adds an instruction with a memory address and a number.