como aprender assembler [RESOLVIDO]

25. Re: como aprender assembler [RESOLVIDO]

Herminio Silva Junior
Hank

(usa Ubuntu)

Enviado em 28/11/2013 - 12:52h

Teixeira escreveu:

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.


Pô, Teixeira, em que ano foi isso?
Nem o IBM 1401 (de segunda geração) era tão complicado!
Ele tinha um botão vermelho (Stop) no painel da máquina que parava qualquer execução. Tinha também um botão que permitia você executar uma instrução de cada vez (Instruction Step). Com isso você acompanhava o endereço das instruções no painel da máquina e podia perceber que o computador voltava a executar as mesmas instruções repetidamente (ou seja, estava em loop). Os loops eram perceptíveis também pelos sintomas externos. O computador parava de ler cartões, de imprimir e as unidades de fita paravam de se movimentar. Só as luzes do painel continuavam piscando.
Detectado o loop, a gente alimentava um programinha em cartão perfurado que era carregado nos endereços mais baixos da memória (ou seja, não destruía o programa interrompido localizado nos endereços mais altos) e imprimia o conteúdo da memória (dump) pra gente analisar. Mas o dump do IBM 1401 era mais fácil de ler. O hexadecimal só apareceu depois com o IBM /360 (terceira geração).
Ah, um detalhe interessante, a memória do 1401 tinha 4k. Podia no máximo chegar a 16k.
Quanto a cobrar do cliente pela ajuda do técnico, não havia essa prática por parte da IBM naquela época. O suporte era gratuito. (Evidentemente estava coberto pelo aluguel do equipamento.)
Agora, instrutora simpática, atraente, etc., tive uma. Mas já não era mais de Assembler, era de MVS (um sistema operacional da IBM).

Eh, eh... Hora da saudade!


  


26. Re: como aprender assembler [RESOLVIDO]

Buckminster
Buckminster

(usa Debian)

Enviado em 28/11/2013 - 13:01h

marceloiaverafa escreveu:

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.


O GCC provê um construtor especial, asm, para inserir instrucões de linguagem de montagem em C.
Como a maioria dos processadores mais usuais hoje em dia são x86, o Assembly utilizado é para x86.

O código Assembly fica embutido no código em C.

Por exemplo, o Kernel Linux tem instruções para diversas arquiteturas, instruções estas separadas em arquivos para cada arquitetura. No momento da compilação o Kernel verifica qual a arquitetura da máquina, se não for uma arquitetura compatível dará erro.
Por isso também que existem distribuições Linux para cada arquitetura de máquina.

No caso específico do Kernel, ele verifica a arquitetura da máquina e chama o arquivo correspondente (x86, PowerPC, etc).
Para as ocasiões em que os programadores precisam usar instruções Assembly em seus programas, a coleção de compiladores GNU (GNU Compiler Collection) permite aos programadores usar instruções em Assembly, independente da arquitetura das máquinas.

Contudo, se você for fazer um programa em C, por exemplo, e usar código Assembly, logicamente este programa será utilizado em um sistema já instalado em uma determinada arquitetura, então o Assembly deverá ser obrigatoriamente para esta arquitetura.
É mais ou menos isso.


27. Re: como aprender assembler [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 28/11/2013 - 19:43h

Pô, Teixeira, em que ano foi isso?
Nem o IBM 1401 (de segunda geração) era tão complicado!


Bem, na verdade os L/TC/AE tinham uma espécie de botão que, se não era secreto, pelo menos era de acesso bastante dificultado, e que era o verdadeiro RESET da máquina (havia um outro Reset no quadro de botões, porém que obedecia ao programa. Isto é dizer que se o programa permitisse que ali fosse feito um reset, ali seria feito um reset. Se o programa não permitisse, não: Nesse caso ele não teria utilidade).
Aquele botão de RESET verdadeiro ficava numa cavidade, do lado esquerdo, abaixo do painel do teclado, a cerca de 2cm de profundidade, e tinha igualmente uns 2cm de largura. Dessa forma não dava para esbarrar nele acidentalmente de jeito nenhum.
Ele era usado no ritual de pajelanças necessário para ligar e desligar a máquina (cold start e shut down) porém não deveríamos desligar jamais a máquina "no tranco".
Mas era um computador bastante "esotérico": No final do warm start (a continuação do cold start) tinha de acionar por três vezes o tal reset do quadro de botões.
Aí ele fazia plim-plim-plim (caracter 07 ou "bell")...


28. Re: como aprender assembler [RESOLVIDO]

Matheus Brito
kirito

(usa Slackware)

Enviado em 02/12/2013 - 17:04h

Olá, eu tenho um sonho de criar um SO. Eu estudo linguagem C e Assembly, se quiser, podemos estudar juntos, e quem sabe um dia, iniciarmos um projeto.


29. Re: como aprender assembler [RESOLVIDO]

marcelo
marceloiaverafa

(usa Linux Mint)

Enviado em 02/12/2013 - 19:17h

kirito escreveu:

Olá, eu tenho um sonho de criar um SO. Eu estudo linguagem C e Assembly, se quiser, podemos estudar juntos, e quem sabe um dia, iniciarmos um projeto.


pode ser, mais não sei como isso vai funcionar, talvez por redes sociais.


30. Re: como aprender assembler [RESOLVIDO]

Matheus Brito
kirito

(usa Slackware)

Enviado em 02/12/2013 - 20:21h

marceloiaverafa escreveu:

kirito escreveu:

Olá, eu tenho um sonho de criar um SO. Eu estudo linguagem C e Assembly, se quiser, podemos estudar juntos, e quem sabe um dia, iniciarmos um projeto.


pode ser, mais não sei como isso vai funcionar, talvez por redes sociais.


é, ou por email. O que você achar melhor.


31. Re: como aprender assembler [RESOLVIDO]

marcelo
marceloiaverafa

(usa Linux Mint)

Enviado em 02/12/2013 - 22:18h

kirito escreveu:

marceloiaverafa escreveu:

kirito escreveu:

Olá, eu tenho um sonho de criar um SO. Eu estudo linguagem C e Assembly, se quiser, podemos estudar juntos, e quem sabe um dia, iniciarmos um projeto.


pode ser, mais não sei como isso vai funcionar, talvez por redes sociais.


é, ou por email. O que você achar melhor.


não sei más acho que pôr email e mais seguro


32. Re: como aprender assembler [RESOLVIDO]

Matheus Brito
kirito

(usa Slackware)

Enviado em 03/12/2013 - 18:00h

marceloiaverafa escreveu:

kirito escreveu:

marceloiaverafa escreveu:

kirito escreveu:

Olá, eu tenho um sonho de criar um SO. Eu estudo linguagem C e Assembly, se quiser, podemos estudar juntos, e quem sabe um dia, iniciarmos um projeto.


pode ser, mais não sei como isso vai funcionar, talvez por redes sociais.


é, ou por email. O que você achar melhor.


não sei más acho que pôr email e mais seguro


ok então, só tenho uma pergunta antes, porque você quer criar um SO ?


33. Re: como aprender assembler [RESOLVIDO]

marcelo
marceloiaverafa

(usa Linux Mint)

Enviado em 03/12/2013 - 21:50h

kirito escreveu:

marceloiaverafa escreveu:

kirito escreveu:

marceloiaverafa escreveu:

kirito escreveu:

Olá, eu tenho um sonho de criar um SO. Eu estudo linguagem C e Assembly, se quiser, podemos estudar juntos, e quem sabe um dia, iniciarmos um projeto.


pode ser, mais não sei como isso vai funcionar, talvez por redes sociais.


é, ou por email. O que você achar melhor.


não sei más acho que pôr email e mais seguro


ok então, só tenho uma pergunta antes, porque você quer criar um SO ?


vários motivos 1º) sei que vou descobrir coisas novas. 2º) vou elevar minha alto-estima. 3º) vou ver se há a possibilidade de fazer um SO, 100% aprova hackers ou pelo menos 97%.


34. Re: como aprender assembler [RESOLVIDO]

Matheus Brito
kirito

(usa Slackware)

Enviado em 04/12/2013 - 10:42h

marceloiaverafa escreveu:

kirito escreveu:

marceloiaverafa escreveu:

kirito escreveu:

marceloiaverafa escreveu:

kirito escreveu:

Olá, eu tenho um sonho de criar um SO. Eu estudo linguagem C e Assembly, se quiser, podemos estudar juntos, e quem sabe um dia, iniciarmos um projeto.


pode ser, mais não sei como isso vai funcionar, talvez por redes sociais.


é, ou por email. O que você achar melhor.


não sei más acho que pôr email e mais seguro


ok então, só tenho uma pergunta antes, porque você quer criar um SO ?


vários motivos 1º) sei que vou descobrir coisas novas. 2º) vou elevar minha alto-estima. 3º) vou ver se há a possibilidade de fazer um SO, 100% aprova hackers ou pelo menos 97%.


Entendi.


35. Re: como aprender assembler [RESOLVIDO]

Matheus Brito
kirito

(usa Slackware)

Enviado em 05/12/2013 - 11:39h

Então, encerramos nossa conversa por esse tópico. Já até te mandei um email..


36. Re: como aprender assembler [RESOLVIDO]

Matheus Brito
kirito

(usa Slackware)

Enviado em 13/12/2013 - 18:14h

eu te mandei uma mensagem por aqui mesmo, pelo VOL, mas você ainda não respondeu, você sumiu..






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts