• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

DeFigueiredo

Duvida Assembly - LC 3

21 mensagens neste tópico

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

           

            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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
            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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ele alguma coisa deve ensinar nas aulas, não acredito que vos deixe completamente "sem nada". Senão, o que é vocês fazem nas aulas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então coloquem-lhe estas dúvidas, ou parecidas, nas aulas. Mexam-se. Se ficarem quietos nada muda.

Tou a ver é que isto tá bom é pa dar explicações...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Provavelmente querias dizer 11 em vez de 1.

Provavelmente!...

JJ

0

Partilhar esta mensagem


Link 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