Assembly const和#define在汇编中是如何区分的

Assembly const和#define在汇编中是如何区分的,assembly,constants,Assembly,Constants,我知道,使用“eq”一词,可以在汇编中定义一个常量。它是否等同于C中的“const”或“define”?如果它相当于“#define”,那么如何在汇编中定义“const” 提前谢谢 指令eq最类似于在C中声明enum作为实际符号生成。用#define定义的宏只是一个文本替换,这与在汇编程序中定义宏是一样的(语法取决于您使用的汇编程序) 如果声明的对象const的存储持续时间是自动的,则无法将其与非限定对象区分开来。如果存储持续时间是静态的,const限定符通常反映在放置在.text或.rodat

我知道,使用“eq”一词,可以在汇编中定义一个常量。它是否等同于C中的“const”或“define”?如果它相当于“#define”,那么如何在汇编中定义“const”


提前谢谢

指令
eq
最类似于在C中声明
enum
作为实际符号生成。用
#define
定义的宏只是一个文本替换,这与在汇编程序中定义宏是一样的(语法取决于您使用的汇编程序)

如果声明的对象
const
的存储持续时间是自动的,则无法将其与非限定对象区分开来。如果存储持续时间是静态的,
const
限定符通常反映在放置在
.text
.rodata
(如果可用)部分的对象中,因为这两个限定符无法写入。例如,下面的语句

const int taxicab = 1729;
可能被编译为

         section .rodata
taxicab: dd 1729

在nasm语法中。

与简单定义类似/相同#define hello 5,但对于宏类型定义,您必须使用宏。当然,汇编语言指令特定于汇编语言,而汇编语言特定于您使用的程序的汇编程序,而不是目标。Const是一个常量,但为它保留了一个存储空间。我想知道我们如何在汇编中定义这样的东西(我的意思是8086)?汇编语言首先由汇编程序定义,然后由目标程序定义。8086在我们第一次了解汇编程序之前不会告诉我们任何事情。在C编译器使用它之后,您通常会看到它与DB或MOV reg、imm等价。只要看看从编译器返回的程序集列表,它们都支持生成一个。Const是一个常量,但为它保留了一个存储空间。我们如何在汇编(我的意思是8086)中定义这样的东西?谢谢,但是我们可以定义.rodata段吗?如果没有,那么程序员是否有办法在汇编中定义与C中的“const”等效的内容?@Cror2014能否定义rodata段取决于您的工具链。一些工具链仅支持数据/文本/bss,而其他工具链则更灵活。关于你的第二个问题,我相信我已经回答了。