0
点赞
收藏
分享

微信扫一扫

汇编--两个5位十进制数相加

其生 2022-04-18 阅读 108
开发语言
;将键盘输入的两个5位十进制数相加,在屏幕上显示相加的结果。
;要求:1.显示格式:被加数+加数=相加的结果;2.考虑运算结果最高位有进位的情况。3.输入和显示分别用子程序实现。

strout macro string ;利用9号DOS功能调用完成字符串显示的宏
	mov ah,9
	lea dx,string
	int 21h
	endm
c_show macro char
	mov ah,2
	mov dl,char
	int 21h
endm
crlf macro    ;完成回车换行的宏
      mov ah,2
      mov dl,0dh ;回车
      int 21h

      mov ah,2
      mov dl,0ah ;换行
      int 21h
     endm

data segment
      data1 db 5 dup(0)   ;存放被加数
            db '+','$'
      data2 db 5 dup(0)   ;存放加数
            db '=','$'
      data3 db 5 dup(0)   ;存放相加的结果
            db '$'
      mess1 db 'input data1:$' 
      mess2 db 'input data2:$'
data ends

code segment
    assume cs:code,ds:data
  start:mov ax,data
        mov ds,ax  ;数据段加载
	call input  
	call output
	mov ax,4c00h
	int 21h    ;程序结束返回

input proc    ;完成两个5位十进制数输入的子程序
	strout mess1 ;被加数输入提示
	mov cx,5   ;利用1号DOS功能调用循环5次完成被加数输入存放到data1
    lea si,data1
     x1:
        MOV AH,1	;输入被加数的一位
        INT 21H
        MOV [si],AL
        inc si
        loop x1
        crlf ;回车换行
        
        strout mess2 ;加数输入提示
	;完成加数输入存放到data2
	mov cx,5
	lea si,data2
	 x2:
	 	mov ah,1
	 	int 21h
	 	mov [si],al
	 	inc si
	 	loop x2
        crlf ;回车换行
	ret
input endp

output proc  ;完成两个5位十进制数相加和显示的子程序
      ;显示被加数+
      strout data1 
		
      ;显示加数=
      strout data2

      ;完成两个5位ascii码表示的十进制数相加,并将结果转换为相应的字符存到data3
       mov cx,5  
       lea si,data1+4  ;si指向被加数的个位
       lea di,data2+4  ;di指向加数的个位
       lea bx,data3+4  ;bx指向和的个位
       clc 
   x3:  
      
      mov al,[si]
      adc al,[di]    
      aaa
      pushf
      add al,30h
      popf   
	  mov [bx],al     
      dec si
      dec di
      dec bx
      loop x3  
       jnc x4  ;5位相加后没有进位转到显示相加结果 
       
       ;有进位显示1
       mov ah,2
       mov dl,'1'
       int 21h 
   x4: strout data3 ;显示相加的结果
       ret
output endp
code ends
     end start 
     
     
     
     

























举报

相关推荐

0 条评论