20 lines
536 B
Go

package x64
// AddressMode encodes the addressing mode.
type AddressMode = byte
const (
AddressMemory = AddressMode(0b00)
AddressMemoryOffset8 = AddressMode(0b01)
AddressMemoryOffset32 = AddressMode(0b10)
AddressDirect = AddressMode(0b11)
)
// ModRM is used to generate a ModRM suffix.
// - mod: 2 bits. The addressing mode.
// - reg: 3 bits. Register reference or opcode extension.
// - rm: 3 bits. Register operand.
func ModRM(mod AddressMode, reg byte, rm byte) byte {
return (mod << 6) | (reg << 3) | rm
}