首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2013-06-26 
主程序和子程序不在同一模块-出错了!extrn proadd:far DATAS SEGMENT commonarraydw 1,2,3,4,5account dw

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

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 proadd@0:far 
----
extern伪指令用于在调用 当前模块之外的过程时使用,它可以指定外部过程的名字和外部过程堆栈框架的大小. 
   如extern mysub@0:proc
   如果proc伪指令声明中没有参数,那么extern伪指令中每个过程名的后缀就是@0.如果声明过程时使用的是参数的扩展的proc伪指令,那么对每个参数@后面的数值要加4.
                                                    ----引用<intel 汇编语言程序设计>(P259)

热点排行