gpt4 book ai didi

assembly - NASM 中的 equ 和 db 有什么区别?

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:59 30 4
gpt4 key购买 nike

len:  equ  2
len: db 2

它们是否相同,产生一个可以用来代替 2 的标签?如果不是,那么每种报关单的优缺点是什么?它们可以互换使用吗?

最佳答案

第一个是equate,类似于C的:

#define len 2

因为它实际上并没有在最终代码中分配任何空间,它只是将 len 符号设置为等于 2。然后,当您使用 len稍后在您的源代码中,它与使用常量 2 相同。

第二个是define byte,类似于C的:

int len = 2;

确实实际上在内存中分配空间,一个字节,在那里存储一个2,并将len设置为地址 那个字节。

下面是一些显示区别的伪汇编代码:

line   addr   code       label   instruction
---- ---- -------- ----- -----------
1 0000 org 1234h
2 1234 elen equ 2
3 1234 02 dlen db 2
4 1235 44 02 00 mov ax, elen
5 1238 44 34 12 mov ax, dlen

第 1 行只是将汇编地址设置为 1234h,以便更容易解释发生了什么。

在第 2 行中,没有生成代码,汇编器只是将 elen 加载到符号表中,值为 2。由于没有生成代码,地址不会改变。

然后,当您在第 4 行使用它时,它会将该值加载到寄存器中。

第 3 行显示 db 不同,它实际上分配了一些空间(一个字节)并将值存储在该空间中。然后它将 dlen 加载到符号表中,但为其提供该地址的值 1234h 而不是常量值 2

当您稍后在第 5 行使用 dlen 时,您将获得地址,您必须取消引用该地址才能获得实际值 2

关于assembly - NASM 中的 equ 和 db 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47955426/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com