Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

DeFigueiredo

Duvida Assembly - LC 3

Mensagens Recomendadas

DeFigueiredo

Boas pessoal, estou aqui com umas pequenas duvidas, queria que me explicassem o que faz este pequeno bocado de codigo, e "Quais os valores iniciais de R1 que poderão conduzir a um resultado final de 3 em R2?" :wallbash: :confused:  

            AND R2,R2,#0

LOOP    ADD R1,R1,#-3

            BRn END

            ADD R2,R2,#1

            BRnzp LOOP

END      HALT

Agradeço a vossa atenção e ajuda...


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DeFigueiredo

Isto é uma pequena parte em assembly programada no simulador LC3, não me lembro a arquitectura....

Mas tipo o que tenho de fazer é apenas dizer quais os valores em R1 que podem conduzir a um resultado de 3 em R2....

????? E isso eu não sei quais são os valores :P


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Mas sem saber qual é a arquitectura e o que é que cada instrução faz exactamente, não consegues descobrir os valores.


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DeFigueiredo

Exacto tens razão, eu andei a ver neste site sobre o simulador, mas mesmo assim fiquei um bocadito a nora....

http://www.lc3help.com/tutorials/


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Jeronimus Linuxius
Mas tipo o que tenho de fazer é apenas dizer quais os valores em R1 que podem conduzir a um resultado de 3 em R2....

????? E isso eu não sei quais são os valores :P

Que instrução é que não percebes? Devias tentar derscobrir tu.

JJ

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DeFigueiredo

           

            AND R2,R2,#0          ; Faz a operação AND para iniciar R2 em zero, neste caso so aceita valores decimais

LOOP    ADD R1,R1,#-3          ; Inicia o ciclo LOOP e decrementa 3 valores

            BRn END                  ; Salta para o fim

            ADD R2,R2,#1            ; Adiciona um valor a R1

            BRnzp LOOP              ; Salta para o LOOp para fazer o ciclo

END      HALT                        ; Fim do programa

Esta é a minha interpretação do programa, mas não sei se está correcta... Se me poderem ajudar agradeço...


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
TheDark

Pelo que estive a ver, BRn (n = negative) efectua o salto se o resultado da operação anterior for negativa, e BRnzp (nzp = negative, zero or positive) efectua o salto sempre.

A tua análise parece-me correcta (só tens ali um typo, no comentário da linha 4 (R1 em vez de R2).


Desaparecido.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Njay

Deves ter algum livro sobre o assembly dessa máquina... juntas-lhe a tua interpretação e fazes umas simulações (afinal, não é um simulador?) para verificar se estavas certo. Sendo um simulador também podes fazer umas simulações com alguns valores iniciais para perceber melhor o que faz o programa.


Blog: Tróniquices ~ Projecto: EmbeddedDreams.com

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Jeronimus Linuxius
            AND R2,R2,#0          ; Faz a operação AND para iniciar R2 em zero, neste caso so aceita valores decimais

LOOP    ADD R1,R1,#-3          ; Inicia o ciclo LOOP e decrementa 3 valores

            BRn END                  ; Salta para o fim

            ADD R2,R2,#1            ; Adiciona um valor a R1

            BRnzp LOOP              ; Salta para o LOOp para fazer o ciclo

END      HALT                        ; Fim do programa

LOOP e END são etiquetas. Elas sao referenciadas pelas instruções de branching (aka jumping). Como apontou o TheDark, o BRn é um branch condicional que só se realiza se a última operação aritmética tiver dado resultado negativo.

Basicamente, ele conta as vezes tem de subtrair 3 a R1 para o resultado chegar a ser negativo.

(afinal, não é um simulador?)

EMULADOOOOOR!

JJ

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DeFigueiredo

não tenho nenhum livro tipo iniciei este ano programação em Assembly, mas o prof não nos explicou nada, temos de aprender sozinhos, o que torna as coisas um pouco mais dificeis.

Então juntando a vossa ajuda, neste caso o valor que no final ira dar 3 em R2 é o valor inicial de 9 em R1... Certo ou estarei errado????

R1 = 9, decrementa 3 valores,ou seja, R1 = 6 como é positivo continua, R2 fica a 1, faz o LOOP de novo, mais 3 valores decrementados, R1 = 3, sendo positivo o resultado, continua, R2 fica a 2, faz novamente o LOOP, mais 3 valores decrementados, R1 = 0, como ainda não é negativo continua, R2 passa a 3, Faz novamente o LOOP, mais 3 valores decrementados, R1 = -3, como é negativo, termina o programa....

Certo?

Qualquer ajuda é bem-vinda....


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Njay

não tenho nenhum livro tipo iniciei este ano programação em Assembly, mas o prof não nos explicou nada, temos de aprender sozinhos, o que torna as coisas um pouco mais dificeis.

Se assim é isso é uma acusação grave, e há que chamar o senhor às suas responsabilidades, ele é certamente pago para ensinar. Vir tentar aprender para um fórum porque o prof não ensina não é solução.


Blog: Tróniquices ~ Projecto: EmbeddedDreams.com

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DeFigueiredo

Sim tens toda a razão não é solução tentar aprender num forum... Mas....

Falamos-lhe disso e ele diz "Meus amigos estamos em bolonha, voces é que tem de trabalhar...", é chato... mas é assim, nem um "Hello World" nos ensinou a fazer...


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DeFigueiredo

Mete-nos a fazer exercicios, as coisas que damos é mais de hardware porque assembly deu na teoria, mas na pratica nada...

ah e claro passa a vida a falar de quando trabalhava na IBM...


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
DeFigueiredo

e colocamos, mas tambem nao nos sabe responder....


Sandro Figueiredo

_________________________________________________________

"A paciência é uma das coisas que se aprendeu na era do 48k"

"O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Jeronimus Linuxius
ntão juntando a vossa ajuda, neste caso o valor que no final ira dar 3 em R2 é o valor inicial de 9 em R1... Certo ou estarei errado????

9, 10 ou 11. Qualquer deles vão dar 3 em R2.

Falamos-lhe disso e ele diz "Meus amigos estamos em bolonha, voces é que tem de trabalhar...", é chato... mas é assim, nem um "Hello World" nos ensinou a fazer...

Não passa de  um senhor professor universitário a armar-se em parvo, no país dos professores que não sabem nem nunca souberam dar aulas.

Diz-lhe, da minha parte, que se não quer fazer a ponta dum chavelho, não precisa de invocar o processo de bolonha, porque essa moda já existia antes de esse tratado vir à baila.

JJ

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.