Stheffany26
(usa Outra)
Enviado em 08/11/2016 - 14:17h
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, sendo que não sei como passa pra binario e digita mais de um digito
section .data
; Messages
msg1 db 10,'-Calculator-',10,0
lmsg1 equ $ - msg1
msg2 db 10,'Number 1: ',0
lmsg2 equ $ - msg2
msg3 db 'Number 2: ',0
lmsg3 equ $ - msg3
msg4 db 10,'1. Add',10,0
lmsg4 equ $ - msg4
msg5 db '2. Subtract',10,0
lmsg5 equ $ - msg5
msg6 db '3. Multiply',10,0
lmsg6 equ $ - msg6
msg7 db '4. Divide',10,0
lmsg7 equ $ - msg7
msg8 db 'Operation: ',0
lmsg8 equ $ - msg8
msg9 db 10,'Result: ',0
lmsg9 equ $ - msg9
msg10 db 10,'Invalid Option',10,0
lmsg10 equ $ - msg10
nlinea db 10,10,0
lnlinea equ $ - nlinea
section .bss
;Espaços reservados para armazenar os valores fornecidos pelo usuário.
opc: resb 2
num1: resb 2
num2: resb 2
result: resb 2
section .text
global _start
_start:
; Imprimir na tela a mensagem 1
mov eax, 4
mov ebx, 1
mov ecx, msg1
mov edx, lmsg1
int 80h
; Imprimir na tela a mensagem 2
mov eax, 4
mov ebx, 1
mov ecx, msg2
mov edx, lmsg2
int 80h
; obter o valor num1.
mov eax, 3
mov ebx, 0
mov ecx, num1
mov edx, 2
int 80h
; Imprimir na tela a mensagem 3
mov eax, 4
mov ebx, 1
mov ecx, msg3
mov edx, lmsg3
int 80h
; obter o valor num2
mov eax, 3
mov ebx, 0
mov ecx, num2
mov edx, 2
int 80h
; Imprimir na tela a mensagem 4
mov eax, 4
mov ebx, 1
mov ecx, msg4
mov edx, lmsg4
int 80h
; Imprimir na tela a mensagem 5
mov eax, 4
mov ebx, 1
mov ecx, msg5
mov edx, lmsg5
int 80h
; Imprimir na tela a mensagem 6
mov eax, 4
mov ebx, 1
mov ecx, msg6
mov edx, lmsg6
int 80h
; Imprimir na tela a mensagem 7
mov eax, 4
mov ebx, 1
mov ecx, msg7
mov edx, lmsg7
int 80h
; Imprimir na tela a mensagem 8
mov eax, 4
mov ebx, 1
mov ecx, msg8
mov edx, lmsg8
int 80h
; opção selecionada.
mov ebx,0
mov ecx,opc
mov edx,2
mov eax,3
int 80h
mov ah, [opc] ; Mover a opção selecionada para o registro ah
sub ah, '0' ; Converso de ascii para decimal
; comparar o valor digitado pelo usuário para saber o que operação para executar.
cmp ah, 1
je add
cmp ah, 2
je subtract
cmp ah, 3
je multiply
cmp ah, 4
je divide
; Se o valor digitado pelo usuário não cumprir alguma das situações acima
; condições, então vamos mostrar uma mensagem de erro e fechar o programa.
mov eax, 4
mov ebx, 1
mov ecx, msg10
mov edx, lmsg10
int 80h
jmp exit
add:
; manter os números nos registros al e bl
mov al, [num1]
mov bl, [num2]
; Converso de ascii para decimal
sub al, '0'
sub bl, '0'
; Add
add al, bl
; Converso de ascii para decimal
add al, '0'
; mover o resultado
mov [result], al
; Imprimir na tela a mensagem 9
mov eax, 4
mov ebx, 1
mov ecx, msg9
mov edx, lmsg9
int 80h
; Imprimir na tela o resultado
mov eax, 4
mov ebx, 1
mov ecx, result
mov edx, 2
int 80h
; terminar o programa
jmp exit
subtract:
;manter os números nos registros al e bl
mov al, [num1]
mov bl, [num2]
; Converso de ascii para decimal
sub al, '0'
sub bl, '0'
; Subtract
sub al, bl
; Converso de ascii para decimal
add al, '0'
; mover o resultado
mov [result], al
; Imprimir na tela a mensagem 9
mov eax, 4
mov ebx, 1
mov ecx, msg9
mov edx, lmsg9
int 80h
; Imprimir na tela o resultado
mov eax, 4
mov ebx, 1
mov ecx, result
mov edx, 1
int 80h
; terminar o programa
jmp exit
multiply:
; armazenar os números em registos al e bl
mov al, [num1]
mov bl, [num2]
; Converso de ascii para decimal
sub al, '0'
sub bl, '0'
; Multiply. AX = AL x BL
mul bl
; Converso de ascii para decimal
add ax, '0'
; mover o resultado
mov [result], ax
; Imprimir na tela a mensagem 9
mov eax, 4
mov ebx, 1
mov ecx, msg9
mov edx, lmsg9
int 80h
; Imprimir na tela o resultado
mov eax, 4
mov ebx, 1
mov ecx, result
mov edx, 1
int 80h
; terminar o programa
jmp exit
divide:
;guarde os números nas machado registos e bx
mov al, [num1]
mov bl, [num2]
mov dx, 0
mov ah, 0
; Converso de ascii para decimal
sub al, '0'
sub bl, '0'
; Division. AL = AX / BX
div bl
; Converso de ascii para decimal
add ax, '0'
; We move the result
mov [result], ax
; Imprimir na tela a mensagem 9
mov eax, 4
mov ebx, 1
mov ecx, msg9
mov edx, lmsg9
int 80h
; Imprimir na tela o resultado
mov eax, 4
mov ebx, 1
mov ecx, result
mov edx, 1
int 80h
; guarde os números nas machado registos e bx
jmp exit
exit:
;Imprimir na tela duas novas linhas
mov eax, 4
mov ebx, 1
mov ecx, nlinea
mov edx, lnlinea
int 80h
; Feche o programa
mov eax, 1
mov ebx, 0
int 80h