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

@ -0,0 +1,41 @@
package x64
import (
"math"
"git.akyoto.dev/cli/q/src/build/cpu"
)
// numberToRegister encodes an instruction with a register and a number parameter.
func numberToRegister(opCode8 byte, opCode32 byte, reg byte, code []byte, destination cpu.Register, number int) []byte {
b := byte(0)
if destination >= 8 {
b = 1
destination -= 8
}
rex := REX(1, 0, 0, b)
modRM := ModRM(0b11, reg, byte(destination))
if number >= math.MinInt8 && number <= math.MaxInt8 {
return append(
code,
rex,
opCode8,
modRM,
byte(number),
)
}
return append(
code,
rex,
opCode32,
modRM,
byte(number),
byte(number>>8),
byte(number>>16),
byte(number>>24),
)
}