多文件模块编译,数组求和
程序运行:
暂无
代码:
模块一
extern PROADD:far
datas segment
array dw 1,2,3,4,5,7,8,7,4,3
array_len dw ($-array)/2
sum dw 0
table dw 3 dup(?)
datas ends
stacks segment stack
db 100h dup(?)
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
main proc far
start:
; push ds
; mov ax,0h
; push ax
mov ax,datas ;初始化ds
mov ds,ax
mov table[0],offset array
mov table[2],offset array_len
mov table[4],offset sum
lea si,table
push si
call far ptr PROADD
mov ax,sum
call OUTDECIMAL
mov ah,4ch
int 21h
; ret
main endp
OUTDECIMAL proc far uses ax bx cx
mov bx,10 ;除数
mov cx,0 ;计数器,记录数的位数
bin:
xor dx,dx
div bx
push dx ;保存余数
inc cx
cmp ax,0h ;判断被除数是否为0
jnz bin ;若不为0,则循环继续
bin1:
pop dx
add dl,30h
mov ah,2 ;输出各位数字
int 21h
loop bin1
ret
OUTDECIMAL endp
codes ends
end main
模块二
public PROADD
codes1 segment
assume cs:codes1
PROADD proc far uses ax bx cx bp si di
mov bp,sp
mov si,[bp+16]
mov bx,[si]
mov di,[si+2]
mov cx,[di]
mov di,[si+4]
mov ax,0
ad:
add ax,[bx]
add bx,2
loop ad
mov [di],ax
ret 2
PROADD endp
codes1 ends
end