当前位置: 代码迷 >> 汇编语言 >> 主程序跟子程序不在同一模块-出错了
  详细解决方案

主程序跟子程序不在同一模块-出错了

热度:259   发布时间:2016-05-02 04:54:21.0
主程序和子程序不在同一模块-出错了!
extrn proadd:far 
DATAS SEGMENT common
    array   dw 1,2,3,4,5
    account dw ($-array)/2
    sum     dw  ?
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
main proc far
    ASSUME CS:CODES,DS:DATAS,SS:STACKS

    MOV AX,DATAS
    MOV DS,AX
    call far ptr proadd
    MOV AH,4CH
    INT 21H
main endp
CODES ENDS
    END main



public proadd
DATAS SEGMENT common
array dw 1,2,3,4,5
count dw ($-array)/2
sum   dw ?
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT 
pradd proc far
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
    MOV AX,DATAS
    MOV DS,AX
    push ax
    push cx
    push si
    lea si,array
    mov cx,count
    xor ax,ax
next:
    add ax,[si]
    add si,2
    loop next
    mov sum,ax
    pop si
    pop cx
    pop ax
ret
proadd endp
CODES ENDS
    end


运行出错了,求解啊!

------解决方案--------------------
第二个程序31行应该是retf吧
------解决方案--------------------
运行时出错了?编译都通不过吧?pradd proc far 里应该是 proadd proc far
------解决方案--------------------
调用不对
extrn [email protected]:far 
----
extern伪指令用于在调用 当前模块之外的过程时使用,它可以指定外部过程的名字和外部过程堆栈框架的大小. 
   如extern [email protected]:proc
   如果proc伪指令声明中没有参数,[email protected]?明过程时使用的是参数的扩展的proc伪指令,[email protected]
                                                    ----引用<intel 汇编语言程序设计>(P259)
  相关解决方案