⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2.asm

📁 多位数的四则运算
💻 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 + -