Assembly

1. Assembly

Stheffany Gabrielle da Silva
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



  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts