diff --git a/asm/asm.h b/asm/asm.h index 2f66bd4..17fa7dc 100644 --- a/asm/asm.h +++ b/asm/asm.h @@ -93,6 +93,9 @@ typedef struct { uint16_t offset; } Line; +uint16_t assemble_to_binary( + uint16_t* out, const Line* lines, size_t lines_size); + Line s_label(int label); Line s_data_i(uint16_t data); Line s_data_l(int label); @@ -166,11 +169,75 @@ Line s_rmod_r(Reg dst_reg, Reg op1_reg, Reg op2_reg); #define s_pop_r(REG) s_mov16_r_mr(REG, Rsp, 0), s_sub_i(Rsp, Rsp, 2) -uint16_t assemble_to_binary( - uint16_t* out, const Line* lines, size_t lines_size); - -#define fmt_binary(VAL) \ - (VAL) >> 7 & 1 ? '1' : '0', (VAL) >> 6 & 1 ? '1' : '0', \ - (VAL) >> 5 & 1 ? '1' : '0', (VAL) >> 4 & 1 ? '1' : '0', \ - (VAL) >> 3 & 1 ? '1' : '0', (VAL) >> 2 & 1 ? '1' : '0', \ - (VAL) >> 1 & 1 ? '1' : '0', (VAL) >> 0 & 1 ? '1' : '0' +#ifdef ASM_NO_CTOR_PREFIX +#define label s_label +#define data_i s_data_i +#define data_l s_data_l +#define nop s_nop +#define hlt s_hlt +#define jmp_r s_jmp_r +#define jmp_i s_jmp_i +#define jmp_l s_jmp_l +#define jnz_r s_jnz_r +#define jnz_i s_jnz_i +#define jnz_l s_jnz_l +#define cmp_r s_cmp_r +#define cmp_i s_cmp_i +#define cmp_l s_cmp_l +#define mov8_mr_r s_mov8_mr_r +#define mov8_mi_i s_mov8_mi_i +#define mov8_mi_r s_mov8_mi_r +#define mov16_r_r s_mov16_r_r +#define mov16_r_i s_mov16_r_i +#define mov16_r_mr s_mov16_r_mr +#define mov16_r_mi s_mov16_r_mi +#define mov16_r_ml s_mov16_r_ml +#define mov16_mr_r s_mov16_mr_r +#define mov16_ml_r s_mov16_ml_r +#define in_i s_in_i +#define call_i s_call_i +#define call_l s_call_l +#define ret s_ret +#define lit_i s_lit_i +#define lit_l s_lit_l +#define int_ s_int +#define iret s_iret +#define or_i s_or_i +#define xor_i s_xor_i +#define and_i s_and_i +#define shl_i s_shl_i +#define rshl_i s_rshl_i +#define shr_i s_shr_i +#define rshr_i s_rshr_i +#define add_i s_add_i +#define sub_i s_sub_i +#define rsub_i s_rsub_i +#define mul_i s_mul_i +#define imul_i s_imul_i +#define div_i s_div_i +#define idiv_i s_idiv_i +#define rdiv_i s_rdiv_i +#define ridiv_i s_ridiv_i +#define mod_i s_mod_i +#define rmod_i s_rmod_i +#define or_r s_or_r +#define xor_r s_xor_r +#define and_r s_and_r +#define shl_r s_shl_r +#define rshl_r s_rshl_r +#define shr_r s_shr_r +#define rshr_r s_rshr_r +#define add_r s_add_r +#define sub_r s_sub_r +#define rsub_r s_rsub_r +#define mul_r s_mul_r +#define imul_r s_imul_r +#define div_r s_div_r +#define idiv_r s_idiv_r +#define rdiv_r s_rdiv_r +#define ridiv_r s_ridiv_r +#define mod_r s_mod_r +#define rmod_r s_rmod_r +#define push_r s_push_r +#define pop_r s_pop_r +#endif diff --git a/common/fmt_binary.h b/common/fmt_binary.h new file mode 100644 index 0000000..d5717b7 --- /dev/null +++ b/common/fmt_binary.h @@ -0,0 +1,7 @@ +#pragma once + +#define fmt_binary(VAL) \ + (VAL) >> 7 & 1 ? '1' : '0', (VAL) >> 6 & 1 ? '1' : '0', \ + (VAL) >> 5 & 1 ? '1' : '0', (VAL) >> 4 & 1 ? '1' : '0', \ + (VAL) >> 3 & 1 ? '1' : '0', (VAL) >> 2 & 1 ? '1' : '0', \ + (VAL) >> 1 & 1 ? '1' : '0', (VAL) >> 0 & 1 ? '1' : '0'