Implemented subtraction

This commit is contained in:
Eduard Urbach 2024-06-24 16:55:15 +02:00
parent 0657b88945
commit 9e3af3b01c
Signed by: eduard
GPG key ID: 49226B848C78F6C8
9 changed files with 92 additions and 28 deletions

View file

@ -30,10 +30,13 @@ func (a *Assembler) Finalize() ([]byte, []byte) {
case ADD:
switch operands := x.Data.(type) {
case *RegisterNumber:
code = x64.AddRegNum8(code, operands.Register, uint8(operands.Number))
code = x64.AddRegNum(code, operands.Register, operands.Number)
}
case *RegisterRegister:
// code = x64.AddRegReg64(code, operands.Destination, operands.Source)
case SUB:
switch operands := x.Data.(type) {
case *RegisterNumber:
code = x64.SubRegNum(code, operands.Register, operands.Number)
}
case CALL:

View file

@ -3,7 +3,7 @@ package asm
import "git.akyoto.dev/cli/q/src/build/cpu"
// AddRegisterNumber adds a number to the given register.
func (a *Assembler) AddRegisterNumber(reg cpu.Register, number uint64) {
func (a *Assembler) AddRegisterNumber(reg cpu.Register, number int) {
a.Instructions = append(a.Instructions, Instruction{
Mnemonic: ADD,
Data: &RegisterNumber{
@ -13,8 +13,19 @@ func (a *Assembler) AddRegisterNumber(reg cpu.Register, number uint64) {
})
}
// SubRegisterNumber subtracts a number from the given register.
func (a *Assembler) SubRegisterNumber(reg cpu.Register, number int) {
a.Instructions = append(a.Instructions, Instruction{
Mnemonic: SUB,
Data: &RegisterNumber{
Register: reg,
Number: number,
},
})
}
// MoveRegisterNumber moves a number into the given register.
func (a *Assembler) MoveRegisterNumber(reg cpu.Register, number uint64) {
func (a *Assembler) MoveRegisterNumber(reg cpu.Register, number int) {
a.Instructions = append(a.Instructions, Instruction{
Mnemonic: MOVE,
Data: &RegisterNumber{

View file

@ -10,6 +10,7 @@ const (
LABEL
MOVE
RETURN
SUB
SYSCALL
)
@ -34,6 +35,9 @@ func (m Mnemonic) String() string {
case RETURN:
return "return"
case SUB:
return "sub"
case SYSCALL:
return "syscall"
}

View file

@ -9,7 +9,7 @@ import (
// RegisterNumber operates with a register and a number.
type RegisterNumber struct {
Register cpu.Register
Number uint64
Number int
}
// String returns a human readable version.