Initial import.
[alchemist.git] / x86 / test / exit42.c
blob8850e01e1e507255e22eac735c72013f7a12c5df
1 #include "alchemist/x86.h"
3 int main(int argc, char **argv) {
4 char code[0x10000];
5 int n = 0;
7 /*** write code ***/
9 /* xor eax, eax */
10 n += cg_x86_emit_reg32_reg32_instr(code + n,
11 sizeof(code - n),
12 CG_X86_OP_XOR,
13 CG_X86_REG_EAX,
14 CG_X86_REG_EAX);
15 /* inc eax */
16 n += cg_x86_emit_reg32_instr(code + n,
17 sizeof(code) - n,
18 CG_X86_OP_INC,
19 CG_X86_REG_EAX);
20 /* xor ebx, ebx */
21 n += cg_x86_emit_reg32_reg32_instr(code + n,
22 sizeof(code) - n,
23 CG_X86_OP_XOR,
24 CG_X86_REG_EBX,
25 CG_X86_REG_EBX);
26 /* or ebx, 42 */
27 n += cg_x86_emit_reg32_imm8_instr(code + n,
28 sizeof(code) - n,
29 CG_X86_OP_OR,
30 CG_X86_REG_EBX,
31 42);
32 /* int 0x80 */
33 n += cg_x86_emit_imm8_instr(code + n,
34 sizeof(code) - n,
35 CG_X86_OP_INT,
36 0x80);
38 /*** invoke code ***/
39 ((void (*) ()) code)();
41 /*** should not be reached ***/
42 return 0;