Пример #1
0
int move_reg(unsigned char *codigo,char *var1,int j,int eax,int line) {
	
	
	 if (var1[0] == '$') {    
		 int c=Constante(var1);
		
		 if (eax)       
			 codigo[j]= 0xb8;		
		 else
			 codigo[j]= 0xb9;

		 *( (int *) &codigo[j+1] ) = c;       
		 j+=5;
	 }
	 else {               
		 codigo[j]=0x8b;                  
		 codigo[j+1]=0x45;                   
		 j+=2;    
                 
		 if (var1[0] == 'p' && var1[1] >= '0' && var1[1] < '5')                  
			 codigo[j] = (var1[1]-'0')*4 +8;     
                
		 else if (var1[0] == 'v' && var1[1] >= '0' && var1[1] < '5')                 
			 codigo[j] = 252 - (var1[1]-'0')*4;
                 
		 else                   
			 error("operando invalido", line); 

		 j++;   
	 }	
	 return j;		
}
Пример #2
0
/*	Faz "op var1, %eax". Retorna j atualizado*/
int op_reg(unsigned char *codigo, char *var1, char op, int j,int line) {
	 
	if (var1[0] == '$') {

		int c=Constante(var1);       
		if (op=='+')      
			codigo[j]= 0x05 ;
     
		else if (op =='-')     
			codigo[j]= 0x2d;
     
		else if (op =='*')      
			codigo[j]= 0x69;
      
		else       
			error("operando invalido", line); 
     
		*( (int *) &codigo[j+1] ) = c;     
		j+=5;

	
	}

	else { 
                        
		if (op == '+') {
			codigo[j]=0x03;
			codigo[j+1]=0x45;
			j+=2;		
		}
                  
		else if (op =='-') {
			codigo[j]=0x2b;
			codigo[j+1]=0x45;
			j+=2;
		}
                    
		if (op=='*') {
			codigo[j]=0x0f;
			codigo[j+1]=0xaf;
			codigo[j+2]=0x45;
			j+=3;
		}   
                     
		if (var1[0] == 'p' && var1[1] >= '0' && var1[1] < '5')                          
			codigo[j] = (var1[1]-'0')*4 +8;     
                    
		else if (var1[0] == 'v' && var1[1] >= '0' && var1[1] < '5')                            
			codigo[j] = 252 - (var1[1]-'0')*4;
                   
		else                     
			error("operando invalido", line);

		j++;
	}	
	return j;
}
Пример #3
0
/*
-------------------------------------------------------------------------
Função:  Go
-------------------------------------------------------------------------
@short  : Calcula o histograma de níveis de cinza
@author : André Duarte Bueno
  Matrizes
@param  : Recebe uma matriz 2D
@return : Retorna this
*/
CHistograma *
CHistograma::Go (TCMatriz2D< int > *matriz)
{
// Desaloca();
// nx=pow(2,matriz->BitsPixel());
  if (data1D)			// Só calcula se os dados foram corretamente alocados
    {
      Constante (0);		// zera o vetor histograma
      for (int j = 0; j < matriz->NY (); j++)	// Percorre a imagem2D
	for (int i = 0; i < matriz->NX (); i++)
	  {
	    if (matriz->data2D[i][j] < this->NX ())	// evita acesso a ponto alem dos limites do vetor histograma
	      data1D[matriz->data2D[i][j]]++;	// incrementa
	  }
      float area = matriz->NX () * matriz->NY ();	// área total da imagem
      for (int k = 0; k < NX (); k++)	// Percorre o histograma
	data1D[k] = static_cast < int >(data1D[k] * 100.0 / area);	// coloca histograma no intervalo 0-100
    }
  return this;
}