gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 12:07:57 27 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 1234
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行仅将程序集地址设置为 1234,以便于解释发生的事情。
在第2行中,不会生成任何代码,汇编程序只需将 elen的值 2加载到符号表中。由于未生成任何代码,因此地址不会更改。
然后,当您在第4行使用它时,它将把该值加载到寄存器中。
第3行表明 db是不同的,它实际上分配了一些空间(一个字节)并将值存储在该空间中。然后,它将 dlen加载到符号表中,但为其提供该地址的值 1234而不是常量值 2
以后在第5行上使用 dlen时,您将获得地址,必须将其取消引用才能获取实际值 2

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

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