算术运算程序设计.doc
文本预览下载声明
dispc macro char
mov dl,char
mov ah,2
int 21h
endm
datas segment
x db ?
y db ?
c db ? ;保存运算符
datas ends
codes segment
assume cs:codes,ds:datas
go: mov ax,datas
mov ds,ax ;段填充
l1: call input;接收第1个数
mov x,al;保存第一个数
l2: mov ah,1
int 21h ;接收运算符
cmp al,+
je l3
cmp al,-
je l3
cmp al,*
je l3
cmp al,/
je l3
call error;如果不是合法的运算符就错误处理
jmp l2
l3: mov c,al ;保存运算符
call input;接收第2个数
mov y,al;保存第一个数
dispc =
cmp c,+
jne l5
mov al,x
add al,y ;加法运算
l4: aam
or ax,3030h
push ax
dispc ah
pop ax
dispc al
jmp l10
l5: cmp c,-
jne l7
mov al,x
sub al,y ;减法运算
cmp al,0
jge l6 ;带符号数比较,大于等于时转移
push ax
dispc -
pop ax
neg al ;负数求绝对值
l6: or al,30h
dispc al
jmp l10
l7: cmp c,*
jne l8
mov al,x
mul y ;乘法运算
jmp l4
l8: mov al,x
xor ah,ah;将AH清0
div y ;除法运算
or ax,3030h
mov bx,ax
dispc bl ;显示商
cmp bh,0
je l10
mov cx,6
l9: dispc .
loop l9 ;显示6个点
dispc bh ;显示余数
l10: dispc 0dh ;回车
dispc 0ah ;换行
jmp l1
input proc ;定义子程序接收数字
l11: mov ah,1
int 21h ;键盘输入并回显
cmp al,1bh ;判断是否为ESC键
jne l12
mov ah,4ch
int 21h ;退出
l12: cmp al,0
jae l14 ;若al=0,则跳转
l13: call error;非法数字符则错误处理
jmp l11
l14: cmp al,9
ja l13
and al,0fh;将数字符转换成数值
ret ;子程序返回
input endp
error proc
dispc 8 ;退格
dispc 20h ;空格
dispc 8 ;退格
ret
error endp
codes ends
end go
显示全部