21,459
社区成员
发帖
与我相关
我的任务
分享
max_num equ 50
cseg segment
assume cs:cseg,ds:cseg,es:cseg
org 100h
begin: jmp start
intro_msg db 10,13,'Input two integer Value:$'
first_msg db 10,13,'First value (50 digit):$'
second_msg db 10,13,'Second value (50 digit):$'
sum_msg db 10,13,9h,9h,' Sum = $'
sum db max_num + 1 dup (0)
sign db '$'
first db max_num + 1 dup (0)
second db max_num + 1 dup (0)
start: mov dx,offset intro_msg
call print_msg
mov dx,offset first_msg
call print_msg
mov di,offset first
call input_num
mov si,offset first[max_num]
mov cx,max_num
call move_byte
mov dx,offset second_msg
call print_msg
mov di,offset second
call input_num
mov si,offset second[max_num]
mov cx,max_num
call move_byte
mov si,max_num
mov cx,max_num +1
call _ADD
mov dx,offset sum_msg
call print_msg
mov si,offset sum
relocate: lodsb
cmp al,'0'
jz relocate
dec si
mov dx,si
call print_msg
exit: mov ah,4ch
int 21h ;quit program
;----------------------------------------------------------
print_msg: mov ah,09h ;print string function call
int 21h
ret
;----------------------------------------------------------
Input_num:
; input di = offset end of buffers
cld
mov bp,max_num
j5: mov ah,0
int 16h
cmp al,1bh
jnz j7
int 20h
j7: cmp al,08h
jnz j10
cmp bp,max_num
jz j5
mov dl,al
mov ah,02h
int 21h
mov ah,07h
mov al,' '
mov cx,1
mov bl,ah ;attrib of byte
mov ah,9 ;write a byte to screen
mov bh,0 ;now_page
int 10h
inc bp
dec di
mov word ptr [di],0
jmp j5
j10: cmp al,0dh
jnz j20
cmp bp,max_num
jnz j40
j20: cmp bp,0
jz j5
cmp al,'0'
ja j30
jb j5
cmp bp,max_num
jz j5
j30: cmp al,'9'
ja j5
stosb
mov dl,al
mov ah,02
int 21h
dec bp
jmp j5
j40: ret
;----------------------------------------------------------
move_byte:
std
mov bp,0
move1: mov bx,si
mov dx,cx
lodsb
cmp al,0
jnz move9
mov di,si
inc di
rep movsb
inc bp
mov cx,dx
mov si,bx
dec cx
jmp move1
move9: cld
cmp bp,0
jz move10
mov di,bx
sub di,max_num
mov al,'0'
mov cx,bp
rep stosb
move10: ret
;----------------------------------------------------------
_add:
;input: si position of last bytes
; cx number of bytes
mov bl,0
_add1: mov al,second[si]
mov ah,first[si]
add al,ah
add al,bl
mov bl,0
sub al,30h
cmp al,39h
jbe _add2
sub al,10
mov bl,1
_add2: mov sum[si],al
dec si
loop _add1
ret
;----------------------------------------------------------
cseg ends
end begin ; end program