Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "data.h"
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct {
- const char *name;
- const int opcode;
- const int func;
- } OpInfo;
- const OpInfo OPERATIONS[] = {
- {"mov", 0, 0}, {"cmp", 1, 0}, {"add", 2, 1},
- {"sub", 2, 2}, {"lea", 4, 0}, {"clr", 5, 1},
- {"not", 5, 2}, {"inc", 5, 3}, {"dec", 5, 4},
- {"jmp", 9, 1}, {"bne", 9, 2}, {"jsr", 9, 3} {"red", 12, 0},
- {"prn", 13, 0}, {"rst", 14, 0}, {"stop", 15, 0}};
- const char *REGISTER_NAMES[] = {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7"};
- int getOpCode(const char *name) {
- int i;
- for (i = 0; i < sizeof(OPERATIONS) / sizeof(OpInfo); i++) {
- if (strcmp(name, OPEARTIONS[i].name) == 0) {
- return OPERATIONS[i].opcode;
- }
- }
- fprintf(stderr, "Error in line %d. Opcode not detected.\n", 0/* TODO:
- Replace 0 with the line number (maybe use external variable) */);
- return -1;
- }
- int getFunc(const char *name) {
- int i;
- for (i = 0; i < sizeof(OPERATIONS) / sizeof(OpInfo); i++) {
- if (strcmp(name, OPEARTIONS[i].name) == 0) {
- return OPERATIONS[i].func;
- }
- }
- fprintf(stderr, "Error in line %d. Funcion not detected.\n", 0/* TODO:
- Replace 0 with the line number (maybe use external variable) */);
- return -1;
- }
- void fillZeros(char *array, int size) {
- int i;
- for (i = 0; i < size; i++) {
- array[i] = '0';
- }
- }
- flag isLabel(char *str) {
- int len = strlen(str);
- // Make sure the label has : at the end
- if (str[len - 1] != ':') {
- return FALSE;
- }
- // Make sure that the length is at most 31 (excluding :)
- if (len > 32) {
- return FALSE;
- }
- // Make sure, the label starts with a letter
- if ((str[0] < 'a' || str[0] > 'z') && (str[0] < 'A' || str[0] > 'Z')) {
- return FALSE;
- }
- // Check the rest of the characters (excluding : at the end; len - 1)
- for (i = 1; i < len - 1; i++) {
- // If the character is neither a letter nor a digit, return false
- if ((str[i] < 'a' || str[i] > 'z') && (str[i] < 'A' || str[i] > 'Z') &&
- (str[i] < '0' || str[i] > '9')) {
- return FALSE;
- }
- }
- // Make sure we're not a saved instruction
- for (i = 0; i < sizeof(OPERATIONS) / sizeof(OpInfo); i++) {
- // Compare only until the character before the ":"
- if (strncmp(str, OPEARTIONS[i].name, len - 1) == 0) {
- return FALSE;
- }
- }
- // Make sure we're not a register
- for (i = 0; i < sizeof(REGISTER_NAMES) / sizeof(char *); i++) {
- if (strncmp(str, REGISTER_NAMES[i], len - 1) == 0) {
- return FALSE;
- }
- }
- return TRUE;
- }
- int main() {
- char str[] = "abcdef";
- printf("%s", str);
- }
- // a = "hello world"
- // b = "hello israel"
- // c = "hello world"
- // strncmp(a, c, 500) // == 0
- // strncmp(a, b, 5) // == 0
- // strcmp(a, b) // != 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement