可变数据部分?

Mutable data section?

提问人:Klarre 提问时间:7/3/2022 最后编辑:Sep RolandKlarre 更新时间:7/3/2022 访问量:195

问:

我正在开发一个虚拟 CPU 以求好玩,我目前正在处理组装部分。

现在我想知道该部分中的值是否应该是可变的。.data

section .data
  MyGlobalVar dw 10h

在我引用 MyGlobalVar 的位置,我应该在程序集时还是运行时解析该值?哪种方式最合适?

mov ra, 10h          ; Assembly time resolved value
mov ra, [0x00000000] ; Address of MyGlobalVar dereferenced when executed
集会 可变 指令集

评论


答:

3赞 Peter Cordes 7/3/2022 #1

如果在组装时隐式取消引用以生成即时常量,则始终会从源代码中获取值。这就是目的;如果这是他们想要的,程序员可以使用它,而不是从 .(在这种情况下,该部分中的字节只能通过索引查找表或类似内容的代码访问。equ.rodata

显然,这根本不适用于可变数据,它必须是来自其他代码可能修改的内存位置的负载。

它是汇编语言;不要将程序指令更改为具有不同架构效果的内容。您正在编写汇编程序,而不是编译器。即使是像这样的部分,通常被映射到只读页面,也可能被调试器修改。.rodata