MicrOS
arithmetic_operations.c File Reference
#include <stdint.h>
#include <v8086/v8086.h>
#include <v8086/memory_operations.h>
#include <v8086/mod_rm_parsing.h>
#include <stddef.h>
#include <stdbool.h>
#include "arithmetic_operations.h"
#include "internal_funcs.h"

Functions

int16_t perform_adding (v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
 
int16_t perform_subtracting (v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
 
int16_t perform_or (v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
 
int16_t perform_and (v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
 
int16_t perform_xor (v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
 
int16_t perform_cmp (v8086 *machine, void *dest, void *source, uint8_t width, uint32_t carry)
 
int16_t perform_ror (v8086 *machine, void *dest, uint8_t arg, uint8_t width)
 
int16_t perform_rol (v8086 *machine, void *dest, uint8_t arg, uint8_t width)
 
int16_t perform_rcl (v8086 *machine, void *dest, uint8_t arg, uint8_t width)
 
int16_t perform_rcr (v8086 *machine, void *dest, uint8_t arg, uint8_t width)
 
int16_t perform_shl (v8086 *machine, void *dest, uint8_t arg, uint8_t width)
 
int16_t perform_shr (v8086 *machine, void *dest, uint8_t arg, uint8_t width)
 
int16_t perform_sar (v8086 *machine, void *dest, uint8_t arg, uint8_t width)
 
int16_t perform_shld (v8086 *machine, void *rm, void *reg, uint8_t arg, uint8_t width)
 
int16_t perform_shrd (v8086 *machine, void *rm, void *reg, uint8_t arg, uint8_t width)
 
int16_t perform_neg (v8086 *machine, void *source, uint8_t width)
 
int16_t perform_multiplication (v8086 *machine, void *source, uint8_t signed_mul, uint8_t width)
 
int16_t perform_multiplication_3_byte (v8086 *machine, void *dest, void *source, void *imm, uint8_t signed_mul, uint8_t width, uint8_t second_width)
 
int16_t perform_division (v8086 *machine, void *source, uint8_t signed_div, uint8_t width)
 
int16_t perform_test (v8086 *machine, void *source, void *dest, uint8_t width)
 
int16_t perform_inc (v8086 *machine, void *dest, uint8_t width)
 
int16_t perform_dec (v8086 *machine, void *dest, uint8_t width)
 
int16_t perform_artihmetic_or_logical_instruction (v8086 *machine, uint8_t recalculated_opcode, uint32_t carry, int16_t(*operation)(v8086 *, void *, void *, uint8_t, uint32_t))
 
int16_t perform_arithmetic_or_logical_instruction_group (v8086 *machine, uint8_t recalculated_opcode, uint8_t mod_rm, uint32_t carry, int16_t(*operation)(v8086 *, void *, void *, uint8_t, uint32_t))
 
int16_t perform_inc_dec (v8086 *machine, uint8_t opcode, bool dec)
 
int16_t execute_test (v8086 *machine, uint8_t opcode)
 
int16_t execute_test_immediate (v8086 *machine, uint8_t opcode)
 
int16_t execute_group_2 (v8086 *machine, uint8_t opcode)
 
int16_t execute_group_3 (v8086 *machine, uint8_t opcode)
 
int16_t execute_double_shift (v8086 *machine, uint8_t width, uint8_t right_shift, uint8_t use_cl)
 

Function Documentation

◆ execute_double_shift()

int16_t execute_double_shift ( v8086 machine,
uint8_t  width,
uint8_t  right_shift,
uint8_t  use_cl 
)

◆ execute_group_2()

int16_t execute_group_2 ( v8086 machine,
uint8_t  opcode 
)

◆ execute_group_3()

int16_t execute_group_3 ( v8086 machine,
uint8_t  opcode 
)

◆ execute_test()

int16_t execute_test ( v8086 machine,
uint8_t  opcode 
)

◆ execute_test_immediate()

int16_t execute_test_immediate ( v8086 machine,
uint8_t  opcode 
)

◆ perform_adding()

int16_t perform_adding ( v8086 machine,
void *  dest,
void *  source,
uint8_t  width,
uint32_t  carry 
)

◆ perform_and()

int16_t perform_and ( v8086 machine,
void *  dest,
void *  source,
uint8_t  width,
uint32_t  carry 
)

◆ perform_arithmetic_or_logical_instruction_group()

int16_t perform_arithmetic_or_logical_instruction_group ( v8086 machine,
uint8_t  recalculated_opcode,
uint8_t  mod_rm,
uint32_t  carry,
int16_t(*)(v8086 *, void *, void *, uint8_t, uint32_t operation 
)

◆ perform_artihmetic_or_logical_instruction()

int16_t perform_artihmetic_or_logical_instruction ( v8086 machine,
uint8_t  recalculated_opcode,
uint32_t  carry,
int16_t(*)(v8086 *, void *, void *, uint8_t, uint32_t operation 
)

◆ perform_cmp()

int16_t perform_cmp ( v8086 machine,
void *  dest,
void *  source,
uint8_t  width,
uint32_t  carry 
)

◆ perform_dec()

int16_t perform_dec ( v8086 machine,
void *  dest,
uint8_t  width 
)

◆ perform_division()

int16_t perform_division ( v8086 machine,
void *  source,
uint8_t  signed_div,
uint8_t  width 
)

◆ perform_inc()

int16_t perform_inc ( v8086 machine,
void *  dest,
uint8_t  width 
)

◆ perform_inc_dec()

int16_t perform_inc_dec ( v8086 machine,
uint8_t  opcode,
bool  dec 
)

◆ perform_multiplication()

int16_t perform_multiplication ( v8086 machine,
void *  source,
uint8_t  signed_mul,
uint8_t  width 
)

◆ perform_multiplication_3_byte()

int16_t perform_multiplication_3_byte ( v8086 machine,
void *  dest,
void *  source,
void *  imm,
uint8_t  signed_mul,
uint8_t  width,
uint8_t  second_width 
)

◆ perform_neg()

int16_t perform_neg ( v8086 machine,
void *  source,
uint8_t  width 
)

◆ perform_or()

int16_t perform_or ( v8086 machine,
void *  dest,
void *  source,
uint8_t  width,
uint32_t  carry 
)

◆ perform_rcl()

int16_t perform_rcl ( v8086 machine,
void *  dest,
uint8_t  arg,
uint8_t  width 
)

◆ perform_rcr()

int16_t perform_rcr ( v8086 machine,
void *  dest,
uint8_t  arg,
uint8_t  width 
)

◆ perform_rol()

int16_t perform_rol ( v8086 machine,
void *  dest,
uint8_t  arg,
uint8_t  width 
)

◆ perform_ror()

int16_t perform_ror ( v8086 machine,
void *  dest,
uint8_t  arg,
uint8_t  width 
)

◆ perform_sar()

int16_t perform_sar ( v8086 machine,
void *  dest,
uint8_t  arg,
uint8_t  width 
)

◆ perform_shl()

int16_t perform_shl ( v8086 machine,
void *  dest,
uint8_t  arg,
uint8_t  width 
)

◆ perform_shld()

int16_t perform_shld ( v8086 machine,
void *  rm,
void *  reg,
uint8_t  arg,
uint8_t  width 
)

◆ perform_shr()

int16_t perform_shr ( v8086 machine,
void *  dest,
uint8_t  arg,
uint8_t  width 
)

◆ perform_shrd()

int16_t perform_shrd ( v8086 machine,
void *  rm,
void *  reg,
uint8_t  arg,
uint8_t  width 
)

◆ perform_subtracting()

int16_t perform_subtracting ( v8086 machine,
void *  dest,
void *  source,
uint8_t  width,
uint32_t  carry 
)

◆ perform_test()

int16_t perform_test ( v8086 machine,
void *  source,
void *  dest,
uint8_t  width 
)

◆ perform_xor()

int16_t perform_xor ( v8086 machine,
void *  dest,
void *  source,
uint8_t  width,
uint32_t  carry 
)