Assembly 在没有列表的8086汇编中,远端调用被设置为跳转到段零和偏移零

Assembly 在没有列表的8086汇编中,远端调用被设置为跳转到段零和偏移零,assembly,call,x86-16,procedures,code-view,Assembly,Call,X86 16,Procedures,Code View,问题: 是什么使得对外部过程的远端调用总是设置为跳转到CS:IP=0000:0000? 当被调试器“CodeView”跟踪时,它不包含实际的过程 我在四个不同的文件中创建了四个公共程序,前三个调用正常工作,但第四个调用组合为:call 0000:0000 对前三个调用进行注释会产生相同的效果 代码: 在Pro.asm内部[包含主程序] 前几行包含extrn声明 EXTRN WelScr:FAR EXTRN RdImgs:FAR EXTRN DispImgs:FAR EXTRN MouseAct:

问题:

是什么使得对外部过程的远端调用总是设置为跳转到CS:IP=0000:0000? 当被调试器“CodeView”跟踪时,它不包含实际的过程

我在四个不同的文件中创建了四个公共程序,前三个调用正常工作,但第四个调用组合为:call 0000:0000

对前三个调用进行注释会产生相同的效果

代码:

在Pro.asm内部[包含主程序]

前几行包含extrn声明

EXTRN WelScr:FAR
EXTRN RdImgs:FAR
EXTRN DispImgs:FAR
EXTRN MouseAct:FAR
然后在main中执行以下调用:

Main_prog PROC FAR

CALL WelScr
CALL RETURN ; another procedure declared inside Pro.asm
CALL ClrScr

CALL RdImgs
;getch() for debug purpose
MOV AH,00
INT 16H

CALL DispImgs
CALL MouseAct ;**Here is the problem**

;Return to DOS
MOV AH,4CH
INT 21H
Main_prog endp
内部鼠标反应器 首先,我声明过程名为PUBLIC 然后在外部过程声明完成后声明两个宏

PUBLIC MouseAct

DISPIM1 MACRO SR,SC,dArr
MOV SI,SC;Start Column Pixel
MOV DX,SR;Start Rwo Pixel
LEA DI,dArr+2 ;image data strats from here 
CALL DispFile1 
DISPIM1   ENDM

ChkClk MACRO i
LOCAL E
CMP DX,75*i
JB RT
CMP DX,75*i+70
JA E
INC ClickNum
CMP ClickNum,2 
JE  RT ; A lable inside the Mouseact Procedure 
MOV ItemNum,i
JMP LOP
E:
ChkClk ENDM
程序本身:

Code_segment_name segment
MouseAct PROC FAR
.
.
;the procedure contents are here
.
. 
RETF
MouseAct  ENDP
MouseAct程序需要的另一个程序:

DispFile1 PROC
.
.
;the procedure contents are here
.
.
RET
DispFile1 ENDP
Code_segment_name ends
end
还附加了MouseAct.lst[列表文件],它不同于其他外部过程列表,也不包含DispFile1过程名称

 Microsoft (R) Macro Assembler Version 5.10                  12/20/15 05:18:0
                                                         Symbols-1


 Macros:

 N a m e            Lines

 CHKCLK . . . . . . . . . . . . .      0
 DISPIM1  . . . . . . . . . . . .     12

 Symbols:            

 N a m e            Type     Value   Attr

 MOUSEACT . . . . . . . . . . . .   F PROC  0000        Global  Length = 0000

@CPU . . . . . . . . . . . . . .    TEXT  0101h     
@FILENAME  . . . . . . . . . . .    TEXT  mouseact      
@VERSION . . . . . . . . . . . .    TEXT  510       


  0 Source  Lines
  0 Total   Lines
 13 Symbols

47570 + 451498 Bytes symbol space free

  0 Warning Errors
  0 Severe  Errors

经过一些挖掘;我发现用macro_name endm结束宏dInitiation部分 i、 e.在上述示例中: DISPIM1宏的DISPIM1 ENDM和ChkClk宏的ChkClk ENDM使汇编程序停止汇编文件的其余部分,从而导致过程全局长度=0 宏结束是ENDM,现在一切正常