我正在开发一个虚拟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
这样通常被映射到只读页面的部分也可能被调试器修改。