方法作用域和变量作用域翻译成ASM

3

方法作用域和变量作用域只是高级语言的构造,是人类编写更复杂的程序而不是大型过程式代码的一种方式。因此,在汇编语言层面上是否存在作用域?

1个回答

5
所以,在汇编语言级别上确实存在作用域。
是的。
讨论通用汇编语言存在一个问题,因为汇编语言有很多不同的语言:有数百种汇编语言 - 仅对于 x86 就有接近十几种,并考虑到所有现实和理论/教育处理器。
话虽如此,汇编语言也有名称,并且在其中名称解析的上下文更多或更少受限,即作用域。
一些汇编程序支持方法的概念(具有某种开始/结束对),其中可以声明本地名称,这些名称无法在其他方法中访问 - 而其他汇编程序根本没有方法的概念,只是使用带有名称的位置标记:特别是它们不确定方法的结尾,因此没有方法范围的概念。
大多数汇编程序最少允许文件范围与跨文件范围(extern或global)名称。一些汇编程序还支持具有本地名称的宏;一些支持记录定义,其中字段名称仅在某些记录引用结构内有效。
一些汇编程序具有本地标签的概念(通常仅用数字而不是富名称表示),这些标签仅在文件范围(命名)标签之间有效。并且其中一些允许您在引用时指定要匹配的本地标签是从引用前向出现还是从后向出现,这也形成了一种范围。
大多数结构化编程语言支持通过块语句构造嵌套范围,例如每个 { } 对引入一个新范围。 我不知道任何支持这种任意嵌套作用域的汇编语言(除了 Web 汇编语言 wasm,因为它是结构化的!)。
但是,在汇编程序中,名称通常用于代码和全局数据,而许多本地变量只是分配给寄存器或基于堆栈的内存位置,因此名称解析并不适用 - 这些变量的名称仅出现在注释和程序员的头脑中。
当然,在运行时几乎没有名称绑定;名称解析是由编译器/汇编器/链接器/装载程序执行的,硬件只看到指示存储位置的数字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接