como aprender assembler [RESOLVIDO]

13. Re: como aprender assembler [RESOLVIDO]

Herminio Silva Junior
Hank

(usa Ubuntu)

Enviado em 25/11/2013 - 00:36h

Buckminster escreveu:

"Assembler language is a symbolic programming language that can be used to code instructions instead of coding in machine language."

http://publib.boulder.ibm.com/infocenter/zos/basics/index.jsp?topic=/com.ibm.zos.zappldev/zappldev_2...

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.aixassem/doc/alangref/alangr...

Não estamos falando da mesma coisa.
Eu estava me referindo à linguagem Assembly do tópico, cujo montador chama-se Assembler.


Sim, não estamos falando a mesma coisa.

São dois ambientes distintos. Um é o do personal computer dos dias de hoje, o outro é o de um mainframe lançado há 49 anos, quando o PC ou seus primeiros embriões ainda não tinham sido inventados.

Mas aquele Assembler não tem nada a ver com essa padronização da linguagem apontada em seu segundo link. Essa é uma padronização que veio bem depois. A linguagem a que me refiro foi criada voltada para o mainframe IBM /360 e tinha instruções que não aparecem nessa padronização, pelo simples fato dessa padronização ser voltada para RISC (Reduced Instruction Set Computer), computadores com um conjunto de instruções menor que o dos mainframes.

Espero não ter atrapalhado o tópico com essa minha curiosidade histórica...



  


14. Re: como aprender assembler [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 25/11/2013 - 10:41h

"Assembler language" = linguagem de assemblador, de montador.
Não é o nome da linguagem, mas referência ao tipo da linguagem, que usa um montador.

Os comandos da linguagem Assembly podem ter muita coisa em comum, porém o código de máquina gerado é específico para o processador tal.
Portanto um programa feito para um determinado processador pode literalmente danificar algum outro processador que use LM diferente.

A linguagem Assembly é na realidade uma "capa" sobre a Linguagem de Máquina, feita de forma a que nós humanos possamos entender com mais facilidade (leia-se "menos dificuldade") o que o programa se propõe a fazer.

Permite o uso de rótulos ("labels"), mnemônicos, e de comentários ("remarks"), que tornam a compreensão do código bem mais confortável que encontrarmos coisas como "A7E207009718023EFF32CA12C9" onde nós humanos não sabemos - exceto com muuuuuuita prática - onde começa e termina a instrução e onde começam e terminam os parâmetros, e, afinal, para que serve essa cadeia de comandos.


15. Re: como aprender assembler [RESOLVIDO]

Herminio Silva Junior
Hank

(usa Ubuntu)

Enviado em 25/11/2013 - 15:08h

Mais um pouco de saudosismo...

Os "labels" e os mnemônicos têm por finalidade facilitar a codificação de um programa fonte em linguagem simbólica.

Evidentemente é muito mais fácil lembrar um código de operação de uma instrução por seu mnemônico. Por exemplo, em "Assembler IBM dos anos 60", a instrução que move uma informação de um lugar para outro chama-se MVC, abreviação de "Move Character", ou seja, bem fácil de lembrar. Em linguagem de máquina (hexadecimal) é D2.

O "label" serve para dar nome a um campo (conjunto de caracteres ("bytes") adjacentes na memória) ou a uma instrução.
Por exemplo, o campo onde se quer armazenar o nome do cliente pode ser simplesmente chamado de "Nome". O programador não se preocupa em saber em que lugar (endereço) da memória essa informação vai residir no momento da execução.
A primeira instrução de uma rotina que calcula um imposto pode receber como "label", "Rotimp", nome que será usado dentro do programa fonte para chamar aquela rotina. Vale o mesmo comentário acima.

Quanto à linguagem de máquina, só era necessário conhecer os códigos das instruções em hexadecimal na hora de analisar um "dump" de memória (uma listagem enorme produzida quando ocorria algum erro durante a execução de um programa). Mas essa tarefa era facilitada porque todo mundo que fazia curso de "Assembler IBM" ganhava uma cartela resumo que, entre outras coisas, trazia o mnemônico e o hexadecimal dos códigos de operação de todas as instruções.

Bons tempos aqueles...



16. Re: como aprender assembler [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 25/11/2013 - 19:13h

will2s escreveu:

Em Assembly é isso. Você precisa programar especificamente para cada tipo de arquitetura.


Exatamente. Assembly não é uma linguagem portável.
É uma linguagem rápida. Um programa em Assembly é executado muitas vezes mais rápido do que outras linguagens. Porém, é mais trabalhosa.


17. Re: como aprender assembler [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 25/11/2013 - 20:24h

Hank escreveu:

Buckminster escreveu:

"Assembler language is a symbolic programming language that can be used to code instructions instead of coding in machine language."

http://publib.boulder.ibm.com/infocenter/zos/basics/index.jsp?topic=/com.ibm.zos.zappldev/zappldev_2...

http://publib.boulder.ibm.com/infocenter/pseries/v5r3/topic/com.ibm.aix.aixassem/doc/alangref/alangr...

Não estamos falando da mesma coisa.
Eu estava me referindo à linguagem Assembly do tópico, cujo montador chama-se Assembler.


Sim, não estamos falando a mesma coisa.

São dois ambientes distintos. Um é o do personal computer dos dias de hoje, o outro é o de um mainframe lançado há 49 anos, quando o PC ou seus primeiros embriões ainda não tinham sido inventados.

Mas aquele Assembler não tem nada a ver com essa padronização da linguagem apontada em seu segundo link. Essa é uma padronização que veio bem depois. A linguagem a que me refiro foi criada voltada para o mainframe IBM /360 e tinha instruções que não aparecem nessa padronização, pelo simples fato dessa padronização ser voltada para RISC (Reduced Instruction Set Computer), computadores com um conjunto de instruções menor que o dos mainframes.

Espero não ter atrapalhado o tópico com essa minha curiosidade histórica...


Matou a pauladas.

E não atrapalhou em nada, pelo contrário.


18. Re: como aprender assembler [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 25/11/2013 - 21:57h

Quanto à linguagem de máquina, só era necessário conhecer os códigos das instruções em hexadecimal na hora de analisar um "dump" de memória (uma listagem enorme produzida quando ocorria algum erro durante a execução de um programa). Mas essa tarefa era facilitada porque todo mundo que fazia curso de "Assembler IBM" ganhava uma cartela resumo que, entre outras coisas, trazia o mnemônico e o hexadecimal dos códigos de operação de todas as instruções.

Bons tempos aqueles...

Minha experiência com a LM foi algo meio repentino e mais-ou-menos traumático:
É que eu comecei programando minicomputadores Burroughs (atual Unisys) das séries L/TC/AE.
Aí passava um tempão "munhecando" o código, porém na hora de passar para a máquina, tinha de chamar o técnico (a peso de ouro), esperar ele desbloquear o firmware, para então carregar o programa assembler, digitar o meu código, e fazer os primeiros testes.
Ora, um programa em Assembly dificilmente fica 100% na primeira tentativa, especialmente se o programador é iniciante.
Gente, vocês não sabem o que é provocar um loop infinito em Assembly: É infinito mesmo, já que não dá para desligar a máquina pelos meios convencionais!
Dependia mais uma vez do técnico, que continuava $endo remunerado por $ua pre$ença.
Depois de tudo pronto, ele bloqueava novamente o firmare, fazendo com que, de toda a memória de 16kB (é isso mesmo: 16 quiloBytes), ficárremos apenas com 512 "palavras de memória", o que evidentemente correspondia a meio quiloByte.
Era tudo o que a gente tinha para fazer folha de pagamento + faturamento +
controle de estoque + contabilidade e mais os extras que sempre apareciam.

Aí, por motivos de ordem econômico-finan$$eira, eu comecei a seguir o exemplo de outros programadores mais experientes:
Escrevia o programa em Assembly como manda o figurino (por causa dos labels), e eu mesmo supria, baseado em uma tabela, o código em Linguagem de Máquina.
De posse do tal código em LM, bastava modificar as posições de memória, sem preci$ar chamar o técnico.
Saía cada instrução esquisita, tipo "A1A1", "B0B0", "CACA" "C0C0", "DAD0", "F0DA", "F0F0", etc, já sabendo que se trata de "zeros", e não da letra "O".
A listagem Assembly segue o código hexadecimal, portanto se expressa através dos algarismos de 0 a 9 e dos caracteres alfabéticos de A até F.

E aí está o macete: A memória era listada em hexadecimal. portanto eu colocava as instruções no endereço que eu queria.
Programadores Assembly costumavam "esconder o leite" fazendo em seus programas uma série interminável de subrotinas, para dificultar o seu entendimento por parte de terceiros.
No Assembly L/TC/AE a instrução para desviar o fluxo para outra posição de memória era BRU ("branch unconditional", ou "salto incondicional").

O interessante é que um programa enorme, do tipo Folha de Pagamento, ou faturamento com emissão de nota fiscal e duplicatas (a firma era uma Sociedade Anônima) gerava um rolo de fita perfurada de mais ou menos 6 a 8cm de diâmetro, fora os cartões perfurados (ou edge cards) que continham os dados dos clientes, produtos, transportadores, etc.
O controle de estoques era um caso à parte, pois tinha de trabalhar com memória compartilhada (isso somente é possível em Assembly ou LM).
Era mais ou menos assim: Um produto ocupava a metade direita da memória, e outro produto a metade esquerda.
Então tinha-se de "enganar" aqueles registradores que ficam no final de cada byte.
Ainda bem que esse "pulo do gato" foi ensinado pelo próprio pessoal de suporte do fabricante.

Tinha um analista de suporte em especial que era "feríssimo" e extremamente modesto.
O cara sabia de tudo e mais alguma coisa...

E a insTruTora de Assembly era Também um fenômeno de simpatia e de conhecimento de causa.
Nem precisava ser Tão bonita e charmosa, eTc.



19. Re: como aprender assembler [RESOLVIDO]

Josue de Jesus Santos
JJSantos

(usa Gentoo)

Enviado em 25/11/2013 - 22:57h

Grande Teixeira, o cara é uma enciclopédia.
O autor do tópico sumiu.


20. Re: como aprender assembler [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 26/11/2013 - 10:59h

O chato do Assembly é que muitas vezes temos de ensinar ao computador coisas que ele teoricamente já sabe fazer, como certas operações matemáticas.
Isso faz com que a produtividade caia bastante.
Demora-se muito para escrever um aplicativo.
A grande vantagem é que os executáveis - uma vez montados - são bem pequenos e rápidos.
Em geral um programa em linguagem de baixo nivel executa a velocidades vertiginosas, se comparado às linguagens interpretadas, por exemplo.
A propósito, o Alessandro (Cabelo) já apareceu por aqui mencionando um "Linux" desenvolvido em Assembly...


21. Re: como aprender assembler [RESOLVIDO]

22. Re: como aprender assembler [RESOLVIDO]

marcelo
marceloiaverafa

(usa Linux Mint)

Enviado em 26/11/2013 - 22:36h

Ola pessoal aqui estou de volta. peço desculpas pelo tempo de espera, é que estou no ensino médio e em um curso de TI e faço um estagio, isso todo dia, por isso não tenho tanto tempo para dar uma olhada no VOL. bom este tópico esta sendo muito útil, entendi os fundamentos do relacionamento entre software com o hardware. também percebi que assembly é uma linguagem muito útil na área da eletrónica e da robótica(e coisas do tipo). mas acho que para este propósito(o de criar um SO), não deve ser a mais indicada. mesmo assim muito obrigado, vocês me ensinaram muito. mas antes de encerrar o tópico, gostaria que se possível, alguém me indicasse uma linguagem para este propósito(criar um sistema operacional). desde já agradeço pela disposição em ajudar e pela paciência comigo.


23. Re: como aprender assembler [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 26/11/2013 - 22:41h

marceloiaverafa escreveu:

Ola pessoal aqui estou de volta. peço desculpas pelo tempo de espera, é que estou no ensino médio e em um curso de TI e faço um estagio, isso todo dia, por isso não tenho tanto tempo para dar uma olhada no VOL. bom este tópico esta sendo muito útil, entendi os fundamentos do relacionamento entre software com o hardware. também percebi que assembly é uma linguagem muito útil na área da eletrónica e da robótica(e coisas do tipo). mas acho que para este propósito(o de criar um SO), não deve ser a mais indicada. mesmo assim muito obrigado, vocês me ensinaram muito. mas antes de encerrar o tópico, gostaria que se possível, alguém me indicasse uma linguagem para este propósito(criar um sistema operacional). desde já agradeço pela disposição em ajudar e pela paciência comigo.


Tanto o Linux quanto o Windows e o MAC OS X, a maior parte da programação é feita em C.
O Linux tem C, C++, Assembly, Java, Perl, entre outras.

Porém tem diferença em programar para Kernel e programar para interface gráfica e aplicativos.


24. Re: como aprender assembler [RESOLVIDO]

marcelo
marceloiaverafa

(usa Linux Mint)

Enviado em 27/11/2013 - 09:49h

muito obrigado vou tentar com C, "uma velha conhecida". mesmo assim eu continuo sem entender uma coisa, se assembly não é portável, como o linux o-utiliza em vários computadores de diferentes arquiteturas, marcas e modelos. por favor alguém pode me explicar.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts