Assembly
71 topics in this forum
-
Sempre topo com essa questão em foruns e mídias como o Discord: Como usar funções da biblioteca padrão de C em códigos puramente escritos em assembly? É “fácil”, mas eu não recomendo. Primeiro mostrarei como, usando o NASM e o GCC e depois digo o por quê da não recomendação. Eis um “hello, world” simples: ; test.asm ; Compile com: ; nasm -felf64 -o test.o test.asm bits 64 ; A glibc exige "RIP relative addressing". ; De qualquer maneira, isso é sempre uma boa ; prática no modo x86-64. default rel section .rodata msg: db `hello, world`,0 section .text ; Este símbolo está na glibc! extern puts global main main: ; Chama puts(), passando o po…
-
Segue um "Hello, world" em MASM no Windows para os interessados. A graça do MASM é que, mesmo programando em Assembly, é possível chamar as funções da API do Windows (e de outras bibliotecas) usando o comando invoke. 1. Baixar e instalar o MASM32 SDK do site oficial (já vem o compilador, linker e também um editor). 2. Depois de instalado, abra o MASM32 Editor. Copie e cole o seguinte código: ; fonte: https://stackoverflow.com/questions/4568306/outputting-hello-world-in-masm-using-win32-functions .386 .model flat, stdcall option casemap: none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includel…
-
- 14 replies
- 14.4k views
-
-
Olá a todos, Sou iniciante em ASSEMBLER Criei esse tópico para esclarecer dúvidas básicas. Que não se aprofunda. Criei esse tópico para tirar dúvidas. Obrigado a quem me ajudar.
-
- 11 replies
- 2.2k views
-
-
Estou desenvolvendo alguns exercícios em assembly mips, e um deles é basicamente: 23. Faça um algoritmo que leia dois valores correspondentes a anos e mostre quais os anos não bissextos existem entre eles. (A diferença entre os anos não pode ser maior que 1000) .data msg1: .asciiz "\nEntre com a primeira data: " msg2: .asciiz "\nEntre com a segunda data: " msg3: .asciiz "\nPrimeira data deve ser menor e o intervalo entre ela não pode exceder 1000." msg4: .asciiz "\nEsses são os anos não bissestos: " .text main: #Chamando msg1 li $v0, 4 la $a0, msg1 syscall #Armazenando primeira …
-
- 2 replies
- 1.6k views
-
-
Vamos a pequena e importante dica! Em algumas distribuições Linux já vem instalado o compilador Assembly, como no caso do Fedora 29, bastando apenas o usuário desenvolver seu código e compilar.. Nesse exemplo mando para você um código simples que fiz. Espero que goste! =================================================== .section .data mensagem: .ascii "Lincoln Arantes\n" .section .text .globl _start _start: movq $1, %rax movq $1, %rdi movq $mensagem, %rsi movq $15, %rdx syscall movq $60, %rax movq $0, %rdi syscall ================================================== …
-
Eis um exemplo de que a ideia de que um código escrito em assembly é mais rápido do que um escrito em outra linguagem muitas vezes não é verdadeira. No exemplo abaixo em preencho um array de 1000 inteiros (32 bits) com valores aleatórios. Isso coloca 4000 bytes no cache L1d. Daí, em chamo as rotinas suma(), que é o equivalente em assembly da rotina sumc(), essa última escrita em C, medindo a quantidade de ciclos gastos na soma de todos os inteiros do array. Faço o mesmo com a rotina sumc()... Eis o resultado em uma de minhas máquinas de teste (i5-3570 @ 3.4 GHz): $ ./test sum (asm) = 1032606550591 (4556 ciclos) sum (c) = 1032606550591 (3094 ciclos) Yep... nossa r…
-
Para alguns iniciantes, a compilação de um programa é um problema, porém se você seguir os passos que irei te passar agora, com certeza, você conseguirá! Respire fundo e siga em frente que você vai conseguir! Para compilar códigos em Assembly são usados alguns comandos no terminal Linux! Para facilitar a vida de todos, estou postando os dois mais usados! Para nosso exemplo, o arquivo chama hello e tem a extensão .s , o que forma hello.s Para usar é bastante simples, basta abrir o terminal e alterar o nome do arquivo, digitar as linhas seguidas apertando a tecla [enter] no final de cada linha. Atenção não coloque #, coloque apenas os comand…
-
- 0 replies
- 6.3k views
-
-
Esta é uma maneira antiga de usar as chamas de sistemas do Linux, mas ainda funciona e tem fins didáticos :-) ; # apt install nasm ; $ nasm -f elf32 hello.asm ; $ ld -m elf_i386 -o hello hello.o ; $ ./hello section .rodata ; seção .rodata do ELF, onde ficam os dados somente-leitura msg: db "Mente Binária", 10 ; nossa string que será impressa, seguida de um \n len: equ $-msg ; "$" significa "aqui" -> posição atual menos posição do texto. len terá o tamanho da string. section .text ; seção .text do ELF, onde fica o código global _start ; faz o label "_start" visível ao linker (ld) _sta…
-
- 17 replies
- 11k views
-
-
Primeiramente gostaria de dizer a todos que vale a pena programar na linguagem Assembly. No exemplo abaixo estou usando o S.O Linux para fazer a instalação do Assembler Nasm O compilador está disponível no site do fabricante: https://www.nasm.us/ , porém para simplificar faremos a instalação da maneira mais correta e mais simples. A instalação no Linux Fedora 29 é bastante simples! Tudo vai acontecer pelo próprio terminal. Para esse exemplo estou utilizando o computador da Julia. Primeiro passo: Abra o terminal do Linux e altere seu usuário para Root ou #. Segundo passo: Depois digite o comando: yum install nasm e tec…
-
- 0 replies
- 2.8k views
-
-
Sou apaixonado pela linguagem Assembly e espero que você goste também! Autor: Lincoln César dos Reis Arantes - Analista de Sistema (graduado) Registradores x86 – IA 32 Registradores são memórias rápidas que ficam no processador com uma finalidade especifica. Registradores para uso geral! Segue abaixo os principais registradores para uso geral: De 16 bits: AX – Acumulador BX – Base CX – Contador DX – Dados SI – Source Index –índice de origem de dados DI – Destination Index – índice de destino BP – Base Pointer – Apontador de base SP – Stack Pointer …
-
- 2 replies
- 3.1k views
-
-
-
ola,eu preciso fazer um programa que receba frases ou palavras e imprima na tela essa frase ou palavra e fique em loop ate que o usuario de enter sem ter digitado nada,mas nao sei como fazer a parte de imprimir e ficar em loop,poderiam me ajudar? .model small .stack .data texto1 db "INSIRA UMA PALAVRA:",0 string 6 DUP (?) texto2 db "SUAS PALAVRAS FORAM:",0 .code .startup ;parte 1:imprimir MOV si,offset texto1 IMPRIMIR: MOV al,[si] CMP al,0 JE IMPRIMIU INC si MOV ah,14 INT 10h JMP IMPRIMIR IMPRIMIU: ;parte 2:leitura do teclado MOV si,offset string MOV cx,0 ;numero INPUT: MOV ah,00 ;espera INT 16h CMP al,13 ;tecla enter JE FIM_INPUT CMP al,8 ;apagar JE APAGAR CMP c…
-
Já reparou que o GCC (e o VC++, bem como outros compiladores) não usam instruções tradicionais como INC, DEC e LOOP? INC e DEC são bem fáceis de entender e, por conseguinte, são intuitivas: Elas incrementam e decrementam, respectivamente, um registrador ou conteúdo de memória. Já a instrução LOOP salta para um endereço se RCX (x86-64) ou ECX (i386) não forem 0, decrementando esse registrador antes de cada salto. O nome da função é intuitivo também... O motivo do não-uso dessas instruções é que elas são mais lentas que as equivalentes... ADD e SUB, com o operando fonte imediato 1, é 1 ou 2 ciclos mais rápida que INC e DEC porque essas últimas não preservam o flag de …
-
- 1 reply
- 1.2k views
-
-
Galera nessa postagem vou mostrar o vmlab (Visual Micro Lab) que é um simulador para arquitetura AVR e ST6. Os microcontroladores aceito nesse simulador são: esse simulador alem de permitir escrever o nosso codigo em assembly é possivel instalar o winavr e integrar a ele a linguagem C, tambem tem alguns outros recursos como descrever um circuitinho em spice, um painel onde tem alguns componentes (botões, leds, potenciômetro e etc). Para baixar ele podemos ir direto no site oficial site oficial depois de baixar, instalar e executar vamos nos deparar com janela inicial https://i.imgur.com/1EZoxIY.png para começar basta a gente criar um proje…
-
- 0 replies
- 1.8k views
-
-
Pessoal estou trazendo uma série de 7 tutoriais em portugues de como programar um keygen em Assembly. O conteúdo foi adaptado para RadAsm a partir de um antigo tutorial de Gobbit. Lista dos tutoriais: 1- O esqueleto de um programa em assembly. 2- Programa simples de caixa de mensagem 3- Visão geral de arquitetura do Windows 4- Programa simples de caixa de diálogo 5- Caixa de diálogo com menu e ícone 6-Modelo simples de keygen 7-Customizando seu keygen Como_programar_um_Keygen_em_Assembly_usando_o_RadAsm.rar
-
- 0 replies
- 2k views
-