Tasm程序声明
Tasm procedure declaration
TASM 中过程的这两个声明(不确定我在这里使用的词是否正确)之间有什么区别:
procName proc
和
procName proc near
如果您没有指定距离(在过程声明中使用 NEAR
或 FAR
),默认值是从当前模型推断的。
For TINY, COMPACT and SMALL models the default distance is NEAR
. For all other models FAR
is the default.
仅当您使用简化的分段指令(例如 .CODE
、.DATA
、.STACK
)时才成立,否则始终假定 NEAR
。
您还可以在 .MODEL
指令中指定 NEAR
或 FAR
。
您可以通过在声明中指定 NEAR
或 FAR
来覆盖过程的距离。
指定过程的距离自动生成两条指令:在过程中使用的 ret
s 和用于调用它的 call
s。
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
开关启用多次传递,否则在这种情况下你会遇到错误
forward reference needs override.
我无法在线找到 TASM 5 手册的 PDF 版本,唯一的来源是 this scanned version of the manual。
第 10 章(pdf 的第 128 页,印刷版的第 115 页)专门介绍程序声明。
摘自书 Borland Turbo Assembler User's Guide,PDF 第 125 页(页脚 116):当 procName proc
未指定距离(近或far) 那么这是由模型决定的。如果指定了距离 (procName proc near
),则 call
和 ret
将相应地运行。
模型在 PDF 的第 92 页(页脚 83):
MODEL CODE DATA
---------------------------------------
tiny near near
small near near
medium far near
large far FAR
TASM 中过程的这两个声明(不确定我在这里使用的词是否正确)之间有什么区别:
procName proc
和
procName proc near
如果您没有指定距离(在过程声明中使用 NEAR
或 FAR
),默认值是从当前模型推断的。
For TINY, COMPACT and SMALL models the default distance is
NEAR
. For all other modelsFAR
is the default.
仅当您使用简化的分段指令(例如 .CODE
、.DATA
、.STACK
)时才成立,否则始终假定 NEAR
。
您还可以在 .MODEL
指令中指定 NEAR
或 FAR
。
您可以通过在声明中指定 NEAR
或 FAR
来覆盖过程的距离。
指定过程的距离自动生成两条指令:在过程中使用的 ret
s 和用于调用它的 call
s。
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
开关启用多次传递,否则在这种情况下你会遇到错误
forward reference needs override.
我无法在线找到 TASM 5 手册的 PDF 版本,唯一的来源是 this scanned version of the manual。
第 10 章(pdf 的第 128 页,印刷版的第 115 页)专门介绍程序声明。
摘自书 Borland Turbo Assembler User's Guide,PDF 第 125 页(页脚 116):当 procName proc
未指定距离(近或far) 那么这是由模型决定的。如果指定了距离 (procName proc near
),则 call
和 ret
将相应地运行。
模型在 PDF 的第 92 页(页脚 83):
MODEL CODE DATA
---------------------------------------
tiny near near
small near near
medium far near
large far FAR