Implemented length storage of allocated memory

This commit is contained in:
Eduard Urbach 2025-02-09 14:14:41 +01:00
parent 79bb606e8d
commit 3043e4e2c4
Signed by: eduard
GPG key ID: 49226B848C78F6C8
27 changed files with 134 additions and 49 deletions

View file

@ -3,6 +3,6 @@ package x86
import "git.akyoto.dev/cli/q/src/cpu"
// LoadRegister loads from memory into a register.
func LoadRegister(code []byte, destination cpu.Register, offset byte, length byte, source cpu.Register) []byte {
func LoadRegister(code []byte, destination cpu.Register, offset int8, length byte, source cpu.Register) []byte {
return memoryAccess(code, 0x8A, 0x8B, source, offset, length, destination)
}

View file

@ -12,7 +12,7 @@ func TestLoadRegister(t *testing.T) {
usagePatterns := []struct {
Destination cpu.Register
Source cpu.Register
Offset byte
Offset int8
Length byte
Code []byte
}{

View file

@ -7,7 +7,7 @@ import (
)
// StoreNumber stores a number into the memory address included in the given register.
func StoreNumber(code []byte, register cpu.Register, offset byte, length byte, number int) []byte {
func StoreNumber(code []byte, register cpu.Register, offset int8, length byte, number int) []byte {
code = memoryAccess(code, 0xC6, 0xC7, register, offset, length, 0b000)
switch length {
@ -22,6 +22,6 @@ func StoreNumber(code []byte, register cpu.Register, offset byte, length byte, n
}
// StoreRegister stores the contents of the `source` register into the memory address included in the given register.
func StoreRegister(code []byte, register cpu.Register, offset byte, length byte, source cpu.Register) []byte {
func StoreRegister(code []byte, register cpu.Register, offset int8, length byte, source cpu.Register) []byte {
return memoryAccess(code, 0x88, 0x89, register, offset, length, source)
}

View file

@ -11,7 +11,7 @@ import (
func TestStoreNumber(t *testing.T) {
usagePatterns := []struct {
Register cpu.Register
Offset byte
Offset int8
Length byte
Number int
Code []byte
@ -159,7 +159,7 @@ func TestStoreNumber(t *testing.T) {
func TestStoreRegister(t *testing.T) {
usagePatterns := []struct {
RegisterTo cpu.Register
Offset byte
Offset int8
Length byte
RegisterFrom cpu.Register
Code []byte

View file

@ -3,7 +3,7 @@ package x86
import "git.akyoto.dev/cli/q/src/cpu"
// memoryAccess encodes a memory access.
func memoryAccess(code []byte, opCode8 byte, opCode32 byte, register cpu.Register, offset byte, numBytes byte, source cpu.Register) []byte {
func memoryAccess(code []byte, opCode8 byte, opCode32 byte, register cpu.Register, offset int8, numBytes byte, source cpu.Register) []byte {
opCode := opCode32
if numBytes == 1 {
@ -27,7 +27,7 @@ func memoryAccess(code []byte, opCode8 byte, opCode32 byte, register cpu.Registe
}
if mod == AddressMemoryOffset8 {
code = append(code, offset)
code = append(code, byte(offset))
}
return code