Implemented subtraction
This commit is contained in:
parent
0657b88945
commit
9e3af3b01c
9 changed files with 92 additions and 28 deletions
|
@ -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:
|
||||
|
|
|
@ -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{
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue