Assembly na Prática - Programa 1.1 - Hello World
Вставка
- Опубліковано 29 сер 2024
- Vamos começar nosso curso vendo como o Assembly trata as saídas de informação além de compreendermos a diferença entre Compilação e Linkedição.
Fontes dos Programas: github.com/fer...
Fontes do Livro: github.com/fer...
Parabens, pretendo aprender Assembly e COBOL para verificar e entender um pouco de como os programadores raizes faziam as coisas
Sensacional abriu a minha mente estou a muito tempo tentando aprender através de livros mas sem sucesso, nós livros os autores complicam de mais, as vezes parece que é para desistir, tá de parabéns continua com essa didática que vai ajudar muitas pessoas que querem aprender.
no livro não é para quem é iniciante na minha opinião e sim pra quem já estudou e precisa relembra
mano, sinceramente eu te admiro mt sério.
Obg por ajudar a comunidade BR, pessoas como vc me inspira a continuar estudando tecnologia científica
Que emocionante!!! Explodindo de emoção por finalmente encontrar uma explicação tão amigável e generosa!!! Eternamente grato!!!
Fernando, parabéns! Excelente explicação, aula super agradável (diferente das aulas pesadas que já vi sobre assembly), você tem o dom, você é o PROFESSOR. Do jeito que você explica nos faz gostar de aprender assembly e querer aprender mais. A maioria das pessoas são apenas instrutores mas você é o PROFESSOR você tem o dom.
Muito obrigado!!
Ah cara que legal ver que vc voltou a fazer esses vídeos. Eu queria tando aprender Assembly. Nossa, obrigado mesmo. Adoro suas aulas. Vc me ajuda tanto.
Eu estou fazendo um OS em asm x16 e queria aprender a x64, e eu já estava acostumado com o nasm, esse tutorial me ajudou muito
Como andam as coisas? Ainda estuda assembly?
Estou paquerando a ideia de fazer um mini sistema operacional também. Como anda o seu projeto aí? Upou em algum lugar? Se precisar de ajuda, a gente pode programar junto
Sem palavras para descrever sua aula.
Fazem alguns meses que venho estudando assembly,.
Até que fim encontrei um curso digno de aprendizado.
Infelizmente, muitos vídeos se preocupam muito com a teoria , que é importante, mas lamentavelmente esquecem da prática.
Seu curso envolvem os dois conceitos juntos.
Fico imaginando aqui , já pensou que para aprender a falar nosso idioma, tivéssemos antes que aprender primeiro gramática...... 😢.
Parabéns por sua percepção de ensino. Você é 20.
Continue.....
Que doidera, por curiosidade abri o video, que aula boa, parabéns.
Obrigado por disponibilizar esse conteúdo.
Puxa, estou aqui em 2023 assistindo os vídeos, muito educativos e elucidativos, na prática, vou me organizar para começar aprender Assembly, muito show!!! Será que daí vem a expressão "8 ou 80"?Seria então "0 ou 80",kkkk,brincadeiras a parte, muito bom!
Muito massa. Parabéns !
Parabéns, gostei de sua atitude nobre, ensinar de verdade, não guardar segredo......... excelente professor !!
Aula excelente, comprei um livro de assembly e o livre realmente é mto difícil, não explica nada direito. Estou gostando muito da sua didática! Parabéns.
Professor a sua maneira de ensinar é muito boa! O livro também ótima qualidade.
Gostei muito da aula, a maneira como você transmite o conteúdo é fantástica, parabéns Fernando.
Excelente, amigo. Ótima didática.
Aprendi mais neste vídeo do que todos os outros que já assisti por aí.
Faz muito tempo que estou atrás de material de assembly para iniciante. Me parece que o seu mate irial é bem que procurava. Parabéns
Muito bom professor. Já fui seu aluno em cursos de Java.
Ótima didática, professor! Gratidão por disponibilizar esse conteúdo no UA-cam
Aula excelente!!! Valeu a pena cada segundo!!!!
Ola! A forma que ensina realmente eh mto simples e didática. Nesse ponto esta de parabéns. Só precisei procurar como compilar e link-editar no windows p/ fazer funcionar aqui. Muito obrigado
Aula perfeita, ensina quem sabe. 👏 Sempre quis conhecer essa linguagem...
que maravilha quero muito aprender, e também criar um compilador
seu vídeo me ajudou muito com meu estudos, muito obrigada por compartilhar o seu conhecimento!
uma que a resolução do vídeo é baixa, mas o conteúdo e sensacional.
Muito obrigado pelas aulas. O senhor e um heroi da computacao em assembly kkkkk
Ótima aula!
Parabéns, gostei do seu conteúdo.
mano vc é incrível, amei sua didática
Obrigado Professor! Vou começar a aprender com suas aulas.
Que Aula sensacional! Muito obrigado por compartilhar
É isso que vejo em quase toda área:coisa simples as pessoas complicam quando vão passar apenas para dar mais relevância a si próprias.
Na minha área, medicina, explicações que deveriam ser simples para as pessoas são adornadas por complexidades desnecessárias para que o paciente pense que se trata de algo intangível a ele e respeite mais o médico por ele saber demais.
É uma pena que o ser humano seja tão egoísta com conhecimento que, na minha hujmikde opinião, deveria ser acessível a todos.
Parabéns pelo canal e pela forma de pensar!
ensinando segredos kkk, já tÔ gostando!
muito bom, parabens e obrigado pelos ensinamentos
Top demais!!! Vlw mestre!
Eu vim só de curiosidade, sou programador mobile(uso dart, que é parecido com JS) e adorei a aula, assembly é uma linguagem engraçada!! Ela não tem frescura, aceita quase tudo e roda em tudo que é canto kkkkkk, no dart já daria erro de sintaxe só com uma letra maiúscula, ou quebraria o programa todo.
OK mas toma cuidado com as comparações, em DART vc faz UM programa e pode executar em Mobile, Web ou Desktop, Assembly EXIGE o mesmo sistema e as vezes até o mesmo Chip Operacional. Assembly é excelente para aprimorar seu conhecimento em detalhes que as linguagens de alto nível escondem.
Mais um doido. Isso foi um elogio viu. 😂😂😂😂😂😂😂😂😂😂
Muito massa !
valeu! vc é muito bom! eu usarei assembly!
Excelente aula!
Estava tendo problemas com a instalação e utilização do NASM via WSL2 com o ubuntu 22.04.
Se alguém também estiver encontrando esse problema, esse vídeo me ajudou com o processo: ua-cam.com/video/4Gl9rjzjZeA/v-deo.html&ab_channel=OSTechHelp
No meu caso, o caminho simples do "sudo apt install nasm" não estava funcionando, acabou que tive que instalar vários pacotes antes, inclusive o make exigido no vídeo e o gcc.
Se isso ocorrer, siga com "sudo apt install build-essential", para mim funcionou e pude prosseguir normalmente! Não entendo tanto de Linux, mas parece que esse comando serve para instalar pacotes que já vêm instalados no Ubuntu em instalação convencional e que se encontram faltantes via instalação para o WSL. Espero que isso possa ser útil para alguém!
Obg, meu executável estava dando erro, ai com seu comentário eu me liguei que estava usando a WSL1, dps foi só atualizar e deu certo.
Eu tenho 14 anos,tenho 2 projetos,o Ripy Os e o Crazy Os,feitos em 16 bits.Viu começar a aprender 64 bits!
Muito bom!
Excelente livro.
Professor nos ensine como fazer um executável na linguagem assembly 32b a imprimir uma figura geométrica com as medidas em mm e polegadas.
Pode qualquer editor de texto. Não pode usar processador de texto.
Essa linguagem é muito complicada, mas ainda vou aprender ela
eai ?
muito bom
Professor o senhor poderia gravar os videos em uma resolução maior??
Por exemplo 720.
Não consigo usar o comando ld diz n ser reconhecido, usando windows 10
Uma dúvida, Professor: o "global _start" está subordinado à "section .text"?
legal.
Eu tentei aprender assembly com o masm32, um dia pretendo voltar a estudar.
Seu curso é excelente!
Pena que não dá para enxergar direito, pois uso um pequeno smartphone.
Consegui compilar sem erro, mas não consegui linkedar com o comando ld -s -o hello hello.o
Muito obrigado.
Lhe recomendo a baixar e usar o livro como referencia, ou mesmo o programa pronto que também pode ser baixado. Links nas descrições.
@@FernandoAnselmo Olá, Fernando!
Eu me proponho a aprender escrevendo exatamente o que você escreveu na aula. Vou baixar o livro sim, mas eu programo pelo smartphone, não tenho um pc.
Compilou sem dar erro, mas não funcionou o comando ld -s-o hello hello.o
Muito obrigado por responder.
@@balbino4 nem vai funcionar, Assembly não pede um linkeditor compatível ele EXIGE.
@@FernandoAnselmo Eu escrevi o que você escreveu, exatamente igual.
@@balbino4 como vc programa pelo celular, talves ele nao sabe se consegue executar tudo por conta de ser o cel, alias quall app vc usa para programar no celular , ou quais programas, se for dificil explica pra nois, to nessa pra aprender dev cell
e para ter acesso e/s no assembly eu estou com dificuldades eu estou montando um projeto para isso e necessário de acesso
como que configura a IDE para programar Assembly ?
Sobre test... eu tentei alter o "$- msg" para "ch ou cxh" que para minha cabeça seria o equivalente a 12 na mesma e obtive um error
> bad syntax for EQU
E depois eu corrige para 0xC... e dai surguiu uma questão, nas aulas eu aprendi que os números hexa são representados colocando o "h" no final... o quê deu erro então ?
Ainda não terminei o vídeo, mas a questão é... Quando se compila um script em C/cpp emque momento é feito a criação do link entre o programa em maquina para um executavel ?
se bem me lembro para executar nós passamos apenas "gcc script -o executavel"
brabo dms
Fernando, esse codigo pode funcionar em AVR studio?
Boa noite Professor. Primeiramente obrigado por postar esse conteúdo. Excelente iniciativa.
Tentei diversas formas para fazer o "Hello world!", ele compila, faz a linkedição, aparentemente está tudo ok, não dá nem um erro... Porém não aparece a frase "Hello world!". O que pode estar acontecendo? Se puder me ajudar agradeço.
Qual sistema operacional vc está utilizando?
@@FernandoAnselmo estou com o mesmo problema, utilizo ubuntu 22.04
Professor, resolvi o problema. Parece q o problema é com visual code, no bloco de notas e terminal rodou bonito. Só instalar nasm no ubuntu
Estou usando x86 em um compilador online, o Windows tem muita frescura pra rodar assembly
Olá, Fernando, muito legal esse vídeo, abriu minha mente!
Uma pergunta: Existe alguma extensão para trabalhar com o Assembly no VSCode? Eu utilizo o SASM para programar em Assembly, mas, me sinto muito mais confortável na IDE do Visual Studio Code.
Hum, existem algumas extensões mas a única que eu uso tem a função apenas de colorir o código.
Uso o sistema Windows, e uso o comando 'nasm -f win32 hello.asm -o hello.o' para compilar e 'ld hello.o -o hello.exe' para linkeditar, mas o arquivo executavel está sempre vazio.
Alguém sabe como resolver este problema?
é porque pelo oque eu entendi o NASM não funciona em windows, e sim somente em linux, aconselho a baixar o VirtualBox emulando o linux. No livro dele é mencionado o seguinte:
Dica 1 - Sobre MEU AMBIENTE. Um detalhe que incomoda muito no Assembly e sua exigência de
hardware e software compatível. Meu ambiente é o Ubuntu, uma distribuição do Linux, assim todos os
programas aqui mostrados foram escritos e criados para ele. Tenho o Windows, posso usar esse livro?
A resposta categórica é "Não". Para Windows existe o WASM e recomendo que você pare de ler agora
e procure um livro para ele pois infelizmente o que está escrito aqui não servirá para você.
Boa tarde. Com relação ao registrador eax, eu não entendi o porquê quando se coloca 0x4, o programa assembly já identifica que a saída deve ser a msg "Hello World".
'0x4' é um número para identificar a syscall "sys_write" no Linux x86-64. (Isso pode variar um pouco dependendo do SO ou da Arquitetura), em poucas palavras é como se vc estivesse chamando um 'printf("")' em C++ e depois passando o parâmetros, porém em C++ vc faz tudo isso em uma linha e com menos informações, já em Assembly precisa de mais informações e vc faz isso em várias linhas.
Vc pode encontrar uma tabela um pouco mais completa pesquisando por: Linux System Call Table Naval School
@@ludimilo99
Estou usando um *Debian* GNU/Linux 11. Mandei instalar o pacote *'linux-headers-5.10.0-31-amd64'* (apt-get install linux-headers-5.10.0-31-amd64). Pesquisando na Internet e investigando os arquivos, descobri isto:
/usr/src/linux-headers-5.10.0-31-amd64/arch/x86/include/generated/uapi/asm/unistd_32.h
#define __NR_write 4
/usr/src/linux-headers-5.10.0-31-amd64/arch/x86/include/generated/uapi/asm/unistd_64.h
#define __NR_write 1
o que, para mim que sou um *iniciante* , sugere que, se alguém estiver programando na linguagem Assembly para *32 bits* e desejar escrever algo em algum arquivo, então o registrador EAX precisa conter o número *quatro* (0x4, em hexadecimal). Porém, se alguém estiver programando na linguagem Assembly para *64 bits* e desejar escrever algo em algum arquivo, então o registrador EAX precisa conter o número *um* (0x1, em hexadecimal).
*Resumo:*
======
Arquitetura: x86_64
ABI: 32 bits
Sistema Operacional: GNU/Linux
Chamada de sistema: escrever
Código em decimal: 4
Código em hexadecimal: 0x4
Arquitetura: x86_64
ABI: 64 bits
Sistema Operacional: GNU/Linux
Chamada de sistema: escrever
Código em decimal: 1
Código em hexadecimal: 0x1
*Será que está correta a minha interpretação?*
Daqui de Jaboatão dos Guararapes, PE, domingo 21 de julho de 2024.
No meu Visual Studio, os códigos aparecem sublinhados de vermelho. Como faço para tirar isso? Tenho que configurar para reconhecer a linguagem Assembly?
Instale os plugins para reconhecer os códigos de Assembly, pessoalmente utilizo o "x86 and x86_64 Assembly"
@@FernandoAnselmo Obrigado Fernando. Me tira outra dúvida, fazendo favor? Eu baixei o MARS para ver se dava pra fazer nele, mas não funcionou. Nele não reconhece section, global e nem _start. Mas só com .data e .text, ele consegue depurar as instruções. isso acontece por que ele reconhece um tipo diferente de Assembly?
@@Diego-ch3ed Exatamente isso Assembly é uma linguagem que EXIGE (não pede) um compilador e sistema operacional (as vezes até o chip da placa). Qualquer coisa diferente do NASM / Ubuntu que utilizo pode não funcionar.
Eu estou usando o Windows, então estou usando nasm -f win32 hello.asm para executar, mas o editor (VS Code) diz que Nasm não é reconhecido. Como faço para o editor reconhecer?
Não faz, no Windows usa-se o WASM e tirando que além de instalá-lo os comandos não são os mesmos.
@@FernandoAnselmo Ok. Obrigado!
Não entendi como exibiu o msgC se lá embaixo você não pediu.
Que msgC? Isso não existe, existe um label chamado msg que foi movido para ECX
@@FernandoAnselmo O segundo Hello world que você escreveu abaixo do primeiro.
@@balbino4 vc está dizendo do min 34, avance até o min 36 que tem a explicação porquê isso acontece.
@@FernandoAnselmo Vou voltar e assistir.
Muito obrigado.
32:23 - 'msgC' pode ser interpretado como um rótulo diferente e continuação da mensagem. Eu testei duas vezes 'msg', assim:
msg db 'Hello World!', 0xA
msg db 'Hello World!', 0xA
e dá este erro:
LC_ALL=C nasm -f elf64 hello.asm
hello.asm:3: error: label `msg' inconsistently redefined
hello.asm:2: info: label `msg' originally defined here
Já assim:
msg db 'Hello World!', 0xA
msga db 'Hello World!', 0xA
msgb db 'Hello World!', 0xA
msgc db 'Hello World!', 0xA
msgd db 'Hello World!', 0xA
msge db 'Hello World!', 0xA
msgf db 'Hello World!', 0xA
tam equ $- msg
*Dá certo.*
Daqui de Jaboatão dos Guararapes, PE, domingo 21 de julho de 2024.
opa fernando, não estou conseguinto executar o código que vc colocou no terminal, poderia me dizer o problema?, para auxílio quero citar que os textos verdes de azuis não aparecem no meu, somente um texto indicando o local onde o código está armazenado
Deve ser porque você não instalou as extensões do Assembly no vscode.
Olá amigo gosto muito de projetos com microcontroladores PIC o que vc me indicaria
linguagem "c" ou " assembly" ??
HÀ não sei programar ainda kkk
na minha opinião. programar em C e compreender Assembly
Professor, qual seria uma alternativa do int 0x80 para o windows?
Segundo esta página da Wikipédia (en.wikipedia.org/wiki/INT_(x86_instruction)): "One of the most useful DOS software interrupts was interrupt 0x21". Porém não tenho a mínima ideia pois não utilizo esse sistema.
Uma alternativa viável seria 'ret 16'
no meu apareceu isso quando executei o programa.. como resolve isso?
hello world!Falha de segmentação (imagem do núcleo gravada)
Seu ambiente operacional é Ubuntu?
o correto não é registro?
Esse funciona na maquina virtual,mais o 04 converter nao funcionou,sera pq foi na maquina virtual?
Provavelmente sim, com disse existem graves diferenças de Assembly em ambientes.
Tive o seguinte problema na linkedição
hello.o: file not recognized: file format not recognized
Como posso resolver?
Qual o seu sistema operacional? E como vc gerou o arquivo .o?
@@FernandoAnselmo estou usando termux, Emulador de terminal Linux eu gerei pelo metado que vc descreve ai
@@darklo-fis2188 Se você não fizer no Ubuntu NATIVO pode não funcionar. Na verdade é 100% de chance que NÃO vai funcionar. Assembly não pede compatibilidade de sistema EXIGE.
não sabia que existia o temo linkeditar
É muita coisa
Não pense assim, pense: É muito pouca coisa para uma linguagem tão poderosa. E eu vou aprender isso.
Nao acho como linkar em windows. É até ruim de pesquisar isso, n acho nada.
Infelizmente o Assembly do Windows é muito pouco difundido.
Professor, terão mais aulas?
Com certeza, todas que estão no livro.
@@FernandoAnselmo que livro? Manda o link pra compra
@@cd1306 não existe venda, e livro está disponível nos detalhes de todos os vídeos de Assembly.
Estou vendo a nessesidade de uma resolução de video melhor: 720p no minimo
Não é a qualidade que está baixa, e a velocidade de transmissão do UA-cam que está ruim, se o vídeo fosse em FullHD aí vc não veria e nem escutaria absolutamente nada, para saber mais sobre meu processo de gravação assista ua-cam.com/video/sjsZhMtpURA/v-deo.html. Te recomendo assistir o vídeo em um horário que poucas pessoas estão assistindo.
Os vídeos são gravados por padrão a 1920x1080 em formato WideScreen. A qualidade não está baixa.
Uma dica: Ou se faz um aulão igual os gringos de 5 horas aprendendo Assembly num vídeo só, ou se faz uma playlist pra essas aulas de Assembly, eu não encontrei uma
Além disso seria legal deixar na descrição nem que seja só do primeiro vídeo, quais são as aulas que sairão.
na parte do "ld -s -o HelloWorld HelloWorld.o" da um erro "HelloWorld.o: file not recognized: File format not recognized"
Vou me aprofundar melhor.
Hummm começou fazendo um código limpo em vez de usar em um nasm que tenha caracteres nem todos definidos, certo, isso ai, parabéns.