;Tatiana Pereira Filgueiras RA:02078988 ;Cesar Henrique Kallas RA:02099225 ;Turma:Terca Feira TITLE PRIMEIRO_TRABALHO_EXTRA_CLASSE .MODEL SMALL .STACK 100H .DATA CR EQU 0DH LF EQU 0AH NUM2 DB ?,'$' AVISO DB 'OPERANDO/NUMERO INVALIDO!$' OVER DB 'RESULTADO EXCEDE LIMITE DE 0 A 9!$' QUESTAO DB 'Deseja Continuar?$' MENSAGEM1 DB 'Entre com o 1 operando: $' MENSAGEM2 DB 'Entre com o 2 operando: $' MENSAGEM3 DB 'OPERADOR:$' OPER DB ?,'$' RESPOSTA DB CR,LF,'Resultado:' NUM1 DB ?,'$' ;todos os resultados irao para variavel num1 .CODE ;iniciando o corpo do programa MAIN PROC ;iniciando DS para as mensagens MOV AX,@DATA MOV DS,AX ;pronto! JMP PRIMEIRO PERGUNTA: LEA DX,QUESTAO ;mensagem:deseja continuar? MOV AH,9 ;preparando para exibir INT 21H MOV AH,1 ;entrada da resposta INT 21H; MOV OPER,AL CMP OPER,'Y' ;compara se caracter digitado e igual a y JNE FIM ;se nao for vai pro fim,se for segue o que tem abaixo(comeco da leitura) PRIMEIRO: LEA DX,MENSAGEM1 MOV AH,9 ;preparando para exibir INT 21H ;mensagem:Entre com o 1 operando MOV AH,1 INT 21H ;entrada do 1 operando CMP AL,'9' ;compara o digitado com caracter 9 JG NOTIFICA ;se for maior vai para a funcao notifica CMP AL,'0' ;compara o digitado com caracter 0 JL NOTIFICA ;se for menor pula para a funcao notifica MOV NUM1,AL ;num1 agora possui o 1 operando MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H JMP SEGUNDO ;pula para a funcao de leitura do segundo numero ; FIM: ;a func fim esta aqui pois tem que estar proxima da func pergunta que a chama MOV AH,4CH INT 21H ;saindo do programa SEGUNDO: ;funcao que le segundo numero LEA DX,MENSAGEM2 MOV AH,9 INT 21H ;mensagem:Entre com o 2 operando MOV AH,1 INT 21H ;entrada do 2 operando CMP AL,'9' ;compara o digitado com caracter 9 JG NOTIFICA ;se for maior vai para a funcao notifica CMP AL,'0' ;compara o digitado com caracter 0 JL NOTIFICA ;se for menor pula para a funcao notifica MOV NUM2,AL ;num2 agora possui 2 operando ; MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H LEA DX,MENSAGEM3 MOV AH,9 INT 21H ;mensagem:operador: MOV AH,1 INT 21H ;entrada do operador MOV OPER,AL ;oper agora possui o caracter digitado JMP COMPARA ;pula para a funcao que vai comparar o operador NOTIFICA: ;funcao que notifica entrada invalida de caracteres LEA DX,AVISO MOV AH,9 ;preparando para exibir INT 21H ;mensagem:operando/numero invalido JMP PERGUNTA ;pula para a funcao pergunta SOMA: ;funcao para somar 2 numeros MOV BL,NUM2 ;bl tem o caracter pertencente a num2 ADD NUM1,BL ;num1=(num1)+bl SUB NUM1,30H ;num1=(num1)-30 CMP NUM1,'9' ;compara se o resultado e maior que caracter 9 JG NOTIFIC ;se for vai para funcao notific CMP NUM1,'0' ;compara se o resultado e menor que caracter 0 JL NOTIFIC ;se for vai para funcao notific LEA DX,RESPOSTA ;se estiver tudo ok,exibe o resultado da soma MOV AH,9 ;preparando para exibir INT 21H ;exibindo soma JMP PERGUNTA ;vai para a funcao pergunta SUBT: MOV BL,NUM2 ;bl recebe caracter pertencente a num2(2 numero) SUB NUM1,BL ;num1=(num1)-bl ADD NUM1,30H ;num1=(num1)+30 CMP NUM1,'9' ;compara se o resultado e maior que caracter 9 JG NOTIFIC ;se for vai para funcao notifica CMP NUM1,'0' ;compara se o resultado e menor que caracter 0 JL NOTIFIC ;se for vai para funcao notific LEA DX,RESPOSTA ;se estiver tudo ok,exibe o resultado da subtracao MOV AH,9 ;preparando para exibir INT 21H ;exibindo subtracao JMP PERGUNTA ;vai para a funcao pergunta NOTIFIC: LEA DX,OVER MOV AH,9 ;preparando para exibir INT 21H ;mensagem:numero excede limite de 0 a 9 JMP PERGUNTA COMPARA: CMP OPER,'+' ;compara caracter digitado com caracter + JE SOMA ;se igual vai para a funcao soma CMP OPER,'-' ;compara caracter digitado com caracter - JE SUBT ;se igual vai para a funcao subt CMP OPER,'*' ;compara caracter digitado com caracter * JE VEZES ;se igual vai para a funcao vezes CMP OPER,'/' ;compara caracter digitado com caracter / JE DIVI ;se igual vai para a funcao divi ; JNE NOTIFICA ;caso nenhum dos caracteres acima for encontrado vai para a funcao notifica VEZES: SUB NUM2,1H ;(num2)-1 MOV CL,NUM2 ;cl=num2 SUB CL,30H ;cl=cl-30 MOV BL,NUM1 ;bl tem valor de num1 JMP MULTIPL ;pula para funcao multipl MULTIPL: ADD NUM1,BL ;num1 + bl SUB NUM1,30H ;num1=num1-30 DEC CL ;cl e decrementado JNZ MULTIPL ;pula para funcao multipl ate cl=0 CMP NUM1,'9' ;compara resultado com caracter 9 JG NOTIFIC ;se maior que 9,vai para funcao notific CMP NUM1,'0' ;compara resultado com caracter 0 JL NOTIFIC ;se menor que 0,vai para funcao notific LEA DX,RESPOSTA ;se tudo estiver ok,mostra a multiplicacao MOV AH,9 ;preparando para exibir INT 21H ;exibindo multiplicacao JMP PERGUNTA ;vai para a funcao pergunta MENOS: ;funcao chamada por funcao divide(abaixo) SUB NUM1,1H ;num1=(num1)-1 DEC CL ;cl e decrementado JNZ MENOS ;enquanto cl diferente de zero vai para funcao menos ADD NUM1,30H ;num1=num1 + 30 CMP NUM1,'9' ;compara resultado com caracter 9 JG NOTIFIC ;se maior que 9,vai para funcao notific CMP NUM1,'0' ;compara resultado com caracter 0 JL NOTIFIC ;se menor que 0,vai para funcao notific LEA DX,RESPOSTA ;se tudo estiver ok,mostra a divisao MOV AH,9 ;preparando para exibir INT 21H ;exibindo divisao JMP PERGUNTA ;vai para a funcao pergunta DIVI: ;funcao divi chamada pelo caracter / MOV CL,NUM2 ;cl=num2 SUB CL,31H ;cl=cl-31 MOV BL,NUM2 ;bl=num2 JMP DIVIDE ;vai para funcao divide DIVIDE: SUB NUM1,BL ;num1=num1-bl DEC CL ;cl e decrementado JNZ MENOS ;se cl nao for 0 pula para funcao menos MAIN ENDP ;fim do corpo main END ;fim do programa