方法作用域和变量作用域转换为ASM。

问题描述 投票:0回答:1

方法作用域和变量作用域只是一种高级语言的构造.那么它是否只是人类为了更好的写出具有复杂性的程序,而不是大型程序代码?那么在汇编层面是否存在作用域。

assembly scope
1个回答
2
投票

那么范围是否存在于汇编级。

是存在的。

笼统地讲汇编语言的一个问题是,有这么多不同的语言:汇编语言有上百种--光是x86就接近十几种,再把曾经存在过的所有其他处理器都考虑进去,包括现实的和理论的教育的。

也就是说,汇编语言也有名字,也有上下文,在这些上下文中,名字的解析或多或少是有限制的,即作用域。

有些汇编器支持方法的概念(具有某种形式的 beginend 对),在这个方法中可以声明在其他方法中无法访问的局部名称--而其他汇编器则根本没有方法的概念,只是标有名称的位置:特别是,它们不标识方法的结束,所以没有方法作用域的概念。

大多数汇编器只允许最小限度地使用文件范围与跨文件范围(extern或glob[a]l)的名称。  一些汇编器也支持本地名的宏;一些支持记录定义,其中字段名只在某些记录引用结构中有效。

有些汇编器有一个局部标签的概念(通常是简单的编号而不是赋予丰富的名称),这些标签只在文件范围(命名)标签之间有效。  而其中一些允许你在引用时指定要匹配的局部标签是发生在从引用向前还是从它向后的地方,这也形成了一种范围。

大多数结构化编程语言都支持用块语句构造的嵌套作用域,例如,每个{ }对都会引入一个新的作用域。  我不知道有哪种汇编语言支持这种任意嵌套的作用域(也许除了web汇编,wasm,因为它是结构化的!)。

然而,在汇编语言中,名称通常用于代码和全局数据,而许多局部变量只是分配到寄存器或基于堆栈的内存位置,因此名称解析并不真正适用--这些变量的名称只出现在注释和程序员的头上。

当然,运行时没有(实际上)名称绑定,名称解析已经由编译器assemblerlinkerloader执行,硬件看到的只是表示存储位置的数字。

© www.soinside.com 2019 - 2024. All rights reserved.