-
Posts
16 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
Jorge Luiz Gouveia Sousa's Achievements
1
Reputation
-
Como criar uma função em NASM
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Alguém pra ajudar uma pessoa que está aprendendo ASSEMBLY? -
Como criar uma função em NASM
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
; ========================= ; Programa Teste ; ========================= ; Compilação ; ========================= ; nasm -f elf32 teste.asm ; ld -m elf_i386 -s -o teste teste.o ; ./teste ; ========================= ; Resultado ; ========================= ; 80 ; ========================= BUFFER_DE_IMPRESSAO equ 10 section .data: ; x = '50' x db '50' ; dd - Define Double Word - 4 bytes ; db - Define Byte - 1 Byte ; dw - Define Word - 2 Bytes ; dq - Define Quad Word - 4 Bytes ; dt - Define Ten Word - 10 Bytes ; y = '30' y db '30' section .bss resp_x: resb 0 resp_y: resb 0 resposta: resb 0 section .text: global _start _start: ; ======================= ; resp_x = string_para_int(x) ; ======================= mov eax, [x] call string_para_int mov [resp_x], eax ; ======================= ; resp_y = string_para_int(y) ; ======================= mov eax, [y] call string_para_int mov [resp_y], eax ; ======================= ; resposta = soma(resp_x, resp_y) ; ======================= call soma ; ======================= ; eax = int_para_string(resposta) ; ======================= mov eax, [resposta] call int_para_string ; ======================= ; imprimir(eax) ; ======================= mov ecx, eax call imprimir ; ======================= ; sair ; ======================= jmp final ; pula para o => final: ; ======================= ; Função Soma ; ======================= soma: mov eax, [resp_x] mov ebx, [resp_y] add eax, ebx mov [resposta], eax ret ; ======================= int_para_string: ; Converter Inteiro para String ; Entrada EAX ESI ; Saída EAX mov esi, eax add esi, 9 mov byte[esi], 0 mov ebx, 10 .prox_digito: xor edx, edx div ebx add dl, '0' dec esi mov [esi], dl test eax, eax jnz .prox_digito ; eax == 0 mov eax, esi ret string_para_int: ; Converte String para Inteiro ; Entrada: EAX ESI ; Saida EAX com o valor xor ebx, ebx .prox_digito: movzx eax, byte[esi] inc esi sub al, '0' imul ebx, 10 add ebx, eax ; ebx = ebx*10 + eax loop .prox_digito ; while (--ecx) mov eax, ebx ret imprimir: mov eax, 4 mov ebx, 1 mov edx, BUFFER_DE_IMPRESSAO int 0x80 ret ; Saida final: mov eax, 1 mov ebx, 0 int 0x80 Depois de concertar os erros do código, depois iremos avançar! -
Como criar uma função em NASM
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Não! Obrigado! Quero consertar o erro no meu código! Poderia consertar o erro no meu código? Pra depois avançar? -
Um Debugador ASSEMBLY (NASM) para Iniciante
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Estou compilando assim: nasm -f elf32 teste.asm ld -m elf_i386 -s -o teste teste.o Como faço o debug do código pelo GDB? Depois disso, indique um manual falando sobre o GDB? -
Um Debugador ASSEMBLY (NASM) para Iniciante
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Alguém sabe fazer Debug de um código ASSEMBLY pelo NASM? -
Olá? Queria saber se tem um Debugador ASSEMBLY (NASM) para Iniciante? Quero saber onde está o erro no meu código!
-
Como criar uma função em NASM
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Como faço? -
Como criar uma função em NASM
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Olá? Alguém? -
Como criar uma função em NASM
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Estou testando o código e está dando erro: Falha de segmentação (imagem do núcleo gravada) ; ========================= ; Programa Teste ; ========================= ; Compilação ; ========================= ; nasm -f elf32 teste.asm ; ld -m elf_i386 -s -o teste teste.o ; ./teste ; ========================= ; Resultado ; ========================= ; 8 ; ========================= BUFFER_DE_IMPRESSAO equ 10 section .data: ; x = '50' x db '50' ; dd - Define Double Word - 4 bytes ; db - Define Byte - 1 Byte ; dw - Define Word - 2 Bytes ; dq - Define Quad Word - 4 Bytes ; dt - Define Ten Word - 10 Bytes ; y = '30' y db '30' section .bss resp_x: resb 0 resp_y: resb 0 resposta: resb 0 section .text: global _start _start: mov eax, [x] call string_para_int mov [resp_x], eax mov eax, [y] call string_para_int mov [resp_y], eax call soma mov eax, [resposta] call int_para_string mov ecx, eax call imprimir jmp final ; pula para o => final: soma: mov eax, [resp_x] mov ebx, [resp_y] add eax, ebx mov [resposta], eax ret int_para_string: ; Converter Inteiro para String ; Entrada EAX ESI ; Saída EAX mov esi, eax add esi, 9 mov byte[esi], 0 mov ebx, 10 .prox_digito: xor edx, edx div ebx add dl, '0' dec esi mov [esi], dl test eax, eax jnz .prox_digito ; eax == 0 mov eax, esi ret string_para_int: ; Converte String para Inteiro ; Entrada: EAX ESI ; Saida EAX com o valor xor ebx, ebx .prox_digito: movzx eax, byte[esi] inc esi sub al, '0' imul ebx, 10 add ebx, eax ; ebx = ebx*10 + eax loop .prox_digito ; while (--ecx) mov eax, ebx ret imprimir: mov eax, 4 mov ebx, 1 mov edx, BUFFER_DE_IMPRESSAO int 0x80 ret ; Saida final: mov eax, 1 mov ebx, 0 int 0x80 Onde errei? -
Como criar uma função em NASM
Jorge Luiz Gouveia Sousa replied to Jorge Luiz Gouveia Sousa's topic in Assembly
Vou usar jmp em vez de call! Depois passo para call! Vou fazer devagar! Não está imprimindo o resultado no Terminal! Alguém pode me ajudar? ; ========================= ; Programa Teste ; ========================= ; Compilação ; ========================= ; nasm -f elf32 teste.asm ; ld -m elf_i386 -s -o teste teste.o ; ./teste ; ========================= ; Resultado ; ========================= ; 8 ; ========================= section .data: ; x = 5 x db 5 ; dd - Define Double Word - 4 bytes ; db - Define Byte - 1 Byte ; dw - Define Word - 2 Bytes ; dq - Define Quad Word - 4 Bytes ; dt - Define Ten Word - 10 Bytes ; y = 3 y dd 3 section .text: global _start _start: ; ************************** ; resultado = soma(x, y) ; resultado_string = int_para_string(resultado) ; imprimir(resultado_string) ; ************************** jmp soma jmp int_para_string mov edx, eax mov ecx, 4 jmp imprimir jmp final ; pula para o => final: ; ************************** soma: mov eax, DWORD [x] mov ebx, DWORD [y] add eax, ebx ; ************************** int_para_string: add eax, '0' ; converte para String int 0x80 string_para_int: sub eax, '0' ; converte para inteiro int 0x80 imprimir: mov ebx, 1 mov eax, 4 int 0x80 ; Saida final: mov eax, 1 mov ebx, 0 int 0x80 -
Olá? Estou tentando criar uma função em ASSEMBLY A função: soma int_para_string imprimir Se puder me ajudar? Ficarei muito grato! ; ========================= ; Programa Teste ; ========================= ; Compilação ; ========================= ; nasm -f elf32 teste.asm ; ld -m elf_i386 -s -o teste teste.o ; ./teste ; ========================= ; Resultado ; ========================= ; X eh maior ou igual que Y ; ========================= section .data: ; x = 50 x dd 50 ; dd - Define Double Word - 4 bytes ; db - Define Byte - 1 Byte ; dw - Define Word - 2 Bytes ; dq - Define Quad Word - 4 Bytes ; dt - Define Ten Word - 10 Bytes ; y = 10 y dd 10 section .text: global _start _start: mov eax, DWORD [x] mov ebx, DWORD [y] ; ************************** ; resultado = soma(x, y) ; resultado_string = int_para_string(resultado) ; imprimir(resultado_string) ; ************************** jmp final ; pula para o => final: ; ************************** soma: int_para_string: imprimir: ; ************************** ; Saida final: mov eax, 1 mov ebx, 0 int 0x80
-
Como se chama o compilador de WebAssembly? Procuro na internet e não acho!
-
Olá? Queria saber como copilo o NASM no Windows 11? e como uso o ld do Linux no Windows 11? nasm -f elf64 hello.asm ld -s -o hello hello.o ./hello ; ========================= ; Programa Hello World ; ========================= ; Compilação ; ========================= ; nasm -f elf64 hello.asm ; ld -s -o hello hello.o ; ./hello ; ========================= ; Resultado ; ========================= ; Hello World ; ========================= section .data: msg db 'Hello World', 0xa len equ $ - msg section .text: global _start _start: mov edx, len mov ecx, msg mov ebx, 1 mov eax, 4 int 0x80 ; Saida mov eax, 1 mov ebx, 0 int 0x80
-
Olá! Estou testando esse código no nasm e está dando esse erro! É um simples 'Hello Wold' Falha de segmentação (imagem do núcleo gravada) O código que eu estou testando é esse: ; ========================= ; Programa Hello World ; ========================= ; Compilação ; ========================= ; nasm -f elf64 hello.asm ; ld -s -o hello hello.o ; ./hello ; ========================= ; Resultado ; ========================= ; Hello World ; ========================= section .data: msg db 'Hello World', 0xa len equ $ - msg section .text: global _start _start: mov edx, len mov ecx, msg mov ebx, 1 mov eax, 4 int 0x80 ; Saida mov eax, 1 mov ebx, 0 int 0x80 Quando testo os outros códigos não dá esse erro, veja: https://www.ouka.com.br/.../assembly-video-aula/index.html Testei no Fedora e no Ubuntu, tudo Linux e não consegui fazer o Hello World mas quando testo os outros códigos funciona bem!