Cleaned up mess I have made in the toolshed...
This commit is contained in:
@ -1,5 +1,4 @@
|
|||||||
#include "assembler.h"
|
#include "assembler.h"
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
@ -22,56 +21,6 @@
|
|||||||
#define SHIFT_BEGIN (ROL)
|
#define SHIFT_BEGIN (ROL)
|
||||||
#define SHIFT_END (SAR)
|
#define SHIFT_END (SAR)
|
||||||
|
|
||||||
#if DEBUG == 1
|
|
||||||
|
|
||||||
static const char * size_name [] = {
|
|
||||||
"d8", "d16", "d32", "d64"
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char * type_name [] = {
|
|
||||||
"rel", "reg", "mem", "imm"
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char * data_name [] = {
|
|
||||||
"asmdirmem", "asmdirrel", "asmdirimm", "asmdirrep",
|
|
||||||
"add", "or", "adc", "sbb",
|
|
||||||
"and", "sub", "xor", "cmp",
|
|
||||||
"inc", "dec", "not", "neg",
|
|
||||||
"mul", "imul", "div", "idiv",
|
|
||||||
"fadd", "fmul", "fcom", "fcomp",
|
|
||||||
"fsub", "fsubr", "fdiv", "fdivr",
|
|
||||||
"rol", "ror", "rcl", "rcr",
|
|
||||||
"sal", "shr", "shl", "sar",
|
|
||||||
"nop", "retn", "retf", "leave",
|
|
||||||
"popf", "pushf",
|
|
||||||
"syscall", "cpuid", "fnop", "fchs",
|
|
||||||
"fabs", "ftst", "fxam", "fld1",
|
|
||||||
"fldl2t", "fldl2e", "fldpi", "fldlg2",
|
|
||||||
"fldln2", "fldz", "f2xm1", "fyl2x",
|
|
||||||
"fptan", "fpatan", "fxtract", "fprem1",
|
|
||||||
"fdecstp", "fincstp", "fprem", "fyl2xp1",
|
|
||||||
"fsqrt", "fsincos", "frndint", "fscale",
|
|
||||||
"fsin", "fcos",
|
|
||||||
"enter", "call", "in", "out",
|
|
||||||
"jmp", "mov", "pop", "push",
|
|
||||||
"jo", "jno", "jb", "jae",
|
|
||||||
"je", "jne", "jbe", "ja",
|
|
||||||
"js", "jns", "jpe", "jpo",
|
|
||||||
"jl", "jge", "jle", "jg",
|
|
||||||
"cmovo", "cmovno", "cmovb", "cmovae",
|
|
||||||
"cmove", "cmovne", "cmovbe", "cmova",
|
|
||||||
"cmovs", "cmovns", "cmovpe", "cmovpo",
|
|
||||||
"cmovl", "cmovge", "cmovle", "cmovg",
|
|
||||||
"seto", "setno", "setb", "setae",
|
|
||||||
"sete", "setne", "setbe", "seta",
|
|
||||||
"sets", "setns", "setpe", "setpo",
|
|
||||||
"setl", "setge", "setle", "setg",
|
|
||||||
"bswap", "bsf", "bsr", "loop",
|
|
||||||
"loope", "loopne"
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static unsigned int empty_count = 1;
|
static unsigned int empty_count = 1;
|
||||||
static unsigned int empty_holes = 1;
|
static unsigned int empty_holes = 1;
|
||||||
static unsigned int * empty_array = NULL;
|
static unsigned int * empty_array = NULL;
|
||||||
@ -111,8 +60,6 @@ static void inset_memory (int when, unsigned int size, unsigned int data, unsign
|
|||||||
static unsigned int store_relative (unsigned int * array) {
|
static unsigned int store_relative (unsigned int * array) {
|
||||||
unsigned int relative = array [1];
|
unsigned int relative = array [1];
|
||||||
|
|
||||||
debug_printf ("> %s %u", data_name [array [0]], array [1]);
|
|
||||||
|
|
||||||
empty_array [empty_holes] = text_sector_size;
|
empty_array [empty_holes] = text_sector_size;
|
||||||
empty_imbue [empty_holes] = relative;
|
empty_imbue [empty_holes] = relative;
|
||||||
|
|
||||||
@ -124,8 +71,6 @@ static unsigned int store_relative (unsigned int * array) {
|
|||||||
static unsigned int store_memory (unsigned int * array) {
|
static unsigned int store_memory (unsigned int * array) {
|
||||||
unsigned int memory = array [1];
|
unsigned int memory = array [1];
|
||||||
|
|
||||||
debug_printf ("> %s %u", data_name [array [0]], array [1]);
|
|
||||||
|
|
||||||
empty_store [memory] = text_sector_size;
|
empty_store [memory] = text_sector_size;
|
||||||
|
|
||||||
++empty_count;
|
++empty_count;
|
||||||
@ -138,8 +83,6 @@ static unsigned int store_immediate (unsigned int * array) {
|
|||||||
size = array [1],
|
size = array [1],
|
||||||
amount = array [2];
|
amount = array [2];
|
||||||
|
|
||||||
debug_printf ("> %s %s %u", data_name [array [0]], size_name [array [1]], array [2]);
|
|
||||||
|
|
||||||
for (index = 0; index < amount; ++index) {
|
for (index = 0; index < amount; ++index) {
|
||||||
inset_immediate (1, size, array [3 + index]);
|
inset_immediate (1, size, array [3 + index]);
|
||||||
}
|
}
|
||||||
@ -195,8 +138,6 @@ static unsigned int build_double (unsigned int * array) {
|
|||||||
from = array [4],
|
from = array [4],
|
||||||
source = array [5];
|
source = array [5];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u %s %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3], type_name [array [4]], array [5]);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
long_prefix (size, to, destination, from, source);
|
long_prefix (size, to, destination, from, source);
|
||||||
@ -230,8 +171,6 @@ static unsigned int build_single (unsigned int * array) {
|
|||||||
to = array [2],
|
to = array [2],
|
||||||
destination = array [3];
|
destination = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3]);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
long_prefix (size, to, destination, 0, 0);
|
long_prefix (size, to, destination, 0, 0);
|
||||||
@ -256,8 +195,6 @@ static unsigned int build_static_1 (unsigned int * array) {
|
|||||||
0x90, 0xc3, 0xcb, 0xc9, 0x9d, 0x9c
|
0x90, 0xc3, 0xcb, 0xc9, 0x9d, 0x9c
|
||||||
};
|
};
|
||||||
|
|
||||||
debug_printf ("> %s", data_name [array [0]]);
|
|
||||||
|
|
||||||
inset (1, data [operation - STATIC_1_BEGIN]);
|
inset (1, data [operation - STATIC_1_BEGIN]);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
@ -273,8 +210,6 @@ static unsigned int build_static_2 (unsigned int * array) {
|
|||||||
0xfad9, 0xfbd9, 0xfcd9, 0xfdd9, 0xfed9, 0xffd9
|
0xfad9, 0xfbd9, 0xfcd9, 0xfdd9, 0xfed9, 0xffd9
|
||||||
};
|
};
|
||||||
|
|
||||||
debug_printf ("> %s", data_name [array [0]]);
|
|
||||||
|
|
||||||
inset_immediate (1, D16, data [operation - STATIC_2_BEGIN]);
|
inset_immediate (1, D16, data [operation - STATIC_2_BEGIN]);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
@ -285,8 +220,6 @@ static unsigned int build_jump_if (unsigned int * array) {
|
|||||||
size = array [1],
|
size = array [1],
|
||||||
location = array [3];
|
location = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s %s rel %u", data_name [array [0]], size_name [array [1]], array [3]);
|
|
||||||
|
|
||||||
inset (far (location) && (size == D32), 0x0f);
|
inset (far (location) && (size == D32), 0x0f);
|
||||||
|
|
||||||
inset (far (location), 0x80 + operation - JUMP_IF_BEGIN);
|
inset (far (location), 0x80 + operation - JUMP_IF_BEGIN);
|
||||||
@ -305,8 +238,6 @@ static unsigned int build_move_if (unsigned int * array) {
|
|||||||
from = array [4],
|
from = array [4],
|
||||||
source = array [5];
|
source = array [5];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u %s %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3], type_name [array [4]], array [5]);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
long_prefix (size, to, destination, from, source);
|
long_prefix (size, to, destination, from, source);
|
||||||
@ -325,8 +256,6 @@ static unsigned int build_set_if (unsigned int * array) {
|
|||||||
to = array [2],
|
to = array [2],
|
||||||
destination = array [3];
|
destination = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s d8 %s %u", data_name [array [0]], type_name [array [2]], array [3]);
|
|
||||||
|
|
||||||
inset ((to == REG) && (front (destination)), 0x40);
|
inset ((to == REG) && (front (destination)), 0x40);
|
||||||
inset ((to == REG) && (upper (destination)), 0x41);
|
inset ((to == REG) && (upper (destination)), 0x41);
|
||||||
|
|
||||||
@ -346,8 +275,6 @@ static unsigned int build_jump (unsigned int * array) {
|
|||||||
to = array [2],
|
to = array [2],
|
||||||
destination = array [3];
|
destination = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3]);
|
|
||||||
|
|
||||||
inset ((to == REG) && upper (destination), 0X41);
|
inset ((to == REG) && upper (destination), 0X41);
|
||||||
|
|
||||||
inset (to == REL, 0xe9 + 0x02 * (size == D8));
|
inset (to == REL, 0xe9 + 0x02 * (size == D8));
|
||||||
@ -370,8 +297,6 @@ static unsigned int build_move (unsigned int * array) {
|
|||||||
source = array [5],
|
source = array [5],
|
||||||
extension = array [6];
|
extension = array [6];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u %s %u %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3], type_name [array [4]], array [5], (size == D64) ? array [6] : 0);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
long_prefix (size, to, destination, from, source);
|
long_prefix (size, to, destination, from, source);
|
||||||
@ -408,8 +333,6 @@ static unsigned int build_call (unsigned int * array) {
|
|||||||
unsigned int from = array [1],
|
unsigned int from = array [1],
|
||||||
source = array [2];
|
source = array [2];
|
||||||
|
|
||||||
debug_printf ("> %s %s %u", data_name [array [0]], type_name [array [1]], array [2]);
|
|
||||||
|
|
||||||
inset ((from == REG) && (upper (source)), 0x41);
|
inset ((from == REG) && (upper (source)), 0x41);
|
||||||
|
|
||||||
inset (from == REL, 0xe8);
|
inset (from == REL, 0xe8);
|
||||||
@ -426,8 +349,6 @@ static unsigned int build_enter (unsigned int * array) {
|
|||||||
unsigned int dynamic_storage = array [1],
|
unsigned int dynamic_storage = array [1],
|
||||||
nesting_level = array [2];
|
nesting_level = array [2];
|
||||||
|
|
||||||
debug_printf ("> %s %u %u", data_name [array [0]], array [1], array [2]);
|
|
||||||
|
|
||||||
inset (1, 0xc8);
|
inset (1, 0xc8);
|
||||||
|
|
||||||
inset_immediate (1, D16, dynamic_storage);
|
inset_immediate (1, D16, dynamic_storage);
|
||||||
@ -442,8 +363,6 @@ static unsigned int build_float (unsigned int * array) {
|
|||||||
from = array [2],
|
from = array [2],
|
||||||
source = array [3];
|
source = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3]);
|
|
||||||
|
|
||||||
inset (from == MEM, 0xd8 + 0x04 * (size == D64));
|
inset (from == MEM, 0xd8 + 0x04 * (size == D64));
|
||||||
|
|
||||||
modify_memory (operation, 0, from);
|
modify_memory (operation, 0, from);
|
||||||
@ -460,8 +379,6 @@ static unsigned int build_shift (unsigned int * array) {
|
|||||||
destination = array [3],
|
destination = array [3],
|
||||||
offset = array [5];
|
offset = array [5];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u imm %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3], array [5]);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
long_prefix (size, to, destination, 0, 0);
|
long_prefix (size, to, destination, 0, 0);
|
||||||
@ -483,8 +400,6 @@ static unsigned int build_in_out (unsigned int * array) {
|
|||||||
type = array [2],
|
type = array [2],
|
||||||
port = array [3];
|
port = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3]);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
inset (1, 0xe4 + 0x01 * (size != D8) + 0x02 * (move != OUT) + 0x08 * (type == REG));
|
inset (1, 0xe4 + 0x01 * (size != D8) + 0x02 * (move != OUT) + 0x08 * (type == REG));
|
||||||
@ -499,8 +414,6 @@ static unsigned int build_pop (unsigned int * array) {
|
|||||||
to = array [2],
|
to = array [2],
|
||||||
destination = array [3];
|
destination = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3]);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
inset ((to == REG) && (upper (destination)), 0x41);
|
inset ((to == REG) && (upper (destination)), 0x41);
|
||||||
@ -519,8 +432,6 @@ static unsigned int build_push (unsigned int * array) {
|
|||||||
from = array [2],
|
from = array [2],
|
||||||
source = array [3];
|
source = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s %s %s %u", data_name [array [0]], size_name [array [1]], type_name [array [2]], array [3]);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
inset ((from == REG) && (upper (source)), 0x41);
|
inset ((from == REG) && (upper (source)), 0x41);
|
||||||
@ -540,8 +451,6 @@ static unsigned int build_swap (unsigned int * array) {
|
|||||||
unsigned int size = array [1],
|
unsigned int size = array [1],
|
||||||
destination = array [3];
|
destination = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s %s reg %u", data_name [array [0]], size_name [array [1]], array [3]);
|
|
||||||
|
|
||||||
long_prefix (size, REG, destination, 0, 0);
|
long_prefix (size, REG, destination, 0, 0);
|
||||||
|
|
||||||
inset (1, 0x0f);
|
inset (1, 0x0f);
|
||||||
@ -556,8 +465,6 @@ static unsigned int build_bit_scan (unsigned int * array) {
|
|||||||
from = array [4],
|
from = array [4],
|
||||||
source = array [5];
|
source = array [5];
|
||||||
|
|
||||||
debug_printf ("> %s %s reg %u %s %u", data_name [array [0]], size_name [array [1]], array [3], type_name [array [4]], array [5]);
|
|
||||||
|
|
||||||
short_prefix (size);
|
short_prefix (size);
|
||||||
|
|
||||||
long_prefix (size, REG, destination, from, source);
|
long_prefix (size, REG, destination, from, source);
|
||||||
@ -576,8 +483,6 @@ static unsigned int build_bit_scan (unsigned int * array) {
|
|||||||
static unsigned int build_loop (unsigned int * array) {
|
static unsigned int build_loop (unsigned int * array) {
|
||||||
unsigned int location = array [3];
|
unsigned int location = array [3];
|
||||||
|
|
||||||
debug_printf ("> %s d8 rel %u", data_name [array [0]], array [3]);
|
|
||||||
|
|
||||||
inset (array [0] == LOOPNE, 0xe0);
|
inset (array [0] == LOOPNE, 0xe0);
|
||||||
inset (array [0] == LOOPE, 0xe1);
|
inset (array [0] == LOOPE, 0xe1);
|
||||||
inset (array [0] == LOOP, 0xe2);
|
inset (array [0] == LOOP, 0xe2);
|
||||||
@ -630,20 +535,7 @@ int assemble (unsigned int count, unsigned int * array) {
|
|||||||
empty_store = calloc (1024UL, sizeof (* empty_store));
|
empty_store = calloc (1024UL, sizeof (* empty_store));
|
||||||
|
|
||||||
for (index = 0; index < count; ++index) {
|
for (index = 0; index < count; ++index) {
|
||||||
unsigned int check_at;
|
|
||||||
unsigned int byte;
|
|
||||||
|
|
||||||
#if DEBUG == 1
|
|
||||||
inset (array [index] > ASMDIRREP, 0x90);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
check_at = text_sector_size;
|
|
||||||
|
|
||||||
index += build_instruction [array [index]] (& array [index]);
|
index += build_instruction [array [index]] (& array [index]);
|
||||||
|
|
||||||
for (byte = check_at; byte < text_sector_size; ++byte) {
|
|
||||||
debug_printf ("%02X ", text_sector_byte [byte]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
text_entry_point = empty_store [0];
|
text_entry_point = empty_store [0];
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
#include "assembler.h"
|
#include "assembler.h"
|
||||||
#include "unix.h"
|
#include "unix.h"
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
@ -45,8 +44,6 @@ void elf_main_header(unsigned char has_program,
|
|||||||
elf_main_header_byte[18] = (for_x86_64) ? 0x3e : 0x00;
|
elf_main_header_byte[18] = (for_x86_64) ? 0x3e : 0x00;
|
||||||
|
|
||||||
memcpy(& elf_main_header_byte[24], & enter, sizeof(enter));
|
memcpy(& elf_main_header_byte[24], & enter, sizeof(enter));
|
||||||
|
|
||||||
debug_printf("UNX -- ELF64 main header\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void elf_text_sector(unsigned long text_size,
|
void elf_text_sector(unsigned long text_size,
|
||||||
@ -55,8 +52,6 @@ void elf_text_sector(unsigned long text_size,
|
|||||||
|
|
||||||
memcpy(& elf_text_sector_byte[32], & text, sizeof(text));
|
memcpy(& elf_text_sector_byte[32], & text, sizeof(text));
|
||||||
memcpy(& elf_text_sector_byte[40], & text, sizeof(text));
|
memcpy(& elf_text_sector_byte[40], & text, sizeof(text));
|
||||||
|
|
||||||
debug_printf("UNX -- ELF64 text sector\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void elf_data_sector(unsigned long text_size,
|
void elf_data_sector(unsigned long text_size,
|
||||||
@ -70,6 +65,4 @@ void elf_data_sector(unsigned long text_size,
|
|||||||
memcpy(& elf_data_sector_byte[24], & move, sizeof(move));
|
memcpy(& elf_data_sector_byte[24], & move, sizeof(move));
|
||||||
memcpy(& elf_data_sector_byte[32], & data, sizeof(data));
|
memcpy(& elf_data_sector_byte[32], & data, sizeof(data));
|
||||||
memcpy(& elf_data_sector_byte[40], & data, sizeof(data));
|
memcpy(& elf_data_sector_byte[40], & data, sizeof(data));
|
||||||
|
|
||||||
debug_printf("UNX -- ELF64 data sector\n");
|
|
||||||
}
|
}
|
||||||
|
@ -1,80 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static char * fa [] = {
|
|
||||||
"add", "or", "adc", "sbb", "and", "sub", "xor", "cmp"
|
|
||||||
};
|
|
||||||
|
|
||||||
static char * faa [] = {
|
|
||||||
"inc", "dec", "not", "neg", "mul", "imul", "div", "idiv"
|
|
||||||
};
|
|
||||||
|
|
||||||
static char * fr [] = {
|
|
||||||
"al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil",
|
|
||||||
"r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b",
|
|
||||||
"ax", "cx", "dx", "bx", "sp", "bp", "si", "di",
|
|
||||||
"r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w",
|
|
||||||
"eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi",
|
|
||||||
"r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d",
|
|
||||||
"rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi",
|
|
||||||
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
|
|
||||||
};
|
|
||||||
|
|
||||||
static char * fm [] = {
|
|
||||||
"byte[b]", "word[w]", "dword[d]", "qword[q]",
|
|
||||||
};
|
|
||||||
|
|
||||||
static char * fi [] = {
|
|
||||||
"11h", "1122h", "11223344h", "11223344h"
|
|
||||||
};
|
|
||||||
|
|
||||||
int main (void) {
|
|
||||||
int a, w, t, d, f, s;
|
|
||||||
|
|
||||||
printf ("format ELF64 executable 3\n");
|
|
||||||
printf ("segment readable executable\n");
|
|
||||||
printf ("entry $\n");
|
|
||||||
printf ("nop\n");
|
|
||||||
printf ("nop\n");
|
|
||||||
printf ("nop\n");
|
|
||||||
|
|
||||||
// INR REG REG
|
|
||||||
for (a = 0; a < (int) (sizeof (fa) / sizeof (* fa)); ++a) {
|
|
||||||
for (w = 0; w < 4; ++w) {
|
|
||||||
for (d = 0; d < 16; ++d) {
|
|
||||||
for (s = 0; s < 16; ++s) {
|
|
||||||
printf ("nop\n");
|
|
||||||
printf ("%s %s, %s\n", fa [a], fr [d + 16 * w], fr [s + 16 * w]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// INR REG IMM
|
|
||||||
for (a = 0; a < (int) (sizeof (fa) / sizeof (* fa)); ++a) {
|
|
||||||
for (d = 0; d < 64; ++d) {
|
|
||||||
printf ("nop\n");
|
|
||||||
printf ("%s %s, %s\n", fa [a], fr [d], fi [d / 16]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// INI REG
|
|
||||||
for (a = 0; a < (int) (sizeof (faa) / sizeof (* faa)); ++a) {
|
|
||||||
for (w = 0; w < 4; ++w) {
|
|
||||||
for (d = 0; d < 16; ++d) {
|
|
||||||
printf ("nop\n");
|
|
||||||
printf ("%s %s\n", faa [a], fr [d + 16 * w]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf ("nop\n");
|
|
||||||
printf ("nop\n");
|
|
||||||
printf ("nop\n");
|
|
||||||
printf ("segment readable writable\n");
|
|
||||||
printf ("b: db 0\n");
|
|
||||||
printf ("w: dw 0\n");
|
|
||||||
printf ("d: dd 0\n");
|
|
||||||
printf ("q: dq 0\n");
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
format ELF64 executable 3
|
|
||||||
|
|
||||||
segment readable executable
|
|
||||||
|
|
||||||
entry $
|
|
||||||
|
|
||||||
nop
|
|
||||||
mov eax, 1
|
|
||||||
nop
|
|
||||||
mov edi, 1
|
|
||||||
nop
|
|
||||||
mov esi, heyo
|
|
||||||
nop
|
|
||||||
mov edx, 12
|
|
||||||
nop
|
|
||||||
syscall
|
|
||||||
nop
|
|
||||||
mov eax, 60
|
|
||||||
nop
|
|
||||||
mov edi, 60
|
|
||||||
nop
|
|
||||||
syscall
|
|
||||||
|
|
||||||
segment readable writable
|
|
||||||
|
|
||||||
heyo: db "Heyo world!", 10
|
|
@ -1,72 +0,0 @@
|
|||||||
format ELF64
|
|
||||||
|
|
||||||
public _start
|
|
||||||
|
|
||||||
section '.text' executable
|
|
||||||
|
|
||||||
_start:
|
|
||||||
|
|
||||||
fff:
|
|
||||||
nop
|
|
||||||
mov eax, 1
|
|
||||||
nop
|
|
||||||
mov edi, 1
|
|
||||||
nop
|
|
||||||
mov esi, heyo
|
|
||||||
nop
|
|
||||||
mov edx, 12
|
|
||||||
nop
|
|
||||||
syscall
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
mov rax, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov rcx, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov rdx, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov rbx, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov rsp, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov rbp, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov rsi, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov rdi, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov r8, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov r9, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov r10, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov r11, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov r12, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov r13, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov r14, 1122334455667788h
|
|
||||||
nop
|
|
||||||
mov r15, 1122334455667788h
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
mov eax, 60
|
|
||||||
nop
|
|
||||||
mov edi, 0
|
|
||||||
nop
|
|
||||||
syscall
|
|
||||||
nop
|
|
||||||
jmp fff
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
section '.data' writable
|
|
||||||
|
|
||||||
heyo: db "heyo world!", 10
|
|
9216
tool/include.txt
9216
tool/include.txt
File diff suppressed because it is too large
Load Diff
@ -1,18 +0,0 @@
|
|||||||
; @BAKE fasm $@ $*.out
|
|
||||||
format ELF64 executable 3
|
|
||||||
|
|
||||||
segment readable executable
|
|
||||||
|
|
||||||
entry $
|
|
||||||
|
|
||||||
redo:
|
|
||||||
mov eax, 1
|
|
||||||
mov edi, 1
|
|
||||||
mov esi, heyo
|
|
||||||
mov edx, 4
|
|
||||||
syscall
|
|
||||||
jmp redo
|
|
||||||
|
|
||||||
segment readable writable
|
|
||||||
|
|
||||||
heyo: db "heyo", 4
|
|
@ -1,17 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -xe
|
|
||||||
|
|
||||||
gcc -o flatten flatten.c
|
|
||||||
gcc -o xlatten xlatten.c
|
|
||||||
|
|
||||||
./flatten > flatten.asm
|
|
||||||
./xlatten > include.txt
|
|
||||||
|
|
||||||
fasm flatten.asm flatten.exe
|
|
||||||
./nop flatten.exe > flatten.txt
|
|
||||||
|
|
||||||
gcc -o test test.c
|
|
||||||
./test > xlatten.txt
|
|
||||||
|
|
||||||
exit
|
|
@ -1,27 +0,0 @@
|
|||||||
format ELF64 executable 3
|
|
||||||
|
|
||||||
; fasm multiply.asm multiply
|
|
||||||
; chmod +x multiply
|
|
||||||
; ./multiply
|
|
||||||
; echo $?
|
|
||||||
; > 24
|
|
||||||
|
|
||||||
segment readable executable
|
|
||||||
|
|
||||||
entry $
|
|
||||||
|
|
||||||
mov eax, [a]
|
|
||||||
mov ecx, [b]
|
|
||||||
mul ecx
|
|
||||||
mov [c], eax
|
|
||||||
|
|
||||||
; exit (c);
|
|
||||||
mov eax, 60
|
|
||||||
mov edi, [c]
|
|
||||||
syscall
|
|
||||||
|
|
||||||
segment readable writable
|
|
||||||
|
|
||||||
a: dd 4
|
|
||||||
b: dd 6
|
|
||||||
c: dd 0; Expecting 24.
|
|
39
tool/nop.c
39
tool/nop.c
@ -1,39 +0,0 @@
|
|||||||
#include <xolatile/xtandard.c>
|
|
||||||
|
|
||||||
int main (int argc, char * * argv) {
|
|
||||||
int file = -1;
|
|
||||||
int size = 0;
|
|
||||||
int offset = 0;
|
|
||||||
|
|
||||||
unsigned char * buffer = NULL;
|
|
||||||
|
|
||||||
file = file_open (argv [1], O_RDONLY);
|
|
||||||
size = file_size (argv [1]);
|
|
||||||
|
|
||||||
buffer = allocate (size);
|
|
||||||
|
|
||||||
file_read (file, buffer, size);
|
|
||||||
|
|
||||||
file = file_close (file);
|
|
||||||
|
|
||||||
offset = 64 + 2 * 56 + 3;
|
|
||||||
|
|
||||||
do {
|
|
||||||
int byte = (int) buffer [offset];
|
|
||||||
|
|
||||||
if (byte == 0X90) {
|
|
||||||
echo ("\n");
|
|
||||||
echo_byte ((int) buffer [offset]);
|
|
||||||
} else {
|
|
||||||
echo_byte (buffer [offset]);
|
|
||||||
}
|
|
||||||
|
|
||||||
++offset;
|
|
||||||
} while (offset != size);
|
|
||||||
|
|
||||||
echo ("\n");
|
|
||||||
|
|
||||||
buffer = deallocate (buffer);
|
|
||||||
|
|
||||||
return (EXIT_SUCCESS);
|
|
||||||
}
|
|
@ -1,6 +1,4 @@
|
|||||||
/* Ignore this file, it's for my autistic way of testing. -- xolatile */
|
#include <xolatile/xtandard.h>
|
||||||
|
|
||||||
#include <xolatile/xtandard.c>
|
|
||||||
|
|
||||||
int main (int argc, char * * argv) {
|
int main (int argc, char * * argv) {
|
||||||
int file, i;
|
int file, i;
|
||||||
|
223
tool/test.asm
223
tool/test.asm
@ -1,223 +0,0 @@
|
|||||||
format ELF64 executable 3
|
|
||||||
|
|
||||||
segment readable executable
|
|
||||||
|
|
||||||
entry $
|
|
||||||
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
fff:
|
|
||||||
|
|
||||||
nop
|
|
||||||
add rcx, r9
|
|
||||||
nop
|
|
||||||
add rcx, [x8]
|
|
||||||
nop
|
|
||||||
add rcx, 11223344h
|
|
||||||
nop
|
|
||||||
add [x8], rcx
|
|
||||||
nop
|
|
||||||
add qword[x8], 11223344h
|
|
||||||
nop
|
|
||||||
or ecx, r9d
|
|
||||||
nop
|
|
||||||
or ecx, [x4]
|
|
||||||
nop
|
|
||||||
or ecx, 11223344h
|
|
||||||
nop
|
|
||||||
or [x4], ecx
|
|
||||||
nop
|
|
||||||
or dword[x4], 11223344h
|
|
||||||
nop
|
|
||||||
adc cx, r9w
|
|
||||||
nop
|
|
||||||
adc cx, [x2]
|
|
||||||
nop
|
|
||||||
adc cx, 1122h
|
|
||||||
nop
|
|
||||||
adc [x2], cx
|
|
||||||
nop
|
|
||||||
adc word[x2], 1122h
|
|
||||||
nop
|
|
||||||
sbb cl, r9b
|
|
||||||
nop
|
|
||||||
sbb cl, [x1]
|
|
||||||
nop
|
|
||||||
sbb cl, 11h
|
|
||||||
nop
|
|
||||||
sbb [x1], cl
|
|
||||||
nop
|
|
||||||
sbb byte[x1], 11h
|
|
||||||
nop
|
|
||||||
and rcx, r9
|
|
||||||
nop
|
|
||||||
and rcx, [x8]
|
|
||||||
nop
|
|
||||||
and rcx, 11223344h
|
|
||||||
nop
|
|
||||||
and [x8], rcx
|
|
||||||
nop
|
|
||||||
and qword[x8], 11223344h
|
|
||||||
nop
|
|
||||||
sub ecx, r9d
|
|
||||||
nop
|
|
||||||
sub ecx, [x4]
|
|
||||||
nop
|
|
||||||
sub ecx, 11223344h
|
|
||||||
nop
|
|
||||||
sub [x4], ecx
|
|
||||||
nop
|
|
||||||
sub dword[x4], 11223344h
|
|
||||||
nop
|
|
||||||
xor cx, r9w
|
|
||||||
nop
|
|
||||||
xor cx, [x2]
|
|
||||||
nop
|
|
||||||
xor cx, 1122h
|
|
||||||
nop
|
|
||||||
xor [x2], cx
|
|
||||||
nop
|
|
||||||
xor word[x2], 1122h
|
|
||||||
nop
|
|
||||||
cmp cl, r9b
|
|
||||||
nop
|
|
||||||
cmp cl, [x1]
|
|
||||||
nop
|
|
||||||
cmp cl, 11h
|
|
||||||
nop
|
|
||||||
cmp [x1], cl
|
|
||||||
nop
|
|
||||||
cmp byte[x1], 11h
|
|
||||||
nop
|
|
||||||
inc rcx
|
|
||||||
nop
|
|
||||||
inc qword[x8]
|
|
||||||
nop
|
|
||||||
inc ecx
|
|
||||||
nop
|
|
||||||
inc dword[x4]
|
|
||||||
nop
|
|
||||||
inc cx
|
|
||||||
nop
|
|
||||||
inc word[x2]
|
|
||||||
nop
|
|
||||||
inc cl
|
|
||||||
nop
|
|
||||||
inc byte[x1]
|
|
||||||
nop
|
|
||||||
div r9
|
|
||||||
nop
|
|
||||||
div qword[x8]
|
|
||||||
nop
|
|
||||||
div r9d
|
|
||||||
nop
|
|
||||||
div dword[x4]
|
|
||||||
nop
|
|
||||||
div r9w
|
|
||||||
nop
|
|
||||||
div word[x2]
|
|
||||||
nop
|
|
||||||
div r9b
|
|
||||||
nop
|
|
||||||
div byte[x1]
|
|
||||||
nop
|
|
||||||
ret
|
|
||||||
nop
|
|
||||||
leave
|
|
||||||
nop
|
|
||||||
lock
|
|
||||||
nop
|
|
||||||
hlt
|
|
||||||
nop
|
|
||||||
sysenter
|
|
||||||
nop
|
|
||||||
sysexit
|
|
||||||
nop
|
|
||||||
syscall
|
|
||||||
nop
|
|
||||||
sysret
|
|
||||||
nop
|
|
||||||
pause
|
|
||||||
nop
|
|
||||||
cpuid
|
|
||||||
nop
|
|
||||||
jo fff
|
|
||||||
nop
|
|
||||||
jno fff
|
|
||||||
nop
|
|
||||||
jb fff
|
|
||||||
nop
|
|
||||||
jae fff
|
|
||||||
nop
|
|
||||||
je fff
|
|
||||||
nop
|
|
||||||
jne fff
|
|
||||||
nop
|
|
||||||
jbe fff
|
|
||||||
nop
|
|
||||||
ja fff
|
|
||||||
nop
|
|
||||||
js fff
|
|
||||||
nop
|
|
||||||
jns fff
|
|
||||||
nop
|
|
||||||
jpe fff
|
|
||||||
nop
|
|
||||||
jpo fff
|
|
||||||
nop
|
|
||||||
jl fff
|
|
||||||
nop
|
|
||||||
jge fff
|
|
||||||
nop
|
|
||||||
jle fff
|
|
||||||
nop
|
|
||||||
jg fff
|
|
||||||
nop
|
|
||||||
cmovo rax, rcx
|
|
||||||
nop
|
|
||||||
cmovno rax, rcx
|
|
||||||
nop
|
|
||||||
cmovb rax, rcx
|
|
||||||
nop
|
|
||||||
cmovae rax, rcx
|
|
||||||
nop
|
|
||||||
cmove rax, rcx
|
|
||||||
nop
|
|
||||||
cmovne rax, rcx
|
|
||||||
nop
|
|
||||||
cmovbe rax, rcx
|
|
||||||
nop
|
|
||||||
cmova rax, rcx
|
|
||||||
nop
|
|
||||||
cmovs rax, rcx
|
|
||||||
nop
|
|
||||||
cmovns rax, rcx
|
|
||||||
nop
|
|
||||||
cmovpe rax, rcx
|
|
||||||
nop
|
|
||||||
cmovpo rax, rcx
|
|
||||||
nop
|
|
||||||
cmovl rax, rcx
|
|
||||||
nop
|
|
||||||
cmovge rax, rcx
|
|
||||||
nop
|
|
||||||
cmovle rax, rcx
|
|
||||||
nop
|
|
||||||
cmovg rax, rcx
|
|
||||||
;~;mov
|
|
||||||
;~;jmp
|
|
||||||
|
|
||||||
nop
|
|
||||||
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
nop
|
|
||||||
|
|
||||||
segment readable writable
|
|
||||||
|
|
||||||
x1: db 011h
|
|
||||||
x2: dw 01122h
|
|
||||||
x4: dd 011223344h
|
|
||||||
x8: dq 01122334455667788h
|
|
25
tool/test.c
25
tool/test.c
@ -1,25 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "../source/assembler.h"
|
|
||||||
#include "../source/assembler.c"
|
|
||||||
|
|
||||||
static unsigned int array [] = {
|
|
||||||
#include "include.txt"
|
|
||||||
};
|
|
||||||
|
|
||||||
int main (void) {
|
|
||||||
unsigned int index;
|
|
||||||
|
|
||||||
text_sector_byte = malloc (1024UL * 1024UL * sizeof (* text_sector_byte));
|
|
||||||
|
|
||||||
assemble ((unsigned int) (sizeof (array) / sizeof (array [0])), array);
|
|
||||||
|
|
||||||
for (index = 0; index < text_sector_size; ++index) {
|
|
||||||
printf ("%c%02X", (text_sector_byte [index] == 0x90) ? '\n' : ' ', text_sector_byte [index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
free (text_sector_byte);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
10
tool/test.sh
10
tool/test.sh
@ -1,10 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -xe
|
|
||||||
|
|
||||||
#~diff -y -W 40 --ignore-trailing-space --ignore-blank-lines --suppress-common-lines --color=always flatten.txt xlatten.txt
|
|
||||||
#~diff -y -W 40 --ignore-trailing-space --ignore-blank-lines --color=always flatten.txt xlatten.txt
|
|
||||||
#~diff -y flatten.txt xlatten.txt
|
|
||||||
diff flatten.txt xlatten.txt
|
|
||||||
|
|
||||||
exit
|
|
@ -1,68 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "../source/assembler.h"
|
|
||||||
#include "../source/assembler.c"
|
|
||||||
#include "../source/unix.h"
|
|
||||||
#include "../source/unix.c"
|
|
||||||
|
|
||||||
static unsigned int array [] = {
|
|
||||||
NOP, MOV, D32, REG, R0, IMM, 1,
|
|
||||||
NOP, MOV, D32, REG, R7, IMM, 1,
|
|
||||||
NOP, MOV, D32, REG, R6, REL, 0,
|
|
||||||
NOP, MOV, D32, REG, R2, IMM, 12,
|
|
||||||
NOP, SYSCALL,
|
|
||||||
NOP, MOV, D32, REG, R0, IMM, 1,
|
|
||||||
NOP, MOV, D32, REG, R7, IMM, 1,
|
|
||||||
NOP, MOV, D32, REG, R6, REL, 1,
|
|
||||||
NOP, MOV, D32, REG, R2, IMM, 20,
|
|
||||||
NOP, SYSCALL,
|
|
||||||
NOP, CALL, REL, 3,
|
|
||||||
NOP, MOV, D32, REG, R0, IMM, 1,
|
|
||||||
NOP, MOV, D32, REG, R7, IMM, 1,
|
|
||||||
NOP, MOV, D32, REG, R6, REL, 2,
|
|
||||||
NOP, MOV, D32, REG, R2, IMM, 12,
|
|
||||||
NOP, SYSCALL,
|
|
||||||
NOP, MOV, D32, REG, R0, IMM, 60,
|
|
||||||
NOP, MOV, D32, REG, R7, IMM, 60,
|
|
||||||
NOP, SYSCALL,
|
|
||||||
ASMDIRMEM, 3,
|
|
||||||
NOP, MOV, D32, REG, R0, IMM, 1,
|
|
||||||
NOP, MOV, D32, REG, R7, IMM, 1,
|
|
||||||
NOP, MOV, D32, REG, R6, REL, 0,
|
|
||||||
NOP, MOV, D32, REG, R2, IMM, 12,
|
|
||||||
NOP, SYSCALL,
|
|
||||||
NOP, RETN,
|
|
||||||
NOP,
|
|
||||||
ASMDIRMEM, 0,
|
|
||||||
ASMDIRIMM, D8, 12, 72, 101, 121, 111, 32, 119, 111, 114, 108, 100, 33, 10,
|
|
||||||
ASMDIRMEM, 1,
|
|
||||||
ASMDIRIMM, D8, 20, 67, 121, 97, 97, 32, 102, 117, 99, 107, 105, 110,
|
|
||||||
103, 32, 119, 111, 114, 108, 100, 33, 10,
|
|
||||||
ASMDIRMEM, 2,
|
|
||||||
ASMDIRIMM, D8, 12, 77, 101, 109, 101, 32, 119, 111, 114, 108, 100, 33, 10
|
|
||||||
};
|
|
||||||
|
|
||||||
int main (void) {
|
|
||||||
FILE * file = NULL;
|
|
||||||
|
|
||||||
file = fopen ("run_me_please", "w+");
|
|
||||||
|
|
||||||
assemble ((unsigned int) (sizeof (array) / sizeof (array [0])), array);
|
|
||||||
|
|
||||||
elf_main_header (1, 1, 1, 0);
|
|
||||||
elf_text_sector (text_sector_size);
|
|
||||||
elf_data_sector (text_sector_size, 36+8);
|
|
||||||
|
|
||||||
fwrite (elf_main_header_byte, 1UL, ELF_MAIN_HEADER_SIZE, file);
|
|
||||||
fwrite (elf_text_sector_byte, 1UL, ELF_TEXT_SECTOR_SIZE, file);
|
|
||||||
fwrite (elf_data_sector_byte, 1UL, ELF_DATA_SECTOR_SIZE, file);
|
|
||||||
|
|
||||||
printf ("> %u\n", (unsigned int) (sizeof (array) / sizeof (array [0])));
|
|
||||||
|
|
||||||
fwrite (text_sector_byte, 1UL, (size_t) text_sector_size, file);
|
|
||||||
|
|
||||||
fclose (file);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
18
tool/xfat.c
18
tool/xfat.c
@ -1,21 +1,21 @@
|
|||||||
/* Ignore this file, it's for my autistic way of testing. -- xolatile */
|
#include <xolatile/xtandard.h>
|
||||||
|
|
||||||
#include <xolatile/xtandard.c>
|
#define header \
|
||||||
|
"#include <stdio.h>\n" \
|
||||||
#define header \
|
"#include <stdlib.h>\n" \
|
||||||
"#include <stdio.h>\n" \
|
"#include \"/home/xolatile/Git/eaxcc/source/assembler.h\"\n" /* LNAO L: */ \
|
||||||
"#include <stdlib.h>\n" \
|
"#include \"/home/xolatile/Git/eaxcc/source/assembler.c\"\n" /* LNAO L: */ \
|
||||||
"#include \"../source/assembler.h\"\n" \
|
|
||||||
"#include \"../source/assembler.c\"\n" \
|
|
||||||
"static unsigned int array [] = { "
|
"static unsigned int array [] = { "
|
||||||
|
|
||||||
#define footer \
|
#define footer \
|
||||||
"};\n" \
|
"};\n" \
|
||||||
"int main (void) {\n" \
|
"int main (void) {\n" \
|
||||||
" unsigned int index;\n" \
|
" unsigned int index;\n" \
|
||||||
|
" text_sector_byte = calloc (1024ul, 1ul);\n" \
|
||||||
" assemble ((unsigned int) (sizeof (array) / sizeof (array [0])), array);\n" \
|
" assemble ((unsigned int) (sizeof (array) / sizeof (array [0])), array);\n" \
|
||||||
" for (index = 0; index < text_sector_size; ++index)\n" \
|
" for (index = 0; index < text_sector_size; ++index)\n" \
|
||||||
" printf (\"%02X \", text_sector_byte [index]);\n" \
|
" printf (\"%02X \", text_sector_byte [index]);\n" \
|
||||||
|
" free (text_sector_byte);\n" \
|
||||||
" return (0);\n" \
|
" return (0);\n" \
|
||||||
"}\n"
|
"}\n"
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ int main (int argc, char * * argv) {
|
|||||||
|
|
||||||
file = file_close (file);
|
file = file_close (file);
|
||||||
|
|
||||||
execute ("gcc x.c && ./a.out && echo -- && rm a.out x.c");
|
execute ("gcc -g x.c && ./a.out && echo -- && rm a.out x.c");
|
||||||
|
|
||||||
return (log_success);
|
return (log_success);
|
||||||
}
|
}
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
static char * fw [] = {
|
|
||||||
"D8", "D16", "D32", "D64"
|
|
||||||
};
|
|
||||||
|
|
||||||
static char * fa [] = {
|
|
||||||
"ADD", "OR", "ADC", "SBB", "AND", "SUB", "XOR", "CMP"
|
|
||||||
};
|
|
||||||
|
|
||||||
static char * faa [] = {
|
|
||||||
"INC", "DEC", "NOT", "NEG", "UMUL", "IMUL", "UDIV", "IDIV"
|
|
||||||
};
|
|
||||||
|
|
||||||
static char * fr [] = {
|
|
||||||
"REG, R0", "REG, R1", "REG, R2", "REG, R3", "REG, R4", "REG, R5", "REG, R6", "REG, R7",
|
|
||||||
"REG, R8", "REG, R9", "REG, R10", "REG, R11", "REG, R12", "REG, R13", "REG, R14", "REG, R15"
|
|
||||||
};
|
|
||||||
|
|
||||||
static char * fi [] = {
|
|
||||||
"IMM, 0x11", "IMM, 0x1122", "IMM, 0x11223344", "IMM, 0x11223344"
|
|
||||||
};
|
|
||||||
|
|
||||||
int main (void) {
|
|
||||||
int a, w, t, d, f, s;
|
|
||||||
|
|
||||||
for (a = 0; a < (int) (sizeof (fa) / sizeof (* fa)); ++a) {
|
|
||||||
for (w = 0; w < 4; ++w) {
|
|
||||||
for (d = 0; d < 16; ++d) {
|
|
||||||
for (s = 0; s < 16; ++s) {
|
|
||||||
printf ("NOP, %s, %s, %s, %s,\n", fa [a], fw [w], fr [d], fr [s]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (a = 0; a < (int) (sizeof (fa) / sizeof (* fa)); ++a) {
|
|
||||||
for (w = 0; w < 4; ++w) {
|
|
||||||
for (d = 0; d < 16; ++d) {
|
|
||||||
printf ("NOP, %s, %s, %s, %s,\n", fa [a], fw [w], fr [d], fi [w]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (a = 0; a < (int) (sizeof (faa) / sizeof (* faa)); ++a) {
|
|
||||||
for (w = 0; w < 4; ++w) {
|
|
||||||
for (d = 0; d < 16; ++d) {
|
|
||||||
printf ("NOP, %s, %s, %s,\n", faa [a], fw [w], fr [d]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
Reference in New Issue
Block a user