Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Estou com dúvida tenho Criar um programa escrito em Assembly para executar a função de uma calculadora com as quatro operações fundamentais. A calculadora deverá executar operações binárias de soma, subtração, divisão e multiplicação permitindo ao usuário decidir quando devem continuar ou finalizar as operações. Tenho isso ate agora mas esta em hexadecimal alguem pode mim ajuda a passa pra binario e também esta com um bug em multplicação e subtração.


 

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

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...