Jump to content

Jorge Luiz Gouveia Sousa

Members
  • 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

  1. Alguém pra ajudar uma pessoa que está aprendendo ASSEMBLY?
  2. ; ========================= ; 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!
  3. Não! Obrigado! Quero consertar o erro no meu código! Poderia consertar o erro no meu código? Pra depois avançar?
  4. 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?
  5. Alguém sabe fazer Debug de um código ASSEMBLY pelo NASM?
  6. Olá? Queria saber se tem um Debugador ASSEMBLY (NASM) para Iniciante? Quero saber onde está o erro no meu código!
  7. 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?
  8. 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
  9. 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
  10. Como se chama o compilador de WebAssembly? Procuro na internet e não acho!
  11. 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
  12. 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!
×
×
  • Create New...