Implemented multiplication
This commit is contained in:
parent
81fcb50e77
commit
432397043d
11 changed files with 107 additions and 47 deletions
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue