Ir para conteúdo
Fórum Script Brasil

Stheffany Silva

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Sobre Stheffany Silva

Stheffany Silva's Achievements

0

Reputação

  1. Pessoal, gostaria de alguma ideia de código que eu poderia fazer uma calculadora binaria em assembly nasm com funções de soma, subtração, divisão, e multiplicação! Tenho isso ate agora mas ta em hexadecimal e com erro na subtração e multiplicação Quem souber algo, eu agradeço desde já! section .data MAX_PALAVRA equ 40 s1 db 0xa,"Introduza num 1: " ts1 equ $ - s1 s2 db 0xa,"Introduza num 2: " ts2 equ $ - s2 s3 db 0xa,"Resultado: " ts3 equ $ - s3 s4 db 0xa,"Introduza o operador (+,-,*,/): " ts4 equ $ - s4 linha db 0xa,0xa tlinha equ $ - linha num1 dd 0 num2 dd 0 result dd 0 tamstr dd 0 section .bss strnum resb MAX_PALAVRA section .text global _start _start: mov eax, ds mov es, eax ; Pede num1 mov edx,ts1 mov ecx,s1 mov ebx,1 mov eax,4 int 0x80 mov edx,MAX_PALAVRA mov ecx,strnum mov ebx,0 mov eax,3 int 0x80 sub eax, 1 mov [tamstr],eax xor eax, eax xor ebx, ebx mov esi, strnum cld mov ecx, [tamstr] ciclonum1: lodsb cmp al, '9' jg letra1 and al, 0xF jmp fim1 letra1: and al, 0xF add al, 9 fim1: shl ebx,4 add ebx, eax loop ciclonum1 mov [num1], ebx ; Pede num2 mov edx,ts2 mov ecx,s2 mov ebx,1 mov eax,4 int 0x80 mov edx,MAX_PALAVRA mov ecx,strnum mov ebx,0 mov eax,3 int 0x80 sub eax, 1 mov [tamstr],eax xor eax, eax xor ebx, ebx mov esi, strnum cld mov ecx, [tamstr] ciclonum2: lodsb cmp al, '9' jg letra2 and al, 0xF jmp fim2 letra2: and al, 0xF add al, 9 fim2: shl ebx,4 add ebx, eax loop ciclonum2 mov [num2], ebx ; Pede operador mov edx,ts4 mov ecx,s4 mov ebx,1 mov eax,4 int 0x80 mov edx,MAX_PALAVRA mov ecx,strnum mov ebx,0 mov eax,3 int 0x80 mov esi, strnum lodsb cmp al, '+' je soma cmp al, '-' je subtrai cmp al, '*' je multiplica cmp al, '/' je divide soma: mov ebx, [num1] add ebx, [num2] mov [result], ebx jmp escreve subtrai: mov ebx, [num1] sub ebx, [num2] mov [result], ebx jmp escreve multiplica: mov eax, [num1] mov ebx, [num2] mul ebx mov [result], eax jmp escreve divide: xor edx, edx mov eax, [num1] mov ebx, [num2] div ebx mov [result], eax jmp escreve escreve: ; Transforma resultado em string mov ecx, 8 mov edi, strnum mov ebx, [result] cld xor eax, eax cicloresult: rol ebx, 4 mov eax, ebx and eax, 0x0000000F cmp eax, 10 jl algarismo add al, 'A'-10 jmp fim3 algarismo: add al, '0' fim3: stosb loop cicloresult ; Imprime resultado mov edx,ts3 mov ecx,s3 mov ebx,1 mov eax,4 int 0x80 mov edx,8 mov ecx,strnum mov ebx,1 mov eax,4 int 0x80 mov edx,tlinha mov ecx,linha mov ebx,1 mov eax,4 int 0x80 acabou: ; Sair do programa passando o controlo ao sistema operativo mov ebx,0 mov eax,1 int 0x80
×
×
  • Criar Novo...