主题:大家帮忙看个程序
通过键盘输入两个整数 然后按1作加法运算 按2作减法运算 按3做乘法运算 按4作除法运算 我是通过一个地址表选择的 但是输入两个数后算不出结果来 我觉得可能是缓冲区被改变了 大家帮忙看一下 谢了
data segment
buff dw 8 dup(0)
dw '$'
buff1 dw 4 dup(0)
dw 'h',0DH,0AH,'$'
comtab dw com1,com2,com3,com4
mess0 db 'Please input:$'
mess1 db 'A=$'
mess2 db 'B=$'
mess3 db '(1) add:$'
mess4 db '(2) sub:$'
mess5 db '(3) mul:$'
mess6 db '(4) div:$'
mess7 db 'error.$'
data ends
;
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset mess0
call A1
mov dx,offset mess1
call A1
mov dx,offset buff
call A2
mov bx,offset buff
call A6
mov buff,ax
call newline
mov dx,offset mess2
call A1
call A2
call newline
mov bx,offset buff
call A6
mov buff+1,ax
mov dx,offset mess3
call A1
mov dx,offset mess4
call A1
mov dx,offset mess5
call A1
mov dx,offset mess6
call A1
call A4 ;通过键盘输入 选择做那项功能运算
mov dl,al
xor dh,dh
call A3
sub al,1
xor ah,ah
mov bx,ax
jmp comtab[bx]
com1: ;加法运算
push ax
push bx
mov ax,buff
mov bx,buff+1
add ax,bx
mov bx,offset buff1
call A5
call newline
mov dx,offset buff1
mov ah,9
int 21h
pop bx
pop ax
jmp OK
com2: ;减法运算
push ax
push bx
mov ax,buff
mov bx,buff+1
sub ax,bx
mov bx,offset buff1
call A5
call newline
mov dx,offset buff1
mov ah,9
int 21h
pop bx
pop ax
jmp OK
com3: ;乘法运算
push ax
push bx
mov ax,buff
mov bx,buff+1
mul bx
mov bx,offset buff1
call A5
call newline
mov dx,offset buff1
mov ah,9
int 21h
pop bx
pop ax
jmp OK
com4: ;除法运算
push ax
push bx
mov ax,buff
mov bx,buff+1
div bl
mov bx,offset buff1
call A5
call newline
mov dx,offset buff1
mov ah,9
int 21h
pop bx
pop ax
jmp OK
OK:
mov ax,4ch
int 21h
A1 proc; 9号功能调用,显示一个字符串
mov AH,9
int 21h
ret
A1 endp
A2 proc ;
mov ah,0ah
int 21h
ret
A2 endp
newline proc;通过显示回车符形成回车,通过显示换行符形成换行
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
newline endp
A3 proc ;把ASCII码转换成二进制数形式
mov al,dh
and al,0fh
mov ah,10
mul ah
mov ah,dl
and ah,0fh
add al,ah
ret
A3 endp
A4 proc ;1号功能调用,通过键盘输入一个字符
mov ah,1
int 21h
ret
A4 endp
error proc
push dx
mov dx,offset mess7
call A1
pop dx
ret
error endp
A5 proc ;把16位二进制数转换为5位十进制数ASCII码
mov si,5
mov cx,10
btoasc1:
xor dx,dx
div cx
add dl,30h
dec si
mov [bx][si],dl
or si,si
jnz btoasc1
ret
A5 endp
A6 proc ;把用ASCII码表示的十进制数字符串转换成为二进制数
push bx
push cx
push dx
xor ax,ax
mov cl,[bx]
inc bx
xor ch,ch
jcxz dtobin2
dtobin1:
mov dx,10
mul dx
mov dl,[bx]
inc bx
and dl,0fh
xor dh,dh
add ax,dx
loop dtobin1
dtobin2:
pop dx
pop cx
pop bx
ret
A6 endp
code ends
end start
data segment
buff dw 8 dup(0)
dw '$'
buff1 dw 4 dup(0)
dw 'h',0DH,0AH,'$'
comtab dw com1,com2,com3,com4
mess0 db 'Please input:$'
mess1 db 'A=$'
mess2 db 'B=$'
mess3 db '(1) add:$'
mess4 db '(2) sub:$'
mess5 db '(3) mul:$'
mess6 db '(4) div:$'
mess7 db 'error.$'
data ends
;
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset mess0
call A1
mov dx,offset mess1
call A1
mov dx,offset buff
call A2
mov bx,offset buff
call A6
mov buff,ax
call newline
mov dx,offset mess2
call A1
call A2
call newline
mov bx,offset buff
call A6
mov buff+1,ax
mov dx,offset mess3
call A1
mov dx,offset mess4
call A1
mov dx,offset mess5
call A1
mov dx,offset mess6
call A1
call A4 ;通过键盘输入 选择做那项功能运算
mov dl,al
xor dh,dh
call A3
sub al,1
xor ah,ah
mov bx,ax
jmp comtab[bx]
com1: ;加法运算
push ax
push bx
mov ax,buff
mov bx,buff+1
add ax,bx
mov bx,offset buff1
call A5
call newline
mov dx,offset buff1
mov ah,9
int 21h
pop bx
pop ax
jmp OK
com2: ;减法运算
push ax
push bx
mov ax,buff
mov bx,buff+1
sub ax,bx
mov bx,offset buff1
call A5
call newline
mov dx,offset buff1
mov ah,9
int 21h
pop bx
pop ax
jmp OK
com3: ;乘法运算
push ax
push bx
mov ax,buff
mov bx,buff+1
mul bx
mov bx,offset buff1
call A5
call newline
mov dx,offset buff1
mov ah,9
int 21h
pop bx
pop ax
jmp OK
com4: ;除法运算
push ax
push bx
mov ax,buff
mov bx,buff+1
div bl
mov bx,offset buff1
call A5
call newline
mov dx,offset buff1
mov ah,9
int 21h
pop bx
pop ax
jmp OK
OK:
mov ax,4ch
int 21h
A1 proc; 9号功能调用,显示一个字符串
mov AH,9
int 21h
ret
A1 endp
A2 proc ;
mov ah,0ah
int 21h
ret
A2 endp
newline proc;通过显示回车符形成回车,通过显示换行符形成换行
push ax
push dx
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
pop dx
pop ax
ret
newline endp
A3 proc ;把ASCII码转换成二进制数形式
mov al,dh
and al,0fh
mov ah,10
mul ah
mov ah,dl
and ah,0fh
add al,ah
ret
A3 endp
A4 proc ;1号功能调用,通过键盘输入一个字符
mov ah,1
int 21h
ret
A4 endp
error proc
push dx
mov dx,offset mess7
call A1
pop dx
ret
error endp
A5 proc ;把16位二进制数转换为5位十进制数ASCII码
mov si,5
mov cx,10
btoasc1:
xor dx,dx
div cx
add dl,30h
dec si
mov [bx][si],dl
or si,si
jnz btoasc1
ret
A5 endp
A6 proc ;把用ASCII码表示的十进制数字符串转换成为二进制数
push bx
push cx
push dx
xor ax,ax
mov cl,[bx]
inc bx
xor ch,ch
jcxz dtobin2
dtobin1:
mov dx,10
mul dx
mov dl,[bx]
inc bx
and dl,0fh
xor dh,dh
add ax,dx
loop dtobin1
dtobin2:
pop dx
pop cx
pop bx
ret
A6 endp
code ends
end start