可变数据段?



我正在开发一个虚拟CPU的乐趣,我目前正在组装部分。

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

section .data
MyGlobalVar dw 10h

在我引用MyGlobalVar的地方,我应该在汇编时或运行时解析值吗?哪一种方法最合适呢?

mov ra, 10h          ; Assembly time resolved value
mov ra, [0x00000000] ; Address of MyGlobalVar dereferenced when executed

如果您在汇编时隐式解引用以生成一个即时常数,那么您总是可以从源代码中获得该值。这就是equ的作用;程序员可以使用,如果这是他们想要的,而不是从.rodata负载。(在这种情况下,只有索引查找表或类似的代码才能访问该section中的字节。)

显然,这对可变数据根本不起作用,它必须是从其他代码可能修改过的内存位置加载的

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

最新更新