20 lines
536 B
Go
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
|
|
}
|