Implemented multiplication

This commit is contained in:
Eduard Urbach 2024-06-24 22:43:01 +02:00
parent 81fcb50e77
commit 432397043d
Signed by: eduard
GPG key ID: 49226B848C78F6C8
11 changed files with 107 additions and 47 deletions

View file

@ -39,6 +39,12 @@ func (a *Assembler) Finalize() ([]byte, []byte) {
code = x64.SubRegNum(code, operands.Register, operands.Number)
}
case MUL:
switch operands := x.Data.(type) {
case *RegisterNumber:
code = x64.MulRegNum(code, operands.Register, operands.Number)
}
case CALL:
code = x64.Call(code, 0x00_00_00_00)
size := 4

View file

@ -2,32 +2,10 @@ 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 int) {
// RegisterNumber adds an instruction with a register and a number.
func (a *Assembler) RegisterNumber(mnemonic Mnemonic, reg cpu.Register, number int) {
a.Instructions = append(a.Instructions, Instruction{
Mnemonic: ADD,
Data: &RegisterNumber{
Register: reg,
Number: number,
},
})
}
// 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 int) {
a.Instructions = append(a.Instructions, Instruction{
Mnemonic: MOVE,
Mnemonic: mnemonic,
Data: &RegisterNumber{
Register: reg,
Number: number,

View file

@ -7,6 +7,7 @@ const (
ADD
CALL
JUMP
MUL
LABEL
MOVE
RETURN
@ -32,6 +33,9 @@ func (m Mnemonic) String() string {
case MOVE:
return "move"
case MUL:
return "mul"
case RETURN:
return "return"