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

📄 jiajian.asm

📁 多位的加减运算
💻 ASM
字号:
data segment
str1 db 20
     db ?
     db 20 dup(?)
str2 db 20
     db ?
     db 20 dup(?)
str3 db 20 dup(?)
     db '$'
str4 db 'input the first data:$'  
str5 db 'input the second data:$'
str6 db 'the result is:$'
ab db 0,0,0
data ends

;======================================
code segment
	assume cs:code,ds:data

;=====================
start:
	mov al,03h
	mov ah,0h
	int 10h
 
	mov ah,2
	mov bh,0h
	mov dh,10
	mov dl,20
	int 10h                    ;光标 (10,20)

	mov ax,data
	mov ds,ax
	mov dx,offset str4
	mov ah,9h
	int 21h

	mov ah,0ah
	mov dx,offset str1
	int 21h                    ;输入数据1

;-----------------------------------
	mov ah,2
	mov bh,0
	mov dh,12
	mov dl,20
	int 10h                    ;光标 (12,20)

	mov ax,data
	mov ds,ax
	mov dx,offset str5
	mov ah,9h
	int 21h

	mov ah,0ah
	mov dx,offset str2
	int 21h                       ;输入数据2





;=================================================================
	mov al,str1+2
	mov ah,str2+2
	mov bl,1
	cmp al,'-'		;  0:正  1:负
	jnz j1			  
	mov ab,bl	;设ab: str1的符号

j1:
	cmp ah,'-'		; ab+1: str2的符号
	jnz j2
	mov ab+1,bl

j2:	
	mov bh,ab
	cmp bh,ab+1
	jz addjext
	jmp near ptr subjext
	



;============================================加法
 
;----------------比较
 
addjext:
	mov ax,data
	mov ds,ax
	mov es,ax
 
	mov ah,str1+1
	mov al,str2+1
	cmp ah,al
	jb le2
le1:
	sub ah,al
	mov dh,ah		;dh=chang-duan
	mov cl,str1+1

	mov ah,0
	mov al,str1+1	
	mov si,offset str1+1
	add si,ax
	mov al,str2+1
	mov di,offset str2+1
	add di,ax
	
	jmp jia
le2:
	sub al,ah
	mov dh,al		;比较后存入ab+1
	mov cl,str2+1

	mov ah,0
	mov al,str2+1
	mov si,offset str2+1
	add si,ax
	mov al,str1+1
	mov di,offset str1+1
	add di,ax
	
jia:

	mov bx,offset str3+19

	mov dl,0                                ;进位 ----dl
	mov ch,0

	mov ah,ab
	cmp ah,0
	jz add1
	sub cl,1		
;---------------------------------加法内容

add1:
	cmp cl,dh
	jbe pan	
	mov al,[di]
	sub al,30h
	jmp add2
pan:
	mov al,0	  
add2:		
	mov ah,[si]
	sub ah,30h
	add al,ah
	add al,dl

	mov dl,0
	cmp al,0ah
	jb jm1
	sub al,0ah
	mov dl,1
jm1:
	add al,30h                                ;result------>al
	mov [bx],al
	dec bx
	dec si
	dec di
  
	loop add1
;- - - - - -- - - -- -  符号
	cmp dl,0
	jnz jj
	inc bx
	jmp aj

jj:	add dl,30h
	mov [bx],dl
	
aj:
	dec bx
	mov ah,ab
	cmp ah,0
	jz fuhao	
	mov byte ptr [bx],'-'
fuhao:	
	jmp near ptr pab1

;=======================================================减法
;---------------------------------------确定情况

subjext:
	mov ax,data
	mov ds,ax
	mov es,ax
	
	mov ah,str1+2
	cmp ah,'-'
	jz state1
	jmp near ptr state2
state1:
	mov ah,str1+1
	sub ah,1
	cmp ah,str2+1
	jnz sec_B
sec_A:
	mov cl,ah
	mov ch,0
	mov si,offset str1+3
	mov di,offset str2+2
a:
	mov ah,[si]
	mov al,[di]
	inc si
	inc di
	cmp ah,al
	loopz a
	cmp cl,0
	jnz c1
	jmp near ptr ee
c1:
	cmp ah,al
	jb sec_b1

sec_a1:
	mov al,str1+1
	mov ah,0
	mov si,offset str1+1
	add si,ax
	sub al,1
	mov cl,al
	mov ch,0
	mov al,str2+1
	mov di,offset str2+1
	add di,ax
	mov ah,cl
	sub ah,al
	mov dl,ah
	mov al,1
	mov ab+2,al
	jmp jianfa
sec_b1:
	mov ah,0
	mov al,str2+1
	mov si,offset str2+1
	add si,ax
	mov cl,al
	mov ch,0
	mov al,str1+1
	mov di,offset str1+1
	add di,ax
	sub al,1
	mov ah,cl
	sub ah,al
	mov dl,ah
	mov al,0
	mov ab+2,al
	jmp jianfa

sec_B:
	mov al,str2+1
	cmp ah,al
	ja sec_a1
	jmp sec_b1


state2:
	mov ah,str2+1
	mov al,str1+1
	sub ah,1
	cmp ah,al
	jnz sec_D
sec_C:
	mov cl,ah
	mov ch,0
	mov si,offset str2+3
	mov di,offset str1+2

b:	
	mov ah,[si]
	mov al,[di]
	inc si
	inc di
	cmp ah,al
	loopz b
	cmp cl,0
	jnz c2
	jmp near ptr ee
c2:
	cmp ah,al
	jb sec_d1
sec_c1:
	mov ah,0
	mov al,str2+1
	mov si,offset str2+1
	add si,ax
	sub al,1
	mov cl,al
	mov ch,0
	mov al,str1+1
	mov di,offset str1+1
	add di,ax
	mov ah,cl
	sub ah,al
	mov dl,ah
	mov al,1
	mov ab+2,al
	jmp jianfa

sec_d1:
	mov ah,0
	mov al,str1+1
	mov si,offset str1+1
	add si,ax
	mov cl,al
	mov ch,0
	mov al,str2+1
	mov di,offset str2+1
	add di,ax
	mov ah,cl
	sub al,1
	sub ah,al
	mov dl,ah
	mov al,0
	mov ab+2,al
	jmp jianfa

sec_D:	
	cmp ah,al
	ja sec_c1
	jmp sec_d1


;- - - - - - - - - - - - - - ---- - - -- - -- 减法内容
jianfa:

	mov bx,offset str3+19
	mov dh,0			;dh--借位
jinx:
	cmp cl,dl
	jle ji1
	mov al,[di]
	sub al,30h
	jmp ji2
ji1:
	mov al,0
ji2:
	mov ah,[si]
	sub ah,30h	
	sub ah,dh
	cmp ah,al
	jl ji3
	sub ah,al
	mov dh,0
	jmp jiex
	
ji3:
	add ah,10
	sub ah,al
	mov dh,1

jiex:
	add ah,30h
	mov [bx],ah
	dec si
	dec di 
	dec bx
	loop jinx

;-----------------------符号

	mov ah,ab+2
	cmp ah,0
	je pab
	mov byte ptr [bx],'-'
	jmp pab1
pab:
	add bx,1
pab1:	


;===============================
 

	mov bh,0
	mov dh,14
	mov dl,20                             ;光标 (14,20)
	mov ah,2
	int 10h
  
  
	mov dx,offset str6
	mov ah,09h
	int 21h                                    ;显示 str6
  

	mov  dx,bx
	mov  ah,09h
	int 21h                                    ;显示 result

 
 
 
 
;==============================
	mov ah,4ch
	int 21h

;----------------------------------
ee:
	mov bh,0
	mov dh,14
	mov dl,20                             
	mov ah,2
	int 10h
  
  
	mov dx,offset str6
	mov ah,09h
	int 21h                                   
  

	mov al,'0'
	mov ah,09h
	mov cx,1
	mov bl,7
	int 10h                                    
 
	mov ah,4ch
	int 21h


code ends
     end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -