Ir ao conteúdo
  • Cadastre-se

Passar funcao de java para assembly


kaiserito

Posts recomendados

Eu programo bem em assembly, mas não entendo nada de java. Se pudesses explicar um pouco o que o programa faz talves eu poderia te ajudar.

Pelo que entendi terás a variavel x e z, depois ele testa o x, e subtrai o y, só não entendi o "return", em assembly é usado para retornar de uma subrotina.

Link para o comentário
Compartilhar em outros sites

  • Moderador
Eu programo bem em assembly, mas não entendo nada de java. Se pudesses explicar um pouco o que o programa faz talves eu poderia te ajudar.

Pelo que entendi terás a variavel x e z, depois ele testa o x, e subtrai o y, só não entendi o "return", em assembly é usado para retornar de uma subrotina.


Int funcaoA(int x){
If(x==0) return 1;
return 0;
}
Int funcaoB(int {
return y+funcaoA(y-1);
}

interpreando o codigo eu diria que a funçao A testa a variavel X, se for igual a zero retorna o numero 1, s e variavel x for igual a 1 retorna o numero zero.

funçao B

retorna a expressao y + 1(y -1) se a funçao A for verdadeira ou seja retornar o numero 1

ou retorna a expressao y + 0(y - 1) se a funão A for falsa ou seja, retornar o numero 1.

pelo que eu entendi é isso q o programa faz. o foco ta na funçao B que precisa da resposta da funçao A ´para retornar a expressao desejada.

o return no java serve para retornar uma resposta da funçao.

abraço

Link para o comentário
Compartilhar em outros sites

  • Moderador
Sendo assim:

FUNCAO_B

CALL FUNCAO_A
ADDWF Y

GOTO FUNCAO_B



FUNCAO_A

BTFSS X
RETLW D'1'
RETLW D'1'


END

Não entendi a operação de y "(y -1)" . o que fiz foi somar o valor de x com y.

acho que com aquela funçao B ele quer que calcule a equaçao..

se for isso..

x = 0:

y + 1(y - 1)

resposta = y² + 1y - 1y - 1

resposta = y² - 1

se x = 1:

y + 0(y - 0)

resposta = y² + 0 + 0 - 0

resposta = y² + 0

olhando para o codigo dele possui alguns erros de sintaxe.. o correto seria:



Int funcaoA(int x){
If(x==0){
return 1;
}else{
return 0;
}
}

Int funcaoB(int {
return y+funcaoA(y-1);
}

acho que seria isso.

Link para o comentário
Compartilhar em outros sites

x = 0:

resposta = y² - 1

se x = 1:

resposta = y² + 0

Nesse caso seria um pouco mais complicado, começaria pela FUNCAO_A. em asm não há multiplicação directa.


VARIAVEL1 EQU 20H
VARIAVEL2 EQU 21H
VARIAVEL3 EQU 22H


FUNCAO_A

BTFSS X
GOTO FUNCAO_B1
GOTO FUNCAO_B2



FUNCAO_B1 ;Y²-1

MOVF Y,W
MOVWF VARIAVEL1
MOVWF VARIAVEL2


LOAD_VAR
MOVF Y,W
MOVWF VARIAVEL1


LOOP1

INCF VARIAVEL3
DECFSZ VARIAVEL1
GOTO LOOP1

DECFSZ VARIAVEL2
GOTO LOAD_VAR ;RECARREGA VARIAVEL1

MOVF VARIAVEL3,W
MOVWF Y ;Y=Y²

SUBF Y ;Y=Y²-1

GOTO FUNCAO_A



FUNCAO_B2 ;Y²

MOVF Y,W
MOVWF VARIAVEL1
MOVWF VARIAVEL2


LOAD_VAR2
MOVF Y,W
MOVWF VARIAVEL1


LOOP2

INCF VARIAVEL3
DECFSZ VARIAVEL1
GOTO LOOP2

DECFSZ VARIAVEL2
GOTO LOAD_VAR2 ;RECARREGA VARIAVEL1

MOVF VARIAVEL3,W
MOVWF Y ;Y=Y²

GOTO FUNCAO_A


END

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

olhando para o codigo dele possui alguns erros de sintaxe.. o correto seria:



Int funcaoA(int x){
If(x==0)[B]{[/B]
return 1;
[B]}else{[/B]
return 0;
[B]}[/B]
}

Int funcaoB(int {
return y+funcaoA(y-1);
}

acho que seria isso.

Ué, Java não tem o "if de um elemento" não???

Pelo menos em C/C++, não é obrigatório utilização de chaves para definir o corpo do if, se ele só possuir um comando.

Não entendi como você saiu disso:



Int funcaoA(int x){
If(x==0){
return 1;
}else{
return 0;
}
}

Int funcaoB(int {
return [B]y+funcaoA(y-1);[/B]
}

Para isso:

x = 0:

y + 1(y - 1)

resposta = y² + 1y - 1y - 1

resposta = y² - 1

se x = 1:

y + 0(y - 0)

resposta = y² + 0 + 0 - 0

resposta = y² + 0

Se ele realmente queria fazer isso que você disse, é um erro de lógica gravíssimo...

Cara, o que o programa dele faz é o seguinte:

y+funcaoA(y-1);

y-1 é a entrada da função A

e ela só retorna 0 ou 1

então só pode resultar em y+0 ou y+1

O que nos deixa com:

y <= 0

y + 0 = y

y=1

1 + 1 = 2

y>=2

y+0 = y

Ainda existe esse problema:

Int funcaoB([B]int b[/B]){
return [B]y+funcaoA(y-1);[/B]
}

Além de ele não utilizar b, ainda apareceu com um y magicamente!

Como não faz sentido receber b sem utilizar eu presumo que y seja na verdade b, o que nos deixa com:

b <= 0

b + 0 = b

b=1

1 + 1 = 2

b>=2

b+0 = b

...

Link para o comentário
Compartilhar em outros sites

  • Moderador

na verdade essa funçao toda é tudo muito confuso... mas eu cheguei na minha logica por causa da matematica..

Int funcaoA(int x){
If(x==0){
return 1;
}else{
return 0;
}
}

Int funcaoB(int {
return b+funcaoA(b-1);
}

ele provavelmente nao postou todo o codigo... o que me deu a entender que a entrada é X. então comparando o X digitado... for igual a 0 ele retornaria 1.

isso na funçao A

e na funçao B ele faria b + resposta da funçaoA(b-1)

ah sei la cara.. isso ta muito confuso...

Ué, Java não tem o "if de um elemento" não???

Pelo menos em C/C++, não é obrigatório utilização de chaves para definir o corpo do if, se ele só possuir um comando.

em java , é melhor utlizar o uso das chaves mesmo quando tiver 1 linha. mas isso nao quer dizer q nao de pra usar sem as chaves.

daria pra fazer:



if(variaval != 0)
system.out.print("resposta1");
else
system.out.print("resposta2");

mas o bom mesmo é sempre usar as chaves.

Link para o comentário
Compartilhar em outros sites

na verdade essa funçao toda é tudo muito confuso... mas eu cheguei na minha logica por causa da matematica..

Int funcaoA(int x){
If(x==0){
return 1;
}else{
return 0;
}
}

Int funcaoB(int {
[B] return b+funcaoA(b-1);[/B]
}

ele provavelmente nao postou todo o codigo... o que me deu a entender que a entrada é X. então comparando o X digitado... for igual a 0 ele retornaria 1.

isso na funçao A

e na funçao B ele faria b + resposta da funçaoA(b-1)

(...)

Sim, eu imaginei que você tivesse pensado na matemática mesmo.

Mas em termos de código, isso não é valido, pois toda chamada de função deve conter um par de parênteses mesmo que a função não receba entradas, logo, y-1 TEM que ser a entrada da função.

O que torna o algoritmo do cara aparentemente inútil pois:

retorna a própria entrada se ela for <=0 e >1

e retorna 2 caso a entrada seja 1...

Link para o comentário
Compartilhar em outros sites

  • Moderador
Sim, eu imaginei que você tivesse pensado na matemática mesmo.

Mas em termos de código, isso não é valido, pois toda chamada de função deve conter um par de parênteses mesmo que a função não receba entradas, logo, y-1 TEM que ser a entrada da função.

O que torna o algoritmo do cara aparentemente inútil pois:

retorna a própria entrada se ela for <=0 e >1

e retorna 2 caso a entrada seja 1...

putz... então o cara vive no mundo da lua... ou isso é uma pegadinha "pega Ratao" de prova... rsrsrs

Link para o comentário
Compartilhar em outros sites

Shara, sua primeira interpretação está correta, o pessoal apenas se complicou um pouco, o problema foi muito bem explicado na sua resposta sem margem nenhuma de dúvida, o ponto de engano como tu mesmo citaste foi o "return b+funcaoA(b-1);", mas não vejo o porque da interpretação "matemática" ter sido o ponto principal do engano...

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!