当前位置:文档之家› 汇编语言实现简单的计算器运算

汇编语言实现简单的计算器运算

汇编语言实现简单的计算器运算
DA TAS SEGMENT
x dw 0
op db 0
DIV ARRAY dw 10000,1000,100,10,1
DA TAS ENDS
stack segment
db 100 dup(?)
stack ends
CODES SEGMENT
ASSUME CS:CODES,DS:DA TAS,ss:stack START:
MOV AX,DATAS
MOV DS,AX
next:
call do_cal ;输入第一个表达式如:5+3=
call show ;输出表达式结果
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h ;回车换行
jmp next ;跳回输入第二个表达式
do_cal: ;输入表达式
call input ;输入数
cmp al,'e'
jz exit
MOV OP,AL
CMP OP,'+'
jnz next1
call do_add
jmp next5
next1:
CMP OP,'-'
JNZ NEXT2
CALL DO_SUB
JMP NEXT5
NEXT2:
CMP OP,'*'
JNZ NEXT3
CALL DO_MUL
JMP NEXT5
NEXT3:
CMP OP,'/'
JNZ NEXT4
CALL DO_DIV
jmp next5
NEXT4:
cmp op,'='
call show
next5:ret ;判断运算符input: ;输入数字xor bx,bx
mov cx,10
skip: MOV AH,1
INT 21H
cmp al,'0'
jl skip1
cmp al,'9'
jg skip1
push ax
mov ax,bx
mul cx
mov bx,ax
pop ax
and al,0fh
xor ah,ah
add bx,ax
jmp skip
skip1:ret
do_add: ;加法
mov x,bx
call input ;输入第二个数
add bx,x
ret
do_sub: ;减法
mov x,bx
call input ;输入第二个数
sub x,bx
mov bx,x
ret
do_mul: ;乘法
mov x,bx
call input ;输入第二个数
mov ax,bx
mul x
mov bx,ax
ret
do_div: ;除法
mov x,bx
xor dx,dx
call input ;输入第二个数
mov ax,x
cwd
div bx
mov bx,ax
ret
show: ;显示输出
MOV CX,5
MOV AX,bx
MOV SI,OFFSET DIV ARRAY LP1: mov dx,0
DIV WORD PTR [SI]
PUSH DX
ADD AL,30H
MOV DL,AL
MOV AH,2
INT 21H
add si,2
POP AX
LOOP LP1
ret
exit: MOV AH,4CH
INT 21H
CODES ENDS
END START。

相关主题