在TASM中,这两个声明(不确定我在这里使用的词是否正确)之间有什么区别:
procName proc和
procName proc near发布于 2016-11-21 20:16:43
如果不指定距离(在过程声明中使用NEAR或FAR ),则从当前模型推断默认值。
对于小型、紧凑和小型车型,默认的距离是
NEAR。对于所有其他模型,FAR是默认的。
只有当您使用简化的分段指令(例如.CODE、.DATA、.STACK)时,这才是正确的,否则总是假定NEAR。
还可以在NEAR指令中指定.MODEL或FAR。
可以通过在过程声明中指定NEAR或FAR来覆盖过程的距离。
指定过程的距离将自动生成两个指令:过程中使用的ret和用于调用它的call。
proc1 PROC NEAR
ret ;This generates the C3 opcode (near return)
proc1 ENDP
proc2 PROC FAR
ret ;This generates the CB opcode (far return)
proc2 ENDP
call proc1 ;This generates opcode E8 (call near relative direct)
call proc2 ;This generates opcode 9A (call far absolute direct)通过使用retf和retn指令以及使用call NEAR PTR proc1、call FAR PTR proc2说明符,您可以始终保持显式。
当汇编程序遇到对源代码中稍后声明的过程的调用(从技术上说,前向声明)时,它必须使用多次传递来解析调用。
它首先假设它是一个近调用,当它遇到被调用过程的声明并且它的距离不在汇编程序附近时,需要另一次传递来纠正它的猜测并生成一个远调用。
可以使用/m交换机启用多个传递,否则在这种情况下将遇到错误。
前向引用需要重写。
我找不到一个PDF版本的TASM-5手册在线,唯一的来源是这是手册的扫描版本。
第10章( pdf第128页,印刷本115页)专门讨论程序声明。
发布于 2016-11-21 20:18:10
摘自Borland Turbo汇编程序用户指南,第125页的PDF (116页关于页脚):当Borland Turbo汇编程序用户指南没有指定的距离(近或远),然后这是由模型。如果指定的距离是(procName proc near),,那么call和ret就会相应地运行。
模型载于PDF格式第92页(83页关于页脚):
MODEL CODE DATA
---------------------------------------
tiny near near
small near near
medium far near
large far FARhttps://stackoverflow.com/questions/40727940
复制相似问题