• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ciborg

Calculadora Unitária

6 mensagens neste tópico

Ola eu fiz uma calculadora para um trabalho da escola ela esta a funcionar so que eu não sei explicar da melhor maneira cada uma das linhas de código se alguem puder ajudar me a decifrar em "portugues" lool o que cada linha faz era muito bom!!

;------------------------------------------- Menu - Mostra a opções que irao ser nostradas ------------------------------------------------------------------;

data segment

texto db 0dh,'       Sistema de calculo unitario          |'
mens db 0ah,0dh,'Seja bem vindo a calculadora            |'    

     menu db ,0ah,0ah,0dh,      '------------------------------------------'
    db ,0ah,0ah,0dh,            '|                                        |'
        db ,0ah,0ah,0dh,                '|1-++ SOMA (de dois numeros)      ++     |'
   		db ,0ah,0ah,0dh,        '|                                        |'
	db ,0ah,0ah,0ah,        '|2--- SUBTRACAO (de dois numeros)---     |'
	db ,0ah,0ah,0dh,        '|                                        |'
	db ,0ah,0ah,0dh,        '|3-// DIVISAO (de dois numeros)   //     |'
	db ,0ah,0ah,0dh,        '|                                        |'
	db ,0ah,0ah,0dh,        '|4-** MULTIPLICACAO (de dois numeros)  **|'
	db ,0ah,0ah,0dh,        '|                                        |'
	db ,0ah,0ah,0dh,        '|5-SAIR da calculadora                   |'
	db ,0ah,0ah,0dh,        '|                                        |'
	db ,0ah,0ah,0dh,        '------------------------------------------'
	db ,0ah,0ah,0dh,'Nota ( No final escolha o sinal da opccao desejada $ ',0ah,0dh,0ah,0dh 

;---------------------------------------------- Opccoes - que serão mostradas na inserção d números ----------------------------------------------------------------------;

    numero1   db 0ah,0dh,'Enter first number: $',0ah,0dh
    numero2   db 0ah,0dh,'Enter second number : $',0ah,0dh
    valor1    db ?
    valor2    db ? 
    resul     db 0ah,0dh,'O resultado da operacao inserida foi: $',0ah,0dh
    valor     db ?, '$',0ah,0dh
        
data ends

stack segment
    dw 128 dup(0) ; tem a haver com a tabela asscii e os acertos que se faz para mandar para o ecra
ends

;-------------------------------------------------- Leitura dos numeros inseridos -----------------------------------------------------------------------------------------------;

code segment
start:

    mov ax, data    
    mov ds, ax      
    mov es, ax  
    
    lea dx, menu
    mov ah,9 ;funcao
    int 21h
    
    lea dx, numero1
    mov ah,9
    int 21h
    
    mov ah,1
    int 21h
    mov valor1, al
    
    lea dx, numero2
    mov ah,9
    int 21h
       
    mov ah,1
    int 21h
    mov valor2, al 
    
    lea dx, menu
    mov ah,9
    int 21h 
    
    mov ah,1  ;le e colocam em al
    int 21h
        
    cmp al,'+'  ; compara com o que esta em al
    jz soma
  	cmp al,'-'
    jz subtracao
    cmp al,'*'
    jz multiplicacao
    cmp al,'/'
    jz divisao
    jnz fim


;--------------------------------------------------------- Operacoes -------------------------------------------------------------------------------------;           
    
soma:
    mov ah, valor1 ; move o valor1 para ah
    mov al, valor2 ; move o valor2 para al
    add al,ah ; o add e a soma de ah com al ou seja os dois valores o resultaod fica em al
    aaa ; e o acerto para decimal
    add al, 30h ; add al,30 e o acerto para ascii correcto para poderes mostrar no ecra
    jmp fim ; e so para saltar para o fim do programa para o label fim:

Subtracao:
    mov ah, valor2 ; move o valor1 para ah
    mov al, valor1 ; move o valor2 para al
    sub al,ah ; o sub e a subtracao de ah com al ou seja os dois valores o resultaod fica em al
    aas ; e o acerto para decimal
    add al, 30h ; add al,30 e o acerto para ascii correcto para poderes mostrar no ecra
    jmp fim ; e so para saltar para o fim do programa para o label fim:  
    
Multiplicacao:
    mov ax,0   ; limpa valores ax
    mov al, valor1     ; move o valor1 para ah
    sub al,30h 
    mov bl, valor2     ; move o valor2 para al
    sub bl,30h ; o div e a divisao de ah com al ou seja os dois valores o resultaod fica em al
    mul bl
    add al, 30h ; add al,30 e o acerto para ascii correcto para poderes mostrar no ecra
    jmp fim ; e so para saltar para o fim do programa para o label fim:      

Divisao:
    mov ax,0  ;limpa valores em ax
    mov al, valor1   ; move o valor1 para ah
    sub al,30h 
    mov bl, valor2 ; move o valor2 para al
    sub bl,30h ; o div e a divisao de ah com al ou seja os dois valores o resultaod fica em al
    div bl
    add al, 30h ; add al,30 e o acerto para ascii correcto para poderes mostrar no ecra
    jmp fim ; e so para saltar para o fim do programa para o label fim:   
    
    fim:   
    mov valor,al
    lea dx, resul
    mov ah,9
    int 21h 
    lea dx, valor
    mov ah,9
    int 21h 
    



;--------------------------------------------------------- Sair para DOS --------------------------------------------------------------------------------------------;
    
mov ax, 4c00h   ;funcao para sair para o DOS
    int 21h
ends

end start 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De certeza que foste tu que a fazer o código?

Porque se foste deverias saber o que fazem as coisas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim fiz mas foi um bocado a pressa nós ja tinhamos partes feitas depois so juntei e existem algumas coisas que nao percebo podes ajudar me sff?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim fiz mas foi um bocado a pressa nós ja tinhamos partes feitas depois so juntei e existem algumas coisas que nao percebo podes ajudar me sff?

Vais dizendo o que não percebes, para te tentar ajudar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho duvida em explicar o que faz cada uma linha de codigo abaixo:

;-------------------------------------------------- Leitura dos numeros inseridos -----------------------------------------------------------------------------------------------;

code segment
start:

    mov ax, data    
    mov ds, ax      
    mov es, ax  

    lea dx, menu
    mov ah,9 ;funcao
    int 21h

    lea dx, numero1
    mov ah,9
    int 21h

    mov ah,1
    int 21h
    mov valor1, al

    lea dx, numero2
    mov ah,9
    int 21h

    mov ah,1
    int 21h
    mov valor2, al 

    lea dx, menu
    mov ah,9
    int 21h 

    mov ah,1  ;le e colocam em al
    int 21h

    cmp al,'+'  ; compara com o que esta em al
    jz soma
  	cmp al,'-'
    jz subtracao
    cmp al,'*'
    jz multiplicacao
    cmp al,'/'
    jz divisao
    jnz fim

Se não souber isto de cor estou chumbado , pedia ajuda aqui as pessoas que percebem muito disto se me dessem uma pequena ajuda!!

Obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

code segment
    mov ax, data  ;passa para o registo AX o endereço dos dados em memória
    mov ds, ax     ;passa para o registo DS (Data Segment) o endereço dos dados
    mov es, ax     ;passa para o registo ES (Extra Segment) o endereço dos dados

    lea dx, menu ; transfere o endereço da variável 'menu' para o registo DX
    mov ah, 9      ; número da função a ser executada pela interrupção
    int 21h           ; chamada da interrupção 21 com a função 9 que passará uma string para o standard output (STDOUT)

    mov ah,1             ;numero da função a ser executada
    int 21h                 ;chamada da interrupção 21 com a função 1 que espera por uma tecla do STDIN que ficara armazenada no registo AL
    mov valor1, al     ;passagem do conteudo do registo AL para a variável 'valor1'

    cmp al,'+'        ; compara com o que esta no registo AL com '+'
    jz soma           ; se forem iguais salta para o label soma

Expliquei o essencial as restantes partes do código são semelhantes

Penso que será algo deste género já não estou com assembly muito fresca na memória, mas corrijam-me se me tiver enganado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora