Stuck? Need help? Ask questions on our forums.
*/
*/

View ezasm\optable.cpp

Ezasm for linux 1.0

Submitted By: acvivek
Rating: Not rated (Rate It)


#include<stdio.h>
#include <string.h>
extern int line_count;
extern int err_count;
char *optb(char x[30],char y[30],char z[30])
{
  char mnem[200][20]={
  "aaa","aad","aam","aas","add","add","add","add","add","adc","adc",
  "adc","adc","adc","and","and","and","and","and","call","call",
  "call","call","cbw","cmp","cmp","cmp","cmp","cmp","clc","cld","cmpsb",
  "cwd","cli","daa","das","dec","dec","div","div","idiv","idiv",
  "imul","imul","int","inc","inc",
  "in","in","iret","lea","jne","jnz","je","jz","jl","jnge","ja",
  "jnbe","jb","jnae","jbe","jna","jo","jp","jpe","jmp","jmp","jmp","jmp","jmp","js",
  "jnb","jae","jns","jcxz","jle","jng","jnp","jpo","jno","jnle","jg","jnl","jge",
  "lds","lds","les","les","lahf","lock","loop","loopz","loope","loopne","loopnz","mov",
  "mov","mov","mov","mov","mov","mov","mov","mov","movs",
  "mul","mul","neg","neg","not","not","or","or","or","or","or","out","out",
  "popf","pushf","push","push","push","pop","pop","pop","rep",
  "ret","ret","ret","ret","rcl",
  "rcr","rol","ror","sahf","sar","shl","shr",
  "scas","sub","sub","sub","sub","sub","sbb","sbb","sbb","sbb","sbb",
  "sti","std","test","test",
  "test","test","test","wait","xlat","xor","xor","xor","xor","xor","xchg","xchg","xchg"};


char opcode[200][20]=
{ "00110111","1101010100001010","1101010000001010","00111111",/*add*/
"000000dwmoregrim","000000dwmoregrim","000000dwmoregrim","1000000wmo000rim","1000000wmo000rim",
/*adc*/"000100dwmoregrim","000100dwmoregrim","000100dwmoregrim","1000000wmo010rim",
"1000000wmo010rim",/*and*/"001000dwmoregrim","001000dwmoregrim","001000dwmoregrim",
"1000000wmo100rim","1000000wmo100rim",/*call*/"11101000","?","?","?",
/*cbw*/"10011000",/*cmp*/"001110dwmoregrim","001110dwmoregrim","001110dwmoregrim","1000000wmo111rim",
"1000000wmo111rim",/*clc*/"11111000",/*cld*/"11111100",/*cmpsb*/"10100110",
/*cwd*/"10011001",/*cli*/"11111010","00100111","00101111",/*dec*/
"1111111wmo001rim","01001reg",/*div*/"1111011wmo110rim","1111011wmol110rim",
/*idiv*/"1111011wmo111rim","1111011wmo111rim",/*imul*/"1111011wmo101rim",
"1111011wmo101rim",/*int*/"11001101",/*inc*/"11111111wmo000rim",
"01000reg",/*in*/"11101100","11101101",/*iret*/"11001111",/*lea*/"10001101moregrim",
/*jne*/"01110101",/*jnz*/"01110101",/*je*/"01110100",/*jz*/"01110100",/*jl*/"01111100",
/*jnge*/"011111100",/*ja*/"01110111",/*jnbe*/"01110111",/*jb*/"01110010",/*jnae*/"01110010",/*jbe*/"01110110",
/*jna*/"01110110",/*jo*/"01110000",/*jp*/"01111010",/*jpe*/"01111010",/*jmp*/"11101011","11101011",
"11111111","11101010","11111111",/*js*/"01111000",/*jnb*/"01110011",/*jae*/"01110011",
/*jns*/"01111001",/*jcxz*/"11100011",/*jle*/"01111110",/*jng*/"01111110",/*jnp*/"01111011",/*jpo*/"01111011",/*jno*/"01110001",
/*jnle*/"01111111",/*jg*/"01111111",/*jnl*/"01111101",/*jge*/"01111101",/*lds*/"11000101moregrim","11000101moregrim",
/*les*/"11000100moregrim","11000100moregrim",/*lahf*/"10011111",/*lock*/"11110000",
/*loop*/"11100010",/*loopz*/"11100001",/*loope*/"11100001",/*loopne*/"11100000",/*loopnz*/"11100000",
/*mov*/"100010dwmoregrim","100010dwmoregrim","100010dwmoregrim","1100011wmo000rim",
"1011wreg","10001110mo0sgrim","10001110mo0sgrim","10001100mo0sgrim","10001100mo0sgrim",
/*movs*/"1010010w",
/*mul*/"1111011wmo100rim","1111011wmo100rim",/*neg*/"1111011wmo011rim","1111011wmo011rim",
/*not*/"1111011wmo010rim","1111011wmo010rim",/*or*/"000010dwmoregrim","000010dwmoregrim",
"000010dwmoregrim","1000000wmo001rim","1000000wmo001rim",
/*out*/"11101110","11101111",/*popf*/"100111101",/*pushf*/"10011100",/*push*/"11111111mo110rim",
"01010reg","000sg110",/*pop*/"10001111mo000rim",
"01011reg","000sg111",/*rep*/"1111001z",/*ret*/"11000011","11000010",
"11001011","11001010",/*rcl*/"1101001wmo010rim",
/*rcr*/"1101001wmo011rim",/*rol*/"1101001wmo000rim",
/*ror*/"1101001wmo001rim",/*sahf*/"10011110",/*sar*/"1101001wmo111rim",
/*shl*/"1101001wmo100rim",/*shr*/"1101001wmo101rim",
/*scas*/"1010111w",/*sub*/"001010dwmoregrim","001010dwmoregrim","001010dwmoregrim",
"1000000wmoregrim","1000000wmoregrim",/*sbb*/"000110dwmoregrim",
"000110dwmoregrim","000110dwmoregrim","1000000wmoregrim","1000000wmoregrim",
/*sti*/"11111011",/*std*/"11111101",/*test*/"1000010wmoregrim","1000010wmoregrim","1000010wmoregrim",
"1111011wmo000rim","1111011wmo000rim",
/*wait*/"10011011",/*xlat*/"11010111",/*xor*/"001100dwmoregrim","001100dwmoregrim","001100dwmoregrim",
"1000000wmoregrim","1000000wmoregrim",/*xchg*/"1000011wmoregrim","1000011wmoregrim","1000011wmoregrim"};



 char ops[200][10]=
 {"n","n","n","n",/*add*/"r","m","r","i","i",/*adc*/"r","m","r","i","i",/*and
 */
"r","m",
 "r","i","i",/*call*/"n","n","n","n",/*cbw*/"n",/*cmp*/"r","m","r","i","i",/*clc*/"n",
 "n","n","n","n","n",
 "n",/*dec*/"n","n",/*div*/"n","n","n","n",/*imul*/"n","n",/*int*/"n",/*inc*/"n","n",/*in*/"dx"
 ,"dx",/*iret*/"n",/*lea*/"m",/*jne*/"n",/*jnz*/"n",/*je*/"n",/*jz*/"n",/*jl*/"n",/*jnge*/"n",/*ja*/"n",/*jnbe*/"n",/*jb*/"n",/*jnae*/"n",
/*jbe*/ "n",/*jna*/"n",/*jo*/"n",/*jp*/"n",/*jpe*/"n",/*jmp*/"n","n","n","n","n",/*js*/"n",/*jnb*/"n",/*jae*/"n",/*jns*/"n",/*jcxz*/"n",/*jle*/"n",/*jng*/"n",/*jnp*/"n",/*jpo*/"n",
 /*jno*/"n",/*jnle*/"n",/*jg*/"n",/*Jnl*/"n",/*jge*/"n",/*lds*/"i","m",/*les*/"i","m",/*lahf*/"n",/*lock*/"n",/*loop*/"n",/*loopz*/"n",/*loope*/"n",/*loopne*/"n",/*loopnz*/"n",

 /*mov*/"r","m","r","i","i","r","m","s","s",/*movs*/"n",/*mul*/"n","n",
 /*neg*/"n","n",/*nOT*/"n","n",/*or*/"r","m","r","i","i",/*out*/"al","ax",
 /*popf*/"n",/*pushf*/"n",/*push*/"n","n","n",/*pop*/"n","n","n",/*rep*/"?",/*ret*/"n","n",
 "n","n",/*rcl*/"cl",/*rcr*/"cl",/*rol*/"cl",/*ror*/"cl",/*sahf*/"n",/*sar*/"cl",/*shl*/"cl",/*shr*/"cl",
 /*scas*/"n",/*sUB*/"r","m","r","i","i",
 /*sbb*/"r","m","r","i","i",/*sti*/"n",/*std*/"n",/*test*/"r","m","r","i","i",/*wait*/"n",/*xlat*/"n",
 /*xor*/"r","m","r","i","i",/*xchg*/"r","m","r"};





 char opd[200][10]=
 {"n","n","n","n",/*add*/"r","r","m","m","r",/*adc*/"r","r","m","m","r",
 /*and*/"r","r","m","m","r",/*call*/"m","m","m","m",/*cbw*/"n",/*cmp*/"r","r","m",
 "m","r",/*clc*/"n","n","n","n","n","n","n",/*dec*/"m","r","m","r",
 "r","m",/*imUl*/"r","m",/*int*/"i",/*inc*/"m","r",/*in*/"al","ax",/*iret*/"n", /*lea*/"r",
 /*jne*/"m",/*jnz*/"m",/*je*/"m",/*jz*/"m",/*jl*/"m",/*jnge*/"m",/*ja*/"m",/*jnbe*/"m",/*jb*/"m",/*jnae*/"m",/*jbe*/"m",/*jna*/"m",/*jo*/"m",/*jp*/"m",/*jpe*/"m",/*jmp*/"m","m",
 "m","m","m",/*js*/"m",/*jnb*/"m",/*jae*/"m",/*jns*/"m",/*jcxz*/"m",/*jle*/"m",/*jng*/"m",/*jnp*/"m",/*jpo*/"m",/*jno*/"m",/*jnle*/"m",/*jg*/"m",/*jnl*/"m",/*jge*/"m",/*lds*/"ds","ds",/*les*/"es","es",
 /*lahf*/"n",/*lock*/"n",/*loop*/"n",/*loopz*/"m",/*loope*/"m",/*loopne*/"m",/*loopnz*/"m",/*mov*/"r","r","m","m","r","s","s","m","r",
 "n",/*mul*/"r","m",/*neg*/"r","m",/*not*/"r","m",/*or*/"r","r","m","m","r",
/*out*/ "dx","dx",/*popf*/"n",/*pushf*/"n",/*push*/"m","r","s",/*pop*/"m","r","s",/*rep*/"?",/*ret*/"n","n",
"n","n",/*rcl*/"r",/*rcr*/"r",/*rol*/"r",/*ror*/"r",/*sahf*/"n",/*sar*/"r",/*shl*/"r",/*shr*/"r",
/*scas*/"n",/*sub*/"r","r","m","m","r",/*sbb*/"r","r","m","m","r",/*sti*/"n",/*std*/"n",/*TEsT*/"r","r","m",
"m","r",/*wait*/"n",/*xlat*/"n",/*xor*/"r","r","m","r","m",/*xchg*/"r","r","m"};

        int i,error=0
        fflush(stdin)
        for(i=0;i<200;i++)
        {
                error=0;
                if(strcmp(x,mnem[i])==0)
                {
                        if(strcmp(y,opd[i])==0)
                        {
                                if(strcmp(z,ops[i])==0)    
                                break;       
                                else error=1;
                        }
                        else error=1;
                }
                else error=1;
        }
        if(error ==1 && strcmp(x,"in")==0)
        {
                printf("\nOperands can be only (al or ax) & dx line (%d)",line_count);
                err_count++;
        }
        else
        if(error ==1 && strcmp(x,"out")==0)
        {
                printf("\nOperands can be only dx & (al or ax) line (%d)",line_count);
                err_count++;
        }
        else
        if(error==1 && (strcmp(x,"rol")==0 || strcmp(x,"ror")==0 || strcmp(x,"rcl")==0 || strcmp(x,"rcr")==0 ||                         strcmp(x,"shl")==0 || strcmp(x,"shr")==0 ) && strcmp(z,"cl")!=0)

        {
                printf("\nThe Count value can only be in cl line (%d)",line_count);
                err_count++;
        }       
        else
        if(error==1) {printf("\nInvalid opcode line (%d)",line_count);err_count++;}     
        return opcode[i];
}

corner
© 1996-2008 CommunityHeaven LLC. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
North American business development: Nicolai Wadstrom. Publisher: Lars Hagelin.
Resource Listings