MicrOS
mod_rm_parsing.h File Reference
#include "v8086.h"

Go to the source code of this file.

Macros

#define get_byte_register(machine, reg_field)   ((uint8_t*)(&(machine->regs.h.al) + ((((reg_field) & 3) << 2) + ((reg_field) >> 2))))
 
#define get_word_register(machine, reg_field)   ((uint16_t*)(&(machine->regs.d.eax) + (reg_field)))
 
#define get_dword_register(machine, reg_field)   ((uint32_t*)(&(machine->regs.d.eax) + (reg_field)))
 
#define select_segment_register(machine, select)   ((uint16_t*)(&((machine)->sregs.es) + (select)))
 

Functions

void * get_variable_length_register (v8086 *machine, uint8_t reg_field, uint8_t width)
 
int16_t calculate_segment_offset_from_mode (v8086 *machine, uint8_t mod_rm, uint16_t *segment, uint32_t *offset)
 
int16_t calculate_segment_offset_from_mode_32 (v8086 *machine, uint8_t mod_rm, uint16_t *segment, uint32_t *offset)
 
void * get_memory_from_mode (v8086 *machine, uint8_t mod_rm, uint8_t width)
 

Macro Definition Documentation

◆ get_byte_register

#define get_byte_register (   machine,
  reg_field 
)    ((uint8_t*)(&(machine->regs.h.al) + ((((reg_field) & 3) << 2) + ((reg_field) >> 2))))

◆ get_dword_register

#define get_dword_register (   machine,
  reg_field 
)    ((uint32_t*)(&(machine->regs.d.eax) + (reg_field)))

◆ get_word_register

#define get_word_register (   machine,
  reg_field 
)    ((uint16_t*)(&(machine->regs.d.eax) + (reg_field)))

◆ select_segment_register

#define select_segment_register (   machine,
  select 
)    ((uint16_t*)(&((machine)->sregs.es) + (select)))

Function Documentation

◆ calculate_segment_offset_from_mode()

int16_t calculate_segment_offset_from_mode ( v8086 machine,
uint8_t  mod_rm,
uint16_t *  segment,
uint32_t offset 
)

◆ calculate_segment_offset_from_mode_32()

int16_t calculate_segment_offset_from_mode_32 ( v8086 machine,
uint8_t  mod_rm,
uint16_t *  segment,
uint32_t offset 
)

◆ get_memory_from_mode()

void* get_memory_from_mode ( v8086 machine,
uint8_t  mod_rm,
uint8_t  width 
)

◆ get_variable_length_register()

void* get_variable_length_register ( v8086 machine,
uint8_t  reg_field,
uint8_t  width 
)