Assembly 为什么没有为常量分配内存位置?
组装时-在组装过程中,用常量替换其定义值。因此,不为常数分配内存位置。那么常量是如何以及在哪里存储在内存中的呢Assembly 为什么没有为常量分配内存位置?,assembly,memory,constants,Assembly,Memory,Constants,组装时-在组装过程中,用常量替换其定义值。因此,不为常数分配内存位置。那么常量是如何以及在哪里存储在内存中的呢 <name> equ <value> eq 在编译成机器代码的代码中,许多常量会根据需要进行复制-如果一个常量在两行不同的代码中使用(无论是否在不同的函数中),它很可能会被复制。通常,这在汇编语言中是可见的,如果汇编语言是机器代码的源代码或中间代码 常量通常在机器代码指令中找到 那么常量是如何以及在哪里存储在内存中的呢 <name>
<name> equ <value>
eq
在编译成机器代码的代码中,许多常量会根据需要进行复制-如果一个常量在两行不同的代码中使用(无论是否在不同的函数中),它很可能会被复制。通常,这在汇编语言中是可见的,如果汇编语言是机器代码的源代码或中间代码
常量通常在机器代码指令中找到
那么常量是如何以及在哪里存储在内存中的呢
<name> equ <value>
由于程序(对缓存内存的缓存进行模化)太大,无法装入处理器,程序的机器代码程序指令存储在内存中,因此理论上,我们可以确定这些常量的副本在内存中的什么位置(什么地址或多个地址)出现在机器代码指令中
构造
name eq value
不会单独为此消耗任何位置,正是在其他汇编指令中使用name
,导致值
(或其某些调整)在其机器代码翻译中被编码。通常在机器代码中直接使用,如add eax,
。(例如,显示一个类似于汇编程序计算的字符串长度的用法。)或者,当使用类似于乘以db 0xff
时,根本不使用。这与C预处理器#define
的思想类似,只是在大多数汇编程序中,eq
被计算为一个数字,而不是一个文本替换。它们并没有被存储。汇编程序和链接器在汇编和链接过程中解析常量。将其视为C中的#define,它只是在汇编之前由工具进行搜索和替换。请注意,eq
常量可能仅用作两个数组的大小,而不是立即数。或仅用作1