20 lines
536 B
Go
Raw Normal View History

package x64
2024-07-23 10:47:27 +02:00
// AddressMode encodes the addressing mode.
type AddressMode = byte
2024-07-20 00:58:39 +02:00
const (
2024-07-23 10:47:27 +02:00
AddressMemory = AddressMode(0b00)
AddressMemoryOffset8 = AddressMode(0b01)
AddressMemoryOffset32 = AddressMode(0b10)
AddressDirect = AddressMode(0b11)
2024-07-20 00:58:39 +02:00
)
// ModRM is used to generate a ModRM suffix.
2024-07-23 10:47:27 +02:00
// - 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
}