//ex1.asm
name ex2
public d1,d2,n1,n2
extrn ex21:far
extrn ex22:far
data segment para 'dat'
d1 db 88h,44h,66h,00h,99h
n1=$-d1
d2 db 22h,55h,88h
n2=$-d2
data ends
stack segment para stack 'sta'
db 100 dup(?)
stack ends
code segment para 'code'
assume cs:code,ds:data,ss:stack,es:data
main proc far
start:push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
mov es,ax
std
lea si,d1
add si,n1-1
mov cx,n1
call ex21
call pp2
lea si,d2
add si,n2-1
mov cx,n2
call ex21
call pp2
call ex22
lea si,d1
add si,n1-1
mov cx,n1
call ex21
ret
main endp
include pp2.asm
code ends
end start
//ex2.asm
name ex21
public ex21
code segment para 'code'
assume cs:code
ex21 proc far
push ax
push dx
f: lodsb
call pp1
mov dl,' '
mov ah,2
int 21h
loop f
pop dx
pop ax
ret
ex21 endp
pp1 proc
push bx
push cx
mov bl,al
mov cl,4
shr al,cl
call p1
mov al,bl
call p1
pop cx
pop bx
ret
pp1 endp
p1 proc
push ax
push dx
and al,0fh
cmp al,10
jb s
add al,7
S: add al,30h
mov dl,al
mov ah,2
int 21h
pop dx
pop ax
ret
p1 endp
code ends
end
//ex3.asm
name ex22
public ex22
extrn d1:byte,d2:byte
extrn n1:abs,n2:abs
code segment para 'code'
assume cs:code
ex22 proc far
lea si,d1
lea di,d2
mov bx,n1
mov cx,n2
mm:mov al,[di]
sbb [si],al
inc di
inc si
dec bx
loop mm
m1: jz m2
jnc m2
sbb byte ptr [si],0
inc si
dec bx
jmp m1
m2:ret
ex22 endp
code ends
end
//pp2.asm
pp2 proc
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
pp2 endp
masm ex1.asm
masm ex2.asm
masm ex3.asm
link ex1.obj+ex2.obj+ex3.obj