Added define operator

This commit is contained in:
Eduard Urbach 2024-06-15 11:36:57 +02:00
parent 06d16b48da
commit a4ecaf0622
Signed by: eduard
GPG key ID: 49226B848C78F6C8
9 changed files with 51 additions and 51 deletions

View file

@ -2,7 +2,6 @@ package asm
import (
"encoding/binary"
"fmt"
"git.akyoto.dev/cli/q/src/build/arch/x64"
"git.akyoto.dev/cli/q/src/build/config"
@ -29,12 +28,12 @@ func (a *Assembler) Finalize() ([]byte, []byte) {
for _, x := range a.Instructions {
switch x.Mnemonic {
case MOVE:
code = x64.MoveRegNum32(code, uint8(x.Data.(RegisterNumber).Register), uint32(x.Data.(RegisterNumber).Number))
code = x64.MoveRegNum32(code, uint8(x.Data.(*RegisterNumber).Register), uint32(x.Data.(*RegisterNumber).Number))
if x.Data.(RegisterNumber).IsPointer {
if x.Data.(*RegisterNumber).IsPointer {
pointers = append(pointers, Pointer{
Position: Address(len(code) - 4),
Address: Address(x.Data.(RegisterNumber).Number),
Address: Address(x.Data.(*RegisterNumber).Number),
})
}
@ -49,12 +48,6 @@ func (a *Assembler) Finalize() ([]byte, []byte) {
}
}
if config.Verbose {
for _, x := range a.Instructions {
fmt.Println("[asm]", x.String())
}
}
dataStart := config.BaseAddress + config.CodeOffset + Address(len(code))
for _, pointer := range pointers {

View file

@ -5,15 +5,5 @@ import "fmt"
// Instruction represents a single instruction which can be converted to machine code.
type Instruction struct {
Mnemonic Mnemonic
Data interface{}
}
// String returns a human readable version.
func (x *Instruction) String() string {
switch data := x.Data.(type) {
case RegisterNumber:
return fmt.Sprintf("%s %s, %x", x.Mnemonic, data.Register, data.Number)
default:
return x.Mnemonic.String()
}
Data fmt.Stringer
}

View file

@ -6,7 +6,7 @@ import "git.akyoto.dev/cli/q/src/build/cpu"
func (a *Assembler) MoveRegisterNumber(reg cpu.Register, number uint64) {
a.Instructions = append(a.Instructions, Instruction{
Mnemonic: MOVE,
Data: RegisterNumber{
Data: &RegisterNumber{
Register: reg,
Number: number,
IsPointer: false,
@ -18,7 +18,7 @@ func (a *Assembler) MoveRegisterNumber(reg cpu.Register, number uint64) {
func (a *Assembler) MoveRegisterAddress(reg cpu.Register, address Address) {
a.Instructions = append(a.Instructions, Instruction{
Mnemonic: MOVE,
Data: RegisterNumber{
Data: &RegisterNumber{
Register: reg,
Number: uint64(address),
IsPointer: true,

View file

@ -1,6 +1,10 @@
package asm
import "git.akyoto.dev/cli/q/src/build/cpu"
import (
"fmt"
"git.akyoto.dev/cli/q/src/build/cpu"
)
// RegisterNumber operates with a register and a number.
type RegisterNumber struct {
@ -8,3 +12,8 @@ type RegisterNumber struct {
Number uint64
IsPointer bool
}
// String returns a human readable version.
func (data *RegisterNumber) String() string {
return fmt.Sprintf("%s, %x", data.Register, data.Number)
}