自己写了很久,终于算是小小的完结了。(偷懒,不愿写注释)
本程序的输入格式要求如下例:
1+(9*9+(99-33)/3+(22*34))=
输入完计算机就会给出相应结果
但是结果范围(包括中间每部运算的结果)必需0~65553之间
同时,除法运算结果只能取整,并且不支持小数运算。
期望自己通过个人的学习,完成那些不能完成的模块。
现在程序主要5个子程序。
;----------------------------;
data segment
number1 dw 100 dup(?)
number3 dw 100 dup(?)
number4 dw 100 dup(?)
result dw 0
c dw 0
c1 dw 0
c2 dw 0
clc1 dw 0
clc2 dw 0
otp dw 0
Table dw 10000,1000,100,10,1 ;定义输出时要用到的除数
welc DB 'Welcome to the system',13,10
DB 'The function of the program is arithmetic calculations',13,10
DB 'Please enter your formula ....',13,10,13,10,'$'
error1 db ' Error:your input is incorrect!',13,10,'$'
over db 'Error:The reuslt is overflow!',13,'$'
sexit db 'The program is lay off....','$'
data ends
code segment
main proc far
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
lea dx,welc
mov ah,09h
int 21h
start1:mov bx,-1
mov si,0
mov di,30
mov cx,0
mov c,0
mov c1,0
mov c2,0
call write
call loopcount
call output
exit:
mov ah,4ch
int 21h
;--------------------输出最终结果的子程序
output proc near
lea si,Table
mov c,si
add c,8
mov cx,5
mov ax,result
mov otp,0
outgo: xor dx,dx
div word ptr [si] ;除bp值求万位,千位,百位,十位,个位 ;商存在了ax中,余数存在了dx中
or al,30h ;转换成ascll码
mov bx,dx ;将dx的值存入bx中,因为下面输出ax值时会改变dx值
cmp si,c
je outgo2
cmp o