首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tasm程序声明

Tasm程序声明
EN

Stack Overflow用户
提问于 2016-11-21 19:31:57
回答 2查看 2.5K关注 0票数 0

在TASM中,这两个声明(不确定我在这里使用的词是否正确)之间有什么区别:

代码语言:javascript
复制
procName proc

代码语言:javascript
复制
procName proc near
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-21 20:16:43

如果不指定距离(在过程声明中使用NEARFAR ),则从当前模型推断默认值。

对于小型、紧凑和小型车型,默认的距离是NEAR。对于所有其他模型,FAR是默认的。

只有当您使用简化的分段指令(例如.CODE.DATA.STACK)时,这才是正确的,否则总是假定NEAR

还可以在NEAR指令中指定.MODELFAR

可以通过在过程声明中指定NEARFAR来覆盖过程的距离。

指定过程的距离将自动生成两个指令:过程中使用的ret和用于调用它的call

代码语言:javascript
复制
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)

通过使用retfretn指令以及使用call NEAR PTR proc1call FAR PTR proc2说明符,您可以始终保持显式。

当汇编程序遇到对源代码中稍后声明的过程的调用(从技术上说,前向声明)时,它必须使用多次传递来解析调用。

它首先假设它是一个近调用,当它遇到被调用过程的声明并且它的距离不在汇编程序附近时,需要另一次传递来纠正它的猜测并生成一个远调用。

可以使用/m交换机启用多个传递,否则在这种情况下将遇到错误。

前向引用需要重写。

我找不到一个PDF版本的TASM-5手册在线,唯一的来源是这是手册的扫描版本

第10章( pdf第128页,印刷本115页)专门讨论程序声明。

票数 3
EN

Stack Overflow用户

发布于 2016-11-21 20:18:10

摘自Borland Turbo汇编程序用户指南,第125页的PDF (116页关于页脚):当Borland Turbo汇编程序用户指南没有指定的距离(近或远),然后这是由模型。如果指定的距离是(procName proc near),,那么callret就会相应地运行。

模型载于PDF格式第92页(83页关于页脚):

代码语言:javascript
复制
 MODEL            CODE            DATA
---------------------------------------
 tiny             near            near
 small            near            near
 medium           far             near
 large            far             FAR
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40727940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档