📄 2.asm
字号:
datasg segment
mess1 db 'Please enter the digit of number:','$'
mess2 db 13,10,'Please enter the first number:','$'
mess3 db 13,10,'Please enter the second number:','$'
mess4 db 13,10,'Please select operation(+,-,*,/):','$'
mess5 db 13,10,'The result of operation is:','$'
mess6 db 13,10, 'continue?(Y/N)','$'
;message define
data1 db 80,?,?,252 dup('$')
data2 db 80,?,?,252 dup('$')
data3 db 512 dup(0)
data4 db 255 dup(0)
digit db 20,?,?,3 dup(?)
opera db 20,?,?,3 dup(?)
oper db 20,?,?,3 dup(?)
n db ?
m db ?
i dw ?
;data define
datasg ends
prognam segment
main proc far
assume cs:prognam,ds:datasg
start: push ds
sub ax,ax
push ax
mov ax,datasg
mov ds,ax
mov es,ax ;the main program start
r4: lea dx, mess1
mov ah, 09h
int 21h
lea dx, digit
mov ah, 0ah
int 21h
lea dx, mess2
mov ah, 09h
int 21h
lea dx, data1
mov ah, 0ah
int 21h
lea dx, mess3
mov ah, 09h
int 21h
lea dx, data2
mov ah, 0ah
int 21h
lea dx, mess4
mov ah, 09h
int 21h
lea dx, opera
mov ah, 0ah
int 21h
mov al, opera+2
cmp al, 2bh
js r1
cmp al, 2ch
js r2
cmp al, 2eh
js r3
call sub4
jmp r5
r1: call sub3
jmp r5
r2: call sub1
jmp r5
r3: call sub2
r5: lea dx, mess6
mov ah, 09h
int 21h
lea dx, oper
mov ah, 0ah
int 21h
mov al, oper+2
cmp al, 50h
jns r4
ret
;****************************************************
sub1 proc near
mov al, digit+2
and al, 0fh
mov bl, 10h
mul bl
mov bx, ax
lea si, data1+1[bx]
lea di, data2+1[bx]
mov cx, bx
add cx, 01h
mov n , 00h
l1:
mov al, [si]
mov dl, [di]
add al, dl
add al, n
mov n , 00h
cmp al, 6ah
js l2
add al, 06h
mov n , 01h
l2:
and al, 0fh
add al, 30h
mov [si], al
dec di
dec si
dec cx
jnz l1
mov [si], byte ptr 30h
cmp n , 01h
js lb
mov [si], byte ptr 31h
lb:
lea dx, mess5
mov ah, 09h
int 21h
lea dx, data1+1
mov ah, 09h
int 21h
ret
sub1 endp
;****************************************************
sub2 proc near
mov n , 00h
mov m , 00h
mov al, digit+2
and al, 0fh
mov bl, 10h
mul bl
mov bx, ax
inc bx
mov cx, bx
lea si, data1+2
lea di, data2+2
l5:
mov al, [si]
mov dl, [di]
sub al, dl
js l3
and al, al
jnz ld
inc si
inc di
dec cx
jnz l5
ld:
mov cx, bx
dec bx
lea si, data1+1[bx]
lea di, data2+1[bx]
jmp l4
l3:
mov cx, bx
dec bx
lea si, data2+1[bx]
lea di, data1+1[bx]
mov m , 01
l4:
mov al, [si]
mov dl, [di]
sub al, n
mov n , 00h
sub al, dl
jns l7
sub al, 06h
mov n , 01h
l7:
and al, 0fh
add al, 30h
mov [si], al
dec bx
dec si
dec di
dec cx
jnz l4
lea bx, data1+1
mov [bx], byte ptr 20h
cmp m , 01h
js lc
lea bx, data2+1
mov [bx], byte ptr 2dh
lc:
lea dx, mess5
mov ah, 09h
int 21h
lea dx, data1+1
cmp m , 01h
js l6
lea dx, data2+1
l6: mov ah, 09h
int 21h
ret
sub2 endp
;****************************************************
sub3 proc near
mov n , 00h
mov i , 00h
mov al, digit+2
and al, 0fh
mov bl, 10h
mul bl
mov bx, ax
mov ch, al
add ch, 01h
mov ah, ch
dec ah
mov bp, 00h
lea si, data1+1[bx]
lea di, data4+1[bx]
mov cl, data2+2[bp]
and cl, 0fh
l8:
mov al, [si]
and al, 0fh
mov dl, [di]
add dl, n
mov n , 00h
add dl, al
cmp dl, 0ah
js la
add dl, 06h
mov n , 01h
and dl, 0fh
la:
mov [di], dl
dec si
dec di
dec ch
jnz l8 ;加一次
mov dl, [di]
cmp n , 01h
js s1
add dl, 01h
mov [di], dl
s1:
lea si, data1+1[bx]
lea di, data4+1[bx]
mov ch, bl
inc ch
dec cl
jnz l8
jmp near ptr s6
s5:
jmp near ptr l8
s6: push bp
mov bp, bx
add bp, i
lea si, data3+1[bp]
lea di, data4+1[bx]
push cx
mov cx, bx
add cx, 02h
mov n , 00h
s2:
mov al, [si]
mov dl, [di]
add al, dl
add al, n
mov n , 00h
cmp al, 0ah
js s3
add al, 06h
mov n , 01h
s3:
and al, 0fh
mov [si], al
mov [di], byte ptr 00h
dec di
dec si
dec cx
jnz s2
mov al, [si]
cmp n , 01h
js s4
add al, 01h
mov [si], dl
s4:
pop cx
pop bp
inc bp
inc i
mov cl, data2+2[bp]
and cl, 0fh
lea si, data1+1[bx]
lea di, data4+1[bx]
dec ah
jnz s5
lea dx, mess5
mov ah, 09h
int 21h
add bx, bx
lea si, data3+2[bx]
mov al, 24h
mov [si], al
mov cx, bx
lea si, data3+1
s7:
mov al, [si]
add al, 30h
mov [si], al
inc si
dec cx
jnz s7
lea dx, data3+1
mov ah, 09h
int 21h
ret
sub3 endp
;****************************************************
sub4 proc near
mov n , 00h
mov m , 00h
mov al, digit+2
and al, 0fh
mov bl, 10h
mul bl
mov bx, ax
inc bx
mov cx, bx
lea si, data1+2
lea di, data2+2
ll5:
mov al, [si]
mov dl, [di]
sub al, dl
js ll3
and al, al
jnz lld
inc si
inc di
dec cx
jnz ll5
lld:
mov cx, bx
dec bx
lea si, data1+1[bx]
lea di, data2+1[bx]
jmp ll4
ll3:
lea dx, mess5
mov ah, 09h
int 21h
add m, 30h
mov dl, m
mov ah,02h
int 21h
ret
ll4:
mov al, [si]
mov dl, [di]
sub al, n
mov n , 00h
sub al, dl
jns ll7
sub al, 06h
mov n , 01h
ll7:
and al, 0fh
add al, 30h
mov [si], al
dec si
dec di
dec cx
jnz ll4
mov cx, bx
lea si, data1+2
lea di, data2+2
inc m
jmp near ptr ll5
ret
sub4 endp
;****************************************************
main endp
prognam ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -