Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么没有为常量分配内存位置?_Assembly_Memory_Constants - Fatal编程技术网

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